So richtest du die MariaDB Master-Master-Replikation unter Debian 11 ein
In diesem Tutorial wird erklärt, wie du die MariaDB Master-Master-Replikation auf Debian 11-Servern einrichtest. Außerdem wird erklärt, wie du die Zeit mit Chrony zwischen MariaDB-Servern synchronisieren kannst.
Voraussetzungen
Für dieses Tutorial brauchst du die folgenden Voraussetzungen:
- Zwei oder mehr Debian 11 Server. In dieser Demonstration wurden zwei Debian-Server verwendet.
- Einen Nicht-Root-Benutzer mit Root-/Administrator-Rechten.
fqdn und /etc/hosts-Datei einrichten
Um den MariaDB Master-Master zwischen mehreren Servern einzurichten, musst du sicherstellen, dass jeder Systemhostname in die richtige IP-Adresse aufgelöst wird. Um dies zu konfigurieren, musst du auf jedem Server den fqdn und die Datei /etc/hosts einrichten.
In dieser Demonstration werden wir zwei Debian-Server verwenden:
IP Address Hostname FQDN --------------------------------------------------- 192.168.5.10 master1 master1.localdomain.io 192.168.5.11 master2 master2.localdomain.io
Um den richtigen fqdn (Fully Qualified Domain Name) einzurichten, führe den Befehl hostnamectl aus.
Richte fqdn für den Server„master1“ ein.
sudo hostnamectl set-hostname master1.localdomain.io
Richte fqdn für den„master2“ Server ein.
sudo hostnamectl set-hostname master2.localdomain.io
Als Nächstes bearbeitest du die Datei /etc/hosts auf jedem Server mit dem folgenden Befehl.
sudo nano /etc/hosts
Füge die folgende Konfiguration in die Datei ein.
192.168.5.10 master1.localdomain.io master1 192.168.5.11 master2.localdomain.io master2
Speichere und schließe die Datei, wenn du fertig bist.
Führe abschließend den Befehl„ping“ aus, um den fqdn und die Datei /etc/hosts zu prüfen und zu verifizieren.
Jetzt solltest du sehen, dass der Hostname„master1“ auf den fqdn„master1.localdomain.io“ mit der IP-Adresse„192.168.5.10“ zeigt. Und der Hostname„master2“ wird auf den fqdn„master2.localdomain.io“ mit der IP-Adresse „192.168.5.11“ verweisen.
ping master1 ping master2
Zeitsynchronisation mit Chrony
Die Zeitsynchronisierung ist für die MariaDB Master-Master Replikation von entscheidender Bedeutung. Um die Zeit zwischen den Servern zu synchronisieren, musst du Chrony als NTP-Client auf jedem MariaDB-Server einrichten.
Um das Chrony-Paket zu installieren, führe den folgenden Befehl„apt install“ aus. Gib Y ein, um die Installation zu bestätigen, und drücke ENTER, um die Installation zu starten.
sudo apt install chrony
Nachdem die Installation abgeschlossen ist, führe den folgenden Befehl„systemctl“ aus, um den Chrony-Dienst zu starten und zu aktivieren.
sudo systemctl start chrony sudo systemctl enable chrony
Überprüfe und verifiziere den Chrony-Dienst mit dem folgenden Befehl. Du solltest sehen, dass der Chrony-Dienst läuft. Außerdem siehst du, dass der Chrony-Dienst„aktiviert“ ist, d.h. er wird beim Systemstart automatisch ausgeführt.
sudo systemctl status chronyd
Als Nächstes führst du den Befehl„timedatectl“ aus, um die Systemzeit mit der jeweiligen Zeitzone abzugleichen und die Verwendung des NTP-Dienstes Chrony zu aktivieren.
sudo timedatectl set-timezone Europe/Stockholm --adjust-system-clock sudo timedatectl set-ntp yes
Zum Schluss führst du den Befehl„timedatectl“ aus, um die aktuellen Einstellungen deiner Systemuhr und -zeit zu prüfen und zu verifizieren. Stelle sicher, dass die Zeit zwischen allen MariaDB Servern synchronisiert ist.
timedatectl
Installation von MariaDB Server
Das Standard-Debian-Repository enthält das MariaDB-Serverpaket. Für diese Demonstration werden wir den MariaDB-Server jedoch aus dem offiziellen MariaDB-Repository installieren.
Bevor du den MariaDB-Server installierst, führe den Befehl„apt install“ aus, um einige grundlegende Paketabhängigkeiten zu installieren. Gib Y ein, um die Installation zu bestätigen und drücke ENTER, um fortzufahren.
sudo apt install gnupg2 apt-transport-https software-properties-common
Als nächstes führst du den folgenden Befehl aus, um den GPG-Schlüssel für das MariaDB-Repository zu importieren. Der vollständige Fingerabdruck des Schlüssels lautet„1993 69E5 404B D5FC 7D2F E43B CBCB 082A 1BB9 43DB„.
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
Führe nun den folgenden Befehl aus, um das MariaDB-Repository für den Debian 11-Server hinzuzufügen. Aktualisiere dann den Paketindex auf deinen Servern.
sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://sfo1.mirrors.digitalocean.com/mariadb/repo/10.8.3/debian bullseye main' sudo apt update
Um das Paket„mariadb-server“ zu installieren, führe den folgenden Befehl„apt install“ aus. Gib zur Bestätigung Y ein und drücke ENTER, damit die Installation beginnt.
sudo apt install mariadb-server
Auf dem Debian-System wird der MariaDB-Dienst automatisch gestartet und aktiviert. Führe den folgenden„systemctl„-Befehl aus, um den MariaDB-Dienst zu prüfen und zu verifizieren.
Du solltest sehen, dass der MariaDB-Dienst„aktiviert“ ist, d.h. er wird beim Systemstart automatisch ausgeführt. Und der aktuelle Status des MariaDB-Dienstes ist„running„.
sudo systemctl is-enabled mariadb sudo systemctl status mariadb
Einrichten der UFW-Firewall
Es wird empfohlen, eine Firewall zwischen all deinen MariaDB-Servern einzurichten. Dadurch wird sichergestellt, dass nur zugelassene IP-Adressen oder Netzwerke auf die Ports des MariaDB-Dienstes zugreifen und diese erreichen können. In dieser Demo werden wir die UFW-Firewall verwenden.
Führe den Befehl „apt install“ aus, um das Paket„ufw“ zu installieren. Gib Y ein, um die Installation zu bestätigen und drücke ENTER, um fortzufahren.
sudo apt install ufw
Nachdem die Installation abgeschlossen ist, führe den unten stehenden Befehl„ufw“ aus, um das Anwendungsprofil„OpenSSH“ hinzuzufügen. Starte dann den UFW-Firewall-Dienst und aktiviere ihn.
Du wirst aufgefordert, die UFW-Firewall zu bestätigen und zu aktivieren, gib „y“ ein und drücke ENTER. Die UFW-Firewall ist nun eingerichtet und läuft.
sudo ufw allow "OpenSSH" sudo ufw enable
Als Nächstes öffnest du einige Ports für den MariaDB Master-Master Replication Einsatz. Einige TCP-Ports für die MariaDB Replikationsbereitstellung sind„3306„,„4567„,„4568“ und„4444„.
In diesem Beispiel wird nur den Netzwerken„192.168.5.0/24“ der Zugriff auf die TCP-Ports des MariaDB-Servers erlaubt.
Für den Server„master1“ mit der IP-Adresse„192.168.5.10“ führst du die folgenden„ufw„-Befehle aus.
sudo ufw allow from 192.168.5.0/24 to 192.168.5.10 port 3306 proto tcp sudo ufw allow from 192.168.5.0/24 to 192.168.5.10 port 4567 proto tcp sudo ufw allow from 192.168.5.0/24 to 192.168.5.10 port 4568 proto tcp sudo ufw allow from 192.168.5.0/24 to 192.168.5.10 port 4444 proto tcp
Für den„master2„-Server mit der IP-Adresse„192.168.5.11“ führst du die folgenden„ufw„-Befehle aus.
sudo ufw allow from 192.168.5.0/24 to 192.168.5.11 port 3306 proto tcp sudo ufw allow from 192.168.5.0/24 to 192.168.5.11 port 4567 proto tcp sudo ufw allow from 192.168.5.0/24 to 192.168.5.11 port 4568 proto tcp sudo ufw allow from 192.168.5.0/24 to 192.168.5.11 port 4444 proto tcp
Überprüfe abschließend den Status der UFW-Firewall mit allen aktivierten Regeln mit dem folgenden Befehl. Du solltest das Anwendungsprofil „OpenSSH“ mit allen MariaDB Replication Ports„3306„,„4567„,„4568“ und„4444“ in der UFW-Firewall sehen.
sudo ufw status
Einrichten von master1 MariaDB Server
Du hast die grundlegende Konfiguration des Debian-Servers für die MariaDB Master-Master-Replikation abgeschlossen. Jetzt können wir mit der Konfiguration der MariaDB-Server beginnen.
Zunächst richtest du den MariaDB-Server auf dem Server„master1“ ein. Melde dich in der Shell des Servers„master1“ an.
Führe den Befehl„systemctl“ aus, um den MariaDB-Dienst zu stoppen. Dies ist notwendig, bevor du den MariaDB-Server einrichtest.
sudo systemctl stop mariadb
Bearbeite nun die MariaDB-Serverkonfigurationsdatei„/etc/mysql/mariadb.conf.d/50-server.cnf“ mit dem folgenden Befehl.
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Ändere die Standard-„listen-address“ in die interne IP-Adresse. In diesem Beispiel hat der Server„master1“ die IP-Adresse„192.168.5.10„. Als Nächstes aktivierst du„binary_log“ für den MariaDB-Server, damit du die Replikation auf dem MariaDB-Server einrichten kannst. Achte darauf, dass du die folgende Konfiguration unter der Option „[mysqld]“ einträgst.
[mysqld] bind-address = 192.168.5.10 server-id = 1 report_host = master1 log_bin = /var/log/mysql/mariadb-bin log_bin_index = /var/log/mysql/mariadb-bin.index relay_log = /var/log/mysql/relay-bin relay_log_index = /var/log/mysql/relay-bin.index
Speichere und schließe die Datei, wenn du fertig bist.
Als Nächstes führst du den Befehl„systemctl“ aus, um den MariaDB-Dienst zu starten und die neuen Änderungen zu übernehmen. Überprüfe dann, unter welcher IP-Adresse MariaDB läuft. Du solltest sehen, dass der MariaDB-Dienst jetzt unter der internen IP-Adresse„192.168.5.10“ läuft.
sudo systemctl start mariadb ss -plnt
Jetzt musst du einen neuen MariaDB-Benutzer anlegen, der für die Replikation von Daten zwischen MariaDB-Servern verwendet wird. Melde dich mit dem unten stehenden Befehl„mysql“ als„root“ in der MariaDB-Shell an.
sudo mysql -u root -p
Führe die folgenden Abfragen aus, um einen neuen MariaDB-Benutzer und das Passwort„replusr“ zu erstellen. Erteile dem Benutzer dann die richtigen Berechtigungen.
CREATE USER 'replusr'@'%' IDENTIFIED BY 'replusr'; GRANT REPLICATION SLAVE ON *.* TO 'replusr'@'%'; FLUSH PRIVILEGES;
Als Nächstes führst du die folgende Abfrage aus, um das aktuelle Binärprotokoll und seine genaue Position zu überprüfen. In diesem Beispiel lautet die binäre Protokolldatei für den MariaDB-Server„mariadb-bin.000001“ mit der Position„773„. Diese Ausgaben werden im nächsten Schritt für die Einrichtung des Servers„master2“ verwendet.
SHOW MASTER STATUS;
Gib„quit“ ein, um die MariaDB-Shell zu verlassen.
Einrichten des MariaDB-Servers „master2
Wechsle nun zum„master2„-Server und beginne mit der Konfiguration des MariaDB-Servers. Die Konfiguration für die MariaDB Master-Master Replikation unterscheidet sich bei allen MariaDB Servern nicht besonders.
Führe den folgenden Befehl aus, um den MariaDB-Dienst zu stoppen.
sudo systemctl stop mariadb
Bearbeite die MariaDB-Konfigurationsdatei„/etc/mysql/mariadb.conf.d/50-server.cnf“ mit dem folgenden Befehl.
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Ändere die„bind-address“ auf die lokale IP-Adresse des„master2„-Servers. Aktiviere dann das Binary Log auf dem MariaDB-Server„master2„, um die Replikation zu ermöglichen. Achte darauf, dass du die folgende Konfiguration unter der Option „[mysqld]“ hinzufügst.
[mysqld] bind-address = 192.168.5.11 server-id = 2 report_host = master2 log_bin = /var/log/mysql/mariadb-bin log_bin_index = /var/log/mysql/mariadb-bin.index relay_log = /var/log/mysql/relay-bin relay_log_index = /var/log/mysql/relay-bin.index
Speichere und schließe die Datei, wenn du fertig bist.
Starte als nächstes den MariaDB-Dienst, um die neuen Änderungen zu übernehmen. Überprüfe dann die aktuelle IP-Adresse, unter der der MariaDB-Server läuft, und überprüfe sie. Wenn deine Konfiguration korrekt ist, wirst du sehen, dass der MariaDB-Server nicht auf der internen IP-Adresse des„master2„-Servers läuft, die „192.168.5.11“ lautet.
sudo systemctl start mariadb ss -plnt
Nachdem der MariaDB-Dienst läuft, führe den folgenden Befehl aus, um dich in der MariaDB-Shell als Benutzer„root“ anzumelden.
sudo mysql -u root -p
Führe die folgenden Abfragen aus, um einen neuen MariaDB-Benutzer zu erstellen, der für die Datenreplikation zwischen allen MariaDB-Servern verwendet wird. Dieser Benutzer muss mit dem Benutzer übereinstimmen, den du gerade auf dem Server „master1“ angelegt hast.
CREATE USER 'replusr'@'%' IDENTIFIED BY 'replusr'; GRANT REPLICATION SLAVE ON *.* TO 'replusr'@'%'; FLUSH PRIVILEGES;
Danach musst du Änderungen auf dem MariaDB-Server „master2“ vornehmen und den„Master„-Knoten anhand der detaillierten Konfiguration des MariaDB-Servers„master1“ definieren.
Führe die folgenden Abfragen aus, um den Slave zu stoppen. Füge dann detaillierte Informationen über den MariaDB „master1“ Server hinzu. In diesem Beispiel verwendet der MariaDB„master1“ Server den Hostnamen„master1„, der Benutzer und das Passwort für die Datenreplikation ist„replusr“ und die binlog Datei ist„mariadb-bin.000001“ mit der Position„773„.
STOP SLAVE; CHANGE MASTER TO MASTER_HOST='master1', MASTER_USER='replusr', MASTER_PASSWORD='replusr', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=773;
Starte nun den Slave erneut mit der folgenden Abfrage. Überprüfe dann den Slave-Status auf dem„master2„-Server. Wenn du eine Ausgabe wie „Slave_IO_Running: Ja“ und „Slave_SQL_Running: Ja„, bedeutet das, dass die MariaDB-Replikation aktiv ist und läuft. Außerdem kannst du sehen, dass die binäre Protokolldatei auf dem „Master2“ Server ist „mariadb-bin.000001“ mit der Position „773„, die die gleiche sein sollte wie auf dem „master1“ Server. Außerdem kannst du sehen, dass der MariaDB „Master_Host“ Wert ist „master1„.
START SLAVE; SHOW SLAVE STATUS\G
Du kannst die binäre Master-Logdatei und die Position auf dem Server„master2“ auch mit der folgenden Abfrage überprüfen. Dabei solltest du die gleiche Ausgabe wie die binäre Protokolldatei„mariadb-bin.000001“ mit der Position„773“ wie auf dem„master1„-Server erhalten.
SHOW MASTER STATUS;
Starten der Master-Master-Replikation auf dem MariaDB-Server „master1
Da es in dieser Anleitung darum geht, die MariaDB Master-Master-Replikation einzurichten, musst du auch die detaillierte Konfiguration von „master2“ zum„master1„-Server hinzufügen und definieren.
Gehe zurück zum„master1„-Server und melde dich mit dem unten stehenden„mysql„-Befehl in der MariaDB-Shell an.
sudo mysql -u root -p
Stoppe den Slave mit dem folgenden Befehl. Füge dann detaillierte Informationen über den„master2„-Server hinzu. Dazu gehören der Hostname des„master2„-Servers, der MariaDB-Benutzer und das Passwort für die Replikation sowie die binäre Protokolldatei und die Position.
STOP SLAVE; CHANGE MASTER TO MASTER_HOST='master2', MASTER_USER='replusr', MASTER_PASSWORD='replusr', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=773;
Starte nun den Slave mit dem unten stehenden Befehl erneut. Dann überprüfe und verifiziere den Slave auf dem „master1“ Server. Du solltest die folgenden Ausgaben sehen: „Slave_IO_Running: Ja“ und „Slave_SQL_Running: JaDas bedeutet, dass die MariaDB-Replikation aktiv ist und auf dem “ “ Server läuft.master1“ MariaDB-Server. Außerdem kannst du sehen, dass der „Master_Host“ Wert ist der „master2“ Server.
START SLAVE; SHOW SLAVE STATUS\G
Testen der Datenbankreplikation
Um die MariaDB Master-Master-Replikation zu überprüfen, erstellst du eine neue Datenbank auf dem Server „master1“ und gibst einige Daten in sie ein. Melde dich dann auf „master2“ an und überprüfe die Datenbank, indem du weitere Daten eingibst.
Gehe zum Server„master1“ und melde dich mit dem folgenden Befehl als Root-Benutzer in der MariaDB-Shell an.
sudo mysql -u root -p
Erstelle eine neue Datenbank„testdb“ mit der folgenden Abfrage.
CREATE DATABASE testdb; USE testdb;
Erstelle nun mit der folgenden Abfrage einige Tabellen in der Datenbank„testdb„.
CREATE TABLE users (id INT AUTO_INCREMENT, firstname VARCHAR(30), lastname VARCHAR(30), date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(id));
Danach fügst du mit der folgenden MariaDB-Abfrage einige Daten in die„testdb“ ein.
INSERT INTO users(firstname,lastname) VALUES ('Alice','Wonders');
Um deine Daten auf dem MariaDB-Server zu überprüfen, verwende die„SELECT„-Abfrage wie unten. Du solltest dann die Daten sehen, die du gerade eingefügt hast.
SELECT * FROM users;
Als Nächstes gehst du zum Server„master2“ und meldest dich mit dem unten stehenden Befehl„mysql“ in der MariaDB-Shell an.
sudo mysql -u root -p
Überprüfe die Liste der Datenbanken auf dem„master2„-Server mit der folgenden Abfrage. Du solltest die Datenbank„testdb“ erhalten, die du gerade erstellt hast.
SHOW DATABASES; USE testdb;
Füge als Nächstes einige andere Daten in die Datenbank„testdb“ auf dem Server„master2“ ein. Überprüfe dann die Daten mit der Abfrage„SELECT„. Du solltest die neuen Daten vom„master2„-Server erhalten.
INSERT INTO users(firstname,lastname) VALUES ('Bob','Burgers'); SELECT * FROM users;
Gehe nun zurück zu„master1„, um die neuen Daten, die du gerade vom „master2“-Server eingefügt hast, zu prüfen und zu verifizieren. Führe die folgende Abfrage aus, um die neuen Daten vom„master1„-Server zu überprüfen. Du solltest sehen, dass die neuen Daten, die du gerade vom„master2„-Server eingefügt hast, auf den„master1„-Server repliziert wurden.
select @@hostname; SELECT * FROM users;
Fazit
Herzlichen Glückwunsch! Du hast jetzt erfolgreich die MariaDB Master-Master Replikation auf Debian 11 Servern eingesetzt. Außerdem hast du die Zeitsynchronisierung auf den MariaDB-Servern mithilfe des Chrony-Dienstes konfiguriert. Außerdem hast du den MariaDB-Servereinsatz mit der UFW-Firewall abgesichert. Am Ende hast du einen MariaDB-Server mit automatischer Replikation zwischen zwei MariaDB-Servern, du kannst auf alle MariaDB-Server schreiben und alle Daten werden automatisch repliziert.