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.index

und ä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.index

und ä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.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.