Datenbankkonfiguration · 4 min read · Oct 08, 2025
Der perfekte Lastenausgeglichene & Hochverfügbarkeits-Webcluster mit 2 Servern, die Xen auf Ubuntu 8.04 Hardy Heron ausführen - Seite 4
10. MySQL-Replikation (web1, web2)
10.1 Mysql MySQL 5.0 installieren
apt-get install mysql-server-5.0 mysql-client-5.0
Um sicherzustellen, dass die Replikation funktioniert, müssen wir MySQL so konfigurieren, dass es auf allen Schnittstellen hört. Daher kommentieren wir die Zeile bind-address = 127.0.0.1 in /etc/mysql/my.cnf aus:
vi /etc/mysql/my.cnf
[...]
# Anstelle von skip-networking ist die Standardeinstellung jetzt, nur auf
# localhost zu hören, was kompatibler ist und nicht weniger sicher.
#bind-address = 127.0.0.1
[...]Starten Sie MySQL danach neu:
/etc/init.d/mysql restart
Auf web1
Jetzt richten wir einen Replikationsbenutzer slave2_user ein, der von web2.example.com verwendet werden kann, um auf die MySQL-Datenbank zuzugreifen:
mysql -u root -p
Führen Sie im MySQL-Shell die folgenden Befehle aus:
GRANT REPLICATION SLAVE ON . TO ‘slave2_user’@’%’ IDENTIFIED BY ‘slave2_password’;
FLUSH PRIVILEGES;
quit;
Auf web2
Jetzt führen wir die letzten beiden Schritte erneut auf web2.example.com aus:
mysql -u root -p
GRANT REPLICATION SLAVE ON . TO ‘slave1_user’@’%’ IDENTIFIED BY ‘slave1_password’;
FLUSH PRIVILEGES;
quit;
Auf web1 UND web2
Wir werden jetzt eine Datenbank erstellen, die später für den Mailserver verwendet wird:
mysqladmin -u root -p create mail
Als nächstes gehen wir zur MySQL-Shell:
mysql -u root -p
In der MySQL-Shell erstellen wir den Benutzer mail_admin mit dem Passwort mail_admin_password (ersetzen Sie es durch Ihr eigenes Passwort), der SELECT, INSERT, UPDATE, DELETE-Berechtigungen auf der Mail-Datenbank hat. Dieser Benutzer wird von Postfix und Courier verwendet, um eine Verbindung zur Mail-Datenbank herzustellen:
GRANT SELECT, INSERT, UPDATE, DELETE ON mail. TO ‘mail_admin’@’localhost’ IDENTIFIED BY ‘mail_admin_password’;
GRANT SELECT, INSERT, UPDATE, DELETE ON mail. TO ‘mail_admin’@’localhost.localdomain’ IDENTIFIED BY ‘mail_admin_password’;
FLUSH PRIVILEGES;
quit;
10.2 Replikation einrichten
Jetzt richten wir die Master-Master-Replikation in /etc/mysql/my.cnf ein. Die entscheidenden Konfigurationsoptionen für die Master-Master-Replikation sind auto_increment_increment und auto_increment_offset:
- auto_increment_increment steuert den Inkrement zwischen aufeinanderfolgenden AUTO_INCREMENT-Werten.
- auto_increment_offset bestimmt den Ausgangspunkt für die AUTO_INCREMENT-Spaltenwerte.
Angenommen, wir haben N MySQL-Knoten (N=2 in diesem Beispiel), dann hat auto_increment_increment den Wert N auf allen Knoten, und jeder Knoten muss einen anderen Wert für auto_increment_offset haben (1, 2, …, N).
Jetzt konfigurieren wir unsere beiden MySQL-Knoten:
Auf web1
vi /etc/mysql/my.cnf
Fügen Sie die folgenden Zeilen direkt unter “[mysqld]” hinzu:
server-id = 1
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1
# verwenden Sie 192.168.1.105, wenn Sie kein Crossover-Kabel auf eth1 installiert haben
master-host = 192.168.0.105
master-user = slave1_user
master-password = slave1_password
master-connect-retry = 60
replicate-do-db = mail
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db = mail
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.indexund ändern Sie die Zeile “max_binlog_size”:
[...]
max_binlog_size = 500M
[...]/etc/init.d/mysql restart
Auf web2
vi /etc/mysql/my.cnf
server-id = 2
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 2
# verwenden Sie 192.168.1.104, wenn Sie kein Crossover-Kabel auf eth1 installiert haben
master-host = 192.168.0.104
master-user = slave2_user
master-password = slave2_password
master-connect-retry = 60
replicate-do-db = mail
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db = mail
relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.indexund ändern Sie die Zeile “max_binlog_size”:
[...]
max_binlog_size = 500M
[...]/etc/init.d/mysql restart
Auf web1 UND web2
Jetzt werden wir die Replikation starten:
mysql -u root -p
Führen Sie in der MySQL-Shell die folgenden Befehle aus:
reset master;
stop slave;
reset slave;
Führen Sie jetzt Folgendes aus:
Auf web1
CHANGE MASTER TO MASTER_HOST=’192.168.0.105’, MASTER_USER=’slave1_user’, MASTER_PASSWORD=’slave1_password’, MASTER_LOG_FILE=’mysql-bin.000001’, MASTER_LOG_POS=98;
start slave;
quit;
Auf web2
CHANGE MASTER TO MASTER_HOST=’192.168.0.104’, MASTER_USER=’slave2_user’, MASTER_PASSWORD=’slave2_password’, MASTER_LOG_FILE=’mysql-bin.000001’, MASTER_LOG_POS=98;
start slave;
quit;
Jetzt sollte die Replikation funktionieren.
10.3 Replikation testen
Auf web1 UND web2
mysql -u root -p
Führen Sie in der MySQL-Shell die folgenden Befehle aus:
show slave status \G;
Es gibt 3 wichtige Zeilen in der Ausgabe, die so aussehen sollten:
[...]
Slave_IO_State: Waiting for master to send event
[...]
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: mail
[...]Jetzt können Sie mysql beenden:
quit;
Auf web1
Wir werden einige Daten auf web1.example.com zum Testen einfügen, die im nächsten Kapitel für die Mail verwendet werden:
mysql -u root -p
Führen Sie in der MySQL-Shell die folgenden Befehle aus:
use mail;
Wir werden die folgenden Tabellen erstellen:
CREATE TABLE domains (
domain varchar(50) NOT NULL,
transport varchar(128) NOT NULL default ‘smtp:[192.168.1.104]’,
PRIMARY KEY (domain) )
TYPE=MyISAM;
CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
TYPE=MyISAM;
CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT ‘10485760’,
PRIMARY KEY (email)
) TYPE=MyISAM;
CREATE TABLE transport (
domain varchar(128) NOT NULL default ‘’,
transport varchar(128) NOT NULL default ‘’,
UNIQUE KEY domain (domain)
) TYPE=MyISAM;
quit;
Diese frisch erstellten Tabellen sollten auch in der Mail-Datenbank von web2 erscheinen, dank der Replikation.
Auf web2
Jetzt werden wir überprüfen, dass:
mysql -u root -p
Führen Sie in der MySQL-Shell die folgenden Befehle aus:
use mail;
show tables;
Die Ausgabe sollte sein:
+----------------+
| Tables_in_mail |
+----------------+
| domains |
| forwardings |
| transport |
| users |
+----------------+
4 rows in set (0.00 sec)quit;
Wenn Sie sehen, dass die Replikation funktioniert.
10.4 Benutzer für ldirectord erstellen
Wir werden jetzt den Benutzer erstellen, der sich in der Datei ldirectord.php mit der Datenbank verbindet.
Auf web1 UND web2
mysql -u root -p
Führen Sie in der MySQL-Shell die folgenden Befehle aus:
GRANT USAGE ON . TO ‘ldirectord’@’localhost’ IDENTIFIED BY ‘LDIRECTORD_PASSWORD’;
quit;
Jetzt, wenn Sie mit Ihrem Browser zu den Adressen gehen:
http://192.168.1.104/ldirectord.php
und
http://192.168.1.105/ldirectord.php
Sollten Sie sehen:
Connected to MySQL
auf dem Bildschirm angezeigt.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.