GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Master-Master-Replikation mit MariaDB

Vor ein paar Tagen habe ich ein Tutorial darüber geschrieben, wie man mit MariaDB (oder MySQL) repliziert. Dies ist eine Replikation in eine Richtung:vom Master zum Slave; Das bedeutet, dass der Slave-Server die Transaktionen vom Master erhält. Aber mein Client braucht eine bidirektionale Replikation, weil wir nicht wissen, welcher Server die Transaktion empfängt und auf beiden die gleichen Daten sein müssen. Hier zeige ich Ihnen, wie Sie die Master-Master-Replikation mit MariaDB konfigurieren, um dies zu erreichen.

Mein Setup

Nur für den Fall, dass Sie den vorherigen Artikel verpasst haben, dies sind die Funktionen der virtuellen Maschinen, auf denen ich diese Replikation ausführe.

  • OS:Debian testet „Bookworm“
  • MariaDB-Version:10.5.12
  • Master1:192.168.122.13
  • Master2:192.168.122.223

Masters-Konfiguration

Beide Master erhalten die gleiche Konfiguration, edit /etc/mysql/mariadb.conf.d/50-server.cnf und ersetzen Sie die folgenden Werte:

bind-address  = <master.X.ip.address>
server-id        = <X>
report_host    = masterX
log_bin          = /var/log/mysql/mysql-bin.log
relay_log       = /var/lib/mysql/relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index

log-slave-updates
auto_increment_increment=2
auto_increment_offset=X

Wobei X für den ersten Master 1 und für den zweiten 2 ist.
Die Autoincrement-Werte bedeuten, dass in ID-Kind-Feldern einer der Master immer gerade Zahlen erhält und der andere immer ungerade Zahlen. Damit soll verhindert werden, dass in beiden Mastern gleichzeitig die exakt gleiche ID-Nummer vergeben wird.

Starten Sie nun den mariadb-Dienst neu und melden Sie sich bei mysql an, um einen Benutzer (esclavo bedeutet auf spanisch Sklave) mit Replikationsrechten zu erstellen:

CREATE USER 'esclavo1'@'ip.mysql.master.2' IDENTIFIED BY 'SlavePass' ;
GRANT REPLICATION SLAVE ON *.* TO 'esclavo1'@'ip.mysql.master.2';
FLUSH PRIVILEGES;

Wiederholen Sie dies auf beiden Mastern und ändern Sie die Informationen entsprechend (d. h. erstellen Sie auf Master2 einen Benutzer [email protected] ). Aber holen Sie sich zuerst einen SQL-Dump Ihres ersten Masters und laden Sie ihn in den zweiten:

master1: mysqldump -u root --all-databases -p --master-data > data.sql
master2: mysql -uroot < data.sql

Holen Sie sich nun einige Informationen über diesen Master, die wir benötigen, um den Slave-Modus auf dem anderen Host zu aktivieren.

MariaDB [(none)]> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003|      358 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.000 sec)
STOP SLAVE;

Slaves-Konfiguration

Jetzt ist es an der Zeit, den Slave-Modus auf beiden Mariadb/Mysql-Hosts zu konfigurieren:

CHANGE MASTER TO MASTER_HOST='ip.mysql.master.X', MASTER_USER='esclavoX',MASTER_PASSWORD='SlavePass MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS = 358';
START SLAVE;

Der Wert master_host ist die IP des anderen Masters, der Wert master_user ist der Benutzer, den Sie auf dem anderen Master erstellt haben, und schließlich erhalten Sie die Werte master_log_file und master_log_post von show master sta tus-Befehl.

Alles prüfen

Um zu sehen, ob ich die Master-Master-Replikation mit MariaDB aktivieren konnte, habe ich einen sehr einfachen Test durchgeführt:

Ich habe eine Datenbank auf einem Master erstellt, dann eine einfache Tabelle (nur 1 Feld) und ein paar Datensätze eingefügt. Dann habe ich mit einem Select überprüft, ob Daten auf beiden Hosts erscheinen. Schließlich habe ich auf einem Host eine automatisch inkrementelle ID-Spalte hinzugefügt und weitere Daten eingefügt, um zu sehen, wie sie angezeigt werden:

Nur um diese Screenshots noch verwirrender zu machen:Ich habe die auto_increment-Konfiguration (Inkrement und Offset) während dieses Tests zu my.cnf hinzugefügt und nicht von Anfang an, weil ich davon nichts wusste, bis ich mit den Tests begonnen hatte.

Wie auch immer, so habe ich die Master-Master-Replikation mit MariaDB aktiviert, das ist auch die Slave-Slave-Replikation. Oder Master-Slave und Slave-Master-Replikation, wie Sie es nennen.

Ich denke, der nächste logische Schritt ist die Erforschung und Nutzung einiger Galera-Cluster.


Linux
  1. Replizieren einer Master-Datenbank mit MariaDB 10 auf Debian 8

  2. So richten Sie die MySQL-Master-Master-Replikation ein

  3. Einrichten der Master-Master-Replikation mit MySQL unter Debian 8 (Jessie)

  4. So installieren Sie WordPress mit LEMP auf Ubuntu 20.04

  5. So richten Sie die MariaDB-Master-Slave-Replikation unter Ubuntu 18.04 ein

So konfigurieren Sie die MariaDB-Replikation unter CentOS Linux

Master-Slave-Replikation mit MariaDB

So richten Sie die MariaDB-Master-Slave-Replikation unter CentOS 7 ein

So installieren Sie den OpenLiteSpeed-Webserver mit MariaDB und PHP

So verwalten Sie Postfächer mit RoundCube unter CentOS 7

8 Schritte zur Installation von MirthConnect mit MySQL / MariaDB unter Linux