So konfigurieren Sie einen Galera-Cluster mit MariaDB auf Ubuntu 18.04-Servern

Der Autor hat dieFree and Open Source Fundausgewählt, um eine Spende im Rahmen desWrite for DOnations-Programms zu erhalten.

Einführung

Durch Clustering wird Ihre Datenbank durch die Verteilung von Änderungen auf verschiedene Server mit hoher Verfügbarkeit versehen. Für den Fall, dass eine der Instanzen ausfällt, stehen andere Instanzen schnell zur Verfügung, um den Betrieb fortzusetzen.

Cluster gibt es in zwei allgemeinen Konfigurationen:active-passive undactive-active. In Aktiv-Passiv-Clustern werden alle Schreibvorgänge auf einem einzelnen aktiven Server ausgeführt und dann auf einen oder mehrere passive Server kopiert, die nur bei einem Ausfall eines aktiven Servers die Funktion übernehmen können. Einige Aktiv-Passiv-Cluster erlauben auchSELECT-Operationen auf passiven Knoten. In einem Aktiv-Aktiv-Cluster ist jeder Knoten schreib- und lesbar, und eine an einem vorgenommene Änderung wird für alle repliziert.

MariaDB ist ein relationales Open-Source-Datenbanksystem, das vollständig mit dem beliebten MySQL-RDBMS-System kompatibel ist. Sie können die offizielle Dokumentation für MariaDB unterpage lesen. Galera ist eine Datenbankclusterlösung, mit der Sie Multi-Master-Cluster mithilfe der synchronen Replikation einrichten können. Galera verwaltet automatisch die Synchronisierung der Daten auf verschiedenen Knoten, während Sie Lese- und Schreibanfragen an jeden beliebigen Knoten im Cluster senden können. Weitere Informationen zu Galera finden Sie unterdocumentation page.

In diesem Handbuch konfigurieren Sie einen Aktiv-Aktiv-MariaDB-Galera-Cluster. Zu Demonstrationszwecken konfigurieren und testen Sie drei Ubuntu 18.04-Droplets, die als Knoten im Cluster fungieren. Dies ist der kleinste konfigurierbare Cluster.

Voraussetzungen

Um mitzumachen, benötigen Sie zusätzlich zu den folgendenDigitalOcean account:

  • Drei Ubuntu 18.04-Droplets mit aktiviertem privaten Netzwerk, jeweils mit einem Nicht-Root-Benutzer mitsudo-Berechtigungen.

Während die Schritte in diesem Lernprogramm für DigitalOcean Droplets geschrieben und getestet wurden, sollten viele von ihnen auch auf Nicht-DigitalOcean-Servern mit aktiviertem privatem Netzwerk anwendbar sein.

[[Schritt-1 - Hinzufügen der Mariadb-Repositorys zu allen Servern]] == Schritt 1 - Hinzufügen der MariaDB-Repositorys zu allen Servern

In diesem Schritt fügen Sie jedem Ihrer drei Server die entsprechenden MariaDB-Paket-Repositorys hinzu, damit Sie die richtige Version von MariaDB installieren können, die in diesem Lernprogramm verwendet wird. Sobald die Repositorys auf allen drei Servern aktualisiert wurden, können Sie MariaDB installieren.

Eine Sache, die Sie bei MariaDB beachten sollten, ist, dass es als Drop-In-Ersatz für MySQL entstanden ist. In vielen Konfigurationsdateien und Startskripten werden alsomysql stattmariadb angezeigt. Aus Gründen der Konsistenz verwenden wir in diesem Handbuchmysql, wo beides funktionieren könnte.

In diesem Tutorial verwenden SieMariaDB version 10.4. Da diese Version nicht in den Standard-Ubuntu-Repositorys enthalten ist, fügen Sie zunächst allen drei Servern das externe Ubuntu-Repository hinzu, das vom MariaDB-Projekt verwaltet wird.

[.note] #Note: MariaDB ist ein angesehener Anbieter, aber nicht alle externen Repositorys sind zuverlässig. Stellen Sie sicher, dass Sie nur von vertrauenswürdigen Quellen installieren.
#

Zunächst fügen Sie den MariaDB-Repository-Schlüssel mit dem Befehlapt-keyhinzu, mit dem der APT-Paketmanager überprüft, ob das Paket authentisch ist:

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8

Sobald Sie den vertrauenswürdigen Schlüssel in der Datenbank haben, können Sie das Repository mit dem folgenden Befehl hinzufügen:

sudo add-apt-repository 'deb [arch=amd64] http://nyc2.mirrors.digitalocean.com/mariadb/repo/10.4/ubuntu bionic main'

Führen Sie nach dem Hinzufügen des Repositorysapt update aus, um Paketmanifeste aus dem neuen Repository einzuschließen:

sudo apt update

Wenn Sie diesen Schritt auf Ihrem ersten Server abgeschlossen haben, wiederholen Sie den Vorgang für Ihren zweiten und dritten Server.

Nachdem Sie das Paket-Repository erfolgreich auf allen drei Servern hinzugefügt haben, können Sie MariaDB im nächsten Abschnitt installieren.

[[Schritt 2 - Installation von Mariadb auf allen Servern] == Schritt 2 - Installation von MariaDB auf allen Servern

In diesem Schritt installieren Sie die aktuellen MariaDB-Pakete auf Ihren drei Servern.

Ab Version10.1 werden die Pakete MariaDB Server und MariaDB Galera Server kombiniert. Durch die Installation vonmariadb-server werden Galera und mehrere Abhängigkeiten automatisch installiert:

sudo apt install mariadb-server

Sie werden gefragt, ob Sie mit der Installation fortfahren möchten. Geben Sieyes ein, um mit der Installation fortzufahren.

Ab der MariaDB-Version10.4 hat der MariaDB-Benutzerroottandardmäßig kein Kennwort mehr. Um ein Kennwort für den Benutzer vonrootfestzulegen, melden Sie sich zunächst bei MariaDB an:

sudo mysql -uroot

Wenn Sie sich in der MariaDB-Shell befinden, ändern Sie das Kennwort, indem Sie die folgende Anweisung ausführen:

set password = password("your_password");

Die folgende Ausgabe zeigt an, dass das Kennwort richtig festgelegt wurde:

OutputQuery OK, 0 rows affected (0.001 sec)

Beenden Sie die MariaDB-Shell, indem Sie den folgenden Befehl ausführen:

quit;

Wenn Sie mehr über SQL erfahren möchten oder eine schnelle Auffrischung benötigen, lesen Sie unsereMySQL tutorial.

Sie haben jetzt alle erforderlichen Elemente, um mit der Konfiguration des Clusters zu beginnen. Da Sie sich jedoch in späteren Schritten aufrsync verlassen, stellen Sie sicher, dass es installiert ist:

sudo apt install rsync

Dies bestätigt, dass die neueste Version vonrsync bereits verfügbar ist, oder fordert Sie auf, sie zu aktualisieren oder zu installieren.

Nachdem Sie MariaDB installiert und das Root-Passwort auf Ihrem ersten Server festgelegt haben, wiederholen Sie diese Schritte für Ihre beiden anderen Server.

Nachdem Sie MariaDB erfolgreich auf jedem der drei Server installiert haben, können Sie mit dem Konfigurationsschritt im nächsten Abschnitt fortfahren.

[[Schritt 3 - Konfigurieren des ersten Knotens]] == Schritt 3 - Konfigurieren des ersten Knotens

In diesem Schritt konfigurieren Sie Ihren ersten Knoten. Jeder Knoten im Cluster muss nahezu identisch konfiguriert sein. Aus diesem Grund nehmen Sie die gesamte Konfiguration auf Ihrem ersten Computer vor und kopieren sie dann auf die anderen Knoten.

Standardmäßig ist MariaDB so konfiguriert, dass das Verzeichnis/etc/mysql/conf.düberprüft wird, um zusätzliche Konfigurationseinstellungen für Dateien zu erhalten, die auf.cnf enden. Erstellen Sie in diesem Verzeichnis eine Datei mit all Ihren clusterspezifischen Anweisungen:

sudo nano /etc/mysql/conf.d/galera.cnf

Fügen Sie der Datei die folgende Konfiguration hinzu. Die Konfiguration gibt verschiedene Clusteroptionen, Details zum aktuellen Server und den anderen Servern im Cluster sowie replikationsbezogene Einstellungen an. Beachten Sie, dass die IP-Adressen in der Konfiguration die privaten Adressen Ihrer jeweiligen Server sind. Ersetzen Sie die hervorgehobenen Zeilen durch die entsprechenden IP-Adressen.

/etc/mysql/conf.d/galera.cnf

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0

# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so

# Galera Cluster Configuration
wsrep_cluster_name="test_cluster"
wsrep_cluster_address="gcomm://First_Node_IP,Second_Node_IP,Third_Node_IP"

# Galera Synchronization Configuration
wsrep_sst_method=rsync

# Galera Node Configuration
wsrep_node_address="This_Node_IP"
wsrep_node_name="This_Node_Name"
  • The first section ändert oder bestätigt die MariaDB / MySQL-Einstellungen erneut, damit der Cluster ordnungsgemäß funktioniert. Beispielsweise funktioniert Galera nicht mit MyISAM oder ähnlichen nicht-transaktionalen Speicher-Engines, undmysqld dürfen fürlocalhost nicht an die IP-Adresse gebunden sein. Weitere Informationen zu den Einstellungen finden Sie in den Galera Clustersystem configuration page.

  • The “Galera Provider Configuration” section konfiguriert die MariaDB-Komponenten, die eine WriteSet-Replikations-API bereitstellen. Dies bedeutet in Ihrem Fall Galera, da Galera einwsrep-Anbieter (WriteSet Replication) ist. Sie geben die allgemeinen Parameter an, um die Erstreplikationsumgebung zu konfigurieren. Dies erfordert keine Anpassung, aber Sie können mehr überGalera configuration options erfahren.

  • The “Galera Cluster Configuration” section definiert den Cluster, identifiziert die Clustermitglieder anhand der IP-Adresse oder des auflösbaren Domänennamens und erstellt einen Namen für den Cluster, um sicherzustellen, dass die Mitglieder der richtigen Gruppe beitreten. Sie könnenwsrep_cluster_name in einen aussagekräftigeren Wert alstest_cluster ändern oder unverändert lassen. Sie müssenwsrep_cluster_address jedoch mit den privaten IP-Adressen Ihrer drei Server aktualisieren.

  • The “Galera Synchronization Configuration” section definiert, wie der Cluster Daten zwischen Mitgliedern kommuniziert und synchronisiert. Dies wird nur für die Statusübertragung verwendet, die erfolgt, wenn ein Knoten online geschaltet wird. Für Ihre Ersteinrichtung verwenden Siersync, da es allgemein verfügbar ist und das tut, was Sie jetzt benötigen.

  • The “Galera Node Configuration” section verdeutlicht die IP-Adresse und den Namen des aktuellen Servers. Dies ist hilfreich, wenn Sie versuchen, Probleme in Protokollen zu diagnostizieren und die einzelnen Server auf verschiedene Arten zu referenzieren. Diewsrep_node_address müssen mit der Adresse des Computers übereinstimmen, auf dem Sie sich befinden. Sie können jedoch einen beliebigen Namen auswählen, um den Knoten in Protokolldateien besser identifizieren zu können.

Wenn Sie mit Ihrer Cluster-Konfigurationsdatei zufrieden sind, kopieren Sie den Inhalt in Ihre Zwischenablage, speichern und schließen Sie die Datei. Mit dem Nano-Texteditor können Sie dies tun, indem SieCTRL+X drücken,y eingeben undENTER drücken.

Nachdem Sie Ihren ersten Knoten erfolgreich konfiguriert haben, können Sie mit der Konfiguration der verbleibenden Knoten im nächsten Abschnitt fortfahren.

[[Schritt 4 - Konfigurieren der verbleibenden Knoten]] == Schritt 4 - Konfigurieren der verbleibenden Knoten

In diesem Schritt konfigurieren Sie die verbleibenden zwei Knoten. Öffnen Sie auf Ihrem zweiten Knoten die Konfigurationsdatei:

sudo nano /etc/mysql/conf.d/galera.cnf

Fügen Sie die Konfiguration ein, die Sie vom ersten Knoten kopiert haben, und aktualisieren Sie dannGalera Node Configuration, um die IP-Adresse oder den auflösbaren Domänennamen für den bestimmten Knoten zu verwenden, den Sie einrichten. Aktualisieren Sie abschließend den Namen, den Sie festlegen können, um den Knoten in Ihren Protokolldateien zu identifizieren:

/etc/mysql/conf.d/galera.cnf

. . .
# Galera Node Configuration
wsrep_node_address="This_Node_IP"
wsrep_node_name="This_Node_Name"
. . .

Speichern und schließen Sie die Datei.

Wenn Sie diese Schritte ausgeführt haben, wiederholen Sie sie auf dem dritten Knoten.

Sie sind fast bereit, den Cluster aufzurufen. Bevor Sie dies tun, müssen Sie jedoch sicherstellen, dass die entsprechenden Ports in Ihrer Firewall geöffnet sind.

[[Schritt 5 - Öffnen der Firewall auf jedem Server]] == Schritt 5 - Öffnen der Firewall auf jedem Server

In diesem Schritt konfigurieren Sie Ihre Firewall so, dass die für die Kommunikation zwischen Knoten erforderlichen Ports geöffnet sind. Überprüfen Sie auf jedem Server den Status der Firewall, indem Sie Folgendes ausführen:

sudo ufw status

In diesem Fall ist nur SSH erlaubt durch:

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Da in diesem Fall nur SSH-Datenverkehr zulässig ist, müssen Sie Regeln für MySQL- und Galera-Datenverkehr hinzufügen. Wenn Sie versuchen, den Cluster zu starten, schlägt dies aufgrund von Firewall-Regeln fehl.

Galera kann vier Ports nutzen:

  • 3306 Für MySQL-Clientverbindungen und State Snapshot Transfer, die die Methodemysqldump verwenden.

  • 4567 Für Galera Cluster-Replikationsverkehr. Die Multicast-Replikation verwendet an diesem Port sowohl UDP-Transport als auch TCP.

  • 4568 Für inkrementelle Zustandsübertragung.

  • 4444 Für alle anderen Status-Snapshot-Übertragungen.

In diesem Beispiel öffnen Sie alle vier Ports, während Sie die Einrichtung vornehmen. Sobald Sie bestätigt haben, dass die Replikation funktioniert, möchten Sie alle Ports schließen, die Sie gerade nicht verwenden, und den Datenverkehr auf Server im Cluster beschränken.

Öffnen Sie die Ports mit dem folgenden Befehl:

sudo ufw allow 3306,4567,4568,4444/tcp
sudo ufw allow 4567/udp

[.note] #Note: Abhängig davon, was sonst noch auf Ihren Servern ausgeführt wird, möchten Sie möglicherweise den Zugriff sofort einschränken. Die Anleitung zuUFW Essentials: Common Firewall Rules and Commandskann dabei helfen.
#

Nachdem Sie Ihre Firewall auf dem ersten Knoten konfiguriert haben, erstellen Sie auf dem zweiten und dritten Knoten dieselben Firewall-Einstellungen.

Nachdem Sie die Firewalls erfolgreich konfiguriert haben, können Sie den Cluster im nächsten Schritt starten.

[[Schritt-6 - Starten des Clusters]] == Schritt 6 - Starten des Clusters

In diesem Schritt starten Sie Ihren MariaDB-Cluster. Zu Beginn müssen Sie den laufenden MariaDB-Dienst stoppen, damit Sie Ihren Cluster online schalten können.

Beenden Sie MariaDB auf allen drei Servern

Verwenden Sie den folgenden Befehl auf allen drei Servern, um MariaDB zu stoppen, damit Sie sie in einem Cluster wiederherstellen können:

sudo systemctl stop mysql

systemctl zeigt nicht das Ergebnis aller Serviceverwaltungsbefehle an. Verwenden Sie daher den folgenden Befehl, um sicherzustellen, dass Sie erfolgreich waren:

sudo systemctl status mysql

Wenn die letzte Zeile wie folgt aussieht, war der Befehl erfolgreich:

Output. . .
Apr 26 03:34:23 galera-node-01 systemd[1]: Stopped MariaDB 10.4.4 database server.

Sobald Siemysql auf allen Servern heruntergefahren haben, können Sie fortfahren.

Rufe den ersten Knoten auf

Um den ersten Knoten aufzurufen, müssen Sie ein spezielles Startskript verwenden. So wie Sie Ihren Cluster konfiguriert haben, versucht jeder Knoten, der online geschaltet wird, eine Verbindung zu mindestens einem anderen Knoten herzustellen, der in seinergalera.cnf-Datei angegeben ist, um seinen Ausgangszustand zu erhalten. Ohne die Verwendung des Skriptsgalera_new_cluster, mit dem systemd den Parameter--wsrep-new-cluster übergeben kann, würde ein normalersystemctl start mysql fehlschlagen, da keine Knoten ausgeführt werden, mit denen der erste Knoten eine Verbindung herstellen kann.

sudo galera_new_cluster

Dieser Befehl zeigt bei erfolgreicher Ausführung keine Ausgabe an. Wenn dieses Skript erfolgreich ausgeführt wurde, wird der Knoten als Teil des Clusters registriert, und Sie können ihn mit dem folgenden Befehl anzeigen:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

Die folgende Ausgabe zeigt an, dass sich ein Knoten im Cluster befindet:

Output+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 1     |
+--------------------+-------+

Auf den verbleibenden Knoten können Siemysql normal starten. Sie suchen nach allen Mitgliedern der Cluster-Liste, die online sind. Wenn sie eines finden, treten sie dem Cluster bei.

Rufe den zweiten Knoten auf

Jetzt können Sie den zweiten Knoten aufrufen. Startmysql:

sudo systemctl start mysql

Bei erfolgreicher Ausführung wird keine Ausgabe angezeigt. Sie werden feststellen, dass Ihre Clustergröße zunimmt, wenn jeder Knoten online geschaltet wird:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

Die folgende Ausgabe zeigt an, dass der zweite Knoten dem Cluster beigetreten ist und dass insgesamt zwei Knoten vorhanden sind.

Output+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 2     |
+--------------------+-------+

Rufe den dritten Knoten auf

Es ist jetzt Zeit, den dritten Knoten aufzurufen. Startmysql:

sudo systemctl start mysql

Führen Sie den folgenden Befehl aus, um die Clustergröße zu ermitteln:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

Die folgende Ausgabe zeigt an, dass der dritte Knoten dem Cluster beigetreten ist und dass die Gesamtzahl der Knoten im Cluster drei beträgt.

Output+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+

Zu diesem Zeitpunkt ist der gesamte Cluster online und kommuniziert erfolgreich. Als Nächstes können Sie das funktionierende Setup sicherstellen, indem Sie die Replikation im nächsten Abschnitt testen.

[[Schritt-7 - Testen der Replikation]] == Schritt 7 - Testen der Replikation

Sie haben die Schritte bis zu diesem Punkt ausgeführt, damit Ihr Cluster die Replikation von einem beliebigen Knoten auf einen beliebigen anderen Knoten ausführen kann, der als Aktiv-Aktiv-Replikation bezeichnet wird. Führen Sie die folgenden Schritte aus, um zu testen, ob die Replikation wie erwartet funktioniert.

Schreiben Sie an den ersten Knoten

Beginnen Sie mit Datenbankänderungen auf Ihrem ersten Knoten. Die folgenden Befehle erstellen eine Datenbank mit dem Namenplayground und eine Tabelle in dieser Datenbank mit dem Namenequipment.

mysql -u root -p -e 'CREATE DATABASE playground;
CREATE TABLE playground.equipment ( id INT NOT NULL AUTO_INCREMENT, type VARCHAR(50), quant INT, color VARCHAR(25), PRIMARY KEY(id));
INSERT INTO playground.equipment (type, quant, color) VALUES ("slide", 2, "blue");'

Im vorherigen Befehl erstellt die AnweisungCREATE DATABASE eine Datenbank mit dem Namenplayground. Die AnweisungCREATE erstellt eine Tabelle mit dem Namenequipment in der Datenbankplayground mit einer automatisch inkrementierenden Bezeichnerspalte namensid und anderen Spalten. In der Spaltetype, in der Spaltequantund in der Spaltecolorwerden Typ, Menge und Farbe der Geräte gespeichert. Die AnweisungINSERT fügt einen Eintrag vom Typslide, Menge2 und Farbeblue ein.

Sie haben jetzt einen Wert in Ihrer Tabelle.

Lesen und Schreiben auf dem zweiten Knoten

Schauen Sie sich als Nächstes den zweiten Knoten an, um zu überprüfen, ob die Replikation funktioniert:

mysql -u root -p -e 'SELECT * FROM playground.equipment;'

Wenn die Replikation funktioniert, werden die Daten, die Sie auf dem ersten Knoten eingegeben haben, hier auf dem zweiten Knoten angezeigt:

Output+----+-------+-------+-------+
| id | type  | quant | color |
+----+-------+-------+-------+
|  1 | slide |     2 | blue  |
+----+-------+-------+-------+

Über denselben Knoten können Sie Daten in den Cluster schreiben:

mysql -u root -p -e 'INSERT INTO playground.equipment (type, quant, color) VALUES ("swing", 10, "yellow");'

Lesen und Schreiben auf dem dritten Knoten

Vom dritten Knoten aus können Sie alle diese Daten lesen, indem Sie die Tabelle erneut abfragen:

mysql -u root -p -e 'SELECT * FROM playground.equipment;'

Sie sehen die folgende Ausgabe mit den beiden Zeilen:

Output   +----+-------+-------+--------+
   | id | type  | quant | color  |
   +----+-------+-------+--------+
   |  1 | slide |     2 | blue   |
   |  2 | swing |    10 | yellow |
   +----+-------+-------+--------+

Wieder können Sie einen weiteren Wert von diesem Knoten hinzufügen:

mysql -u root -p -e 'INSERT INTO playground.equipment (type, quant, color) VALUES ("seesaw", 3, "green");'

Lesen Sie auf dem ersten Knoten:

Zurück auf dem ersten Knoten können Sie überprüfen, ob Ihre Daten überall verfügbar sind:

mysql -u root -p -e 'SELECT * FROM playground.equipment;'

Die folgende Ausgabe zeigt an, dass die Zeilen auf dem ersten Knoten verfügbar sind.

Output   +----+--------+-------+--------+
   | id | type   | quant | color  |
   +----+--------+-------+--------+
   |  1 | slide  |     2 | blue   |
   |  2 | swing  |    10 | yellow |
   |  3 | seesaw |     3 | green  |
   +----+--------+-------+--------+

Sie haben erfolgreich überprüft, ob Sie auf alle Knoten schreiben können und ob die Replikation ordnungsgemäß ausgeführt wird.

Fazit

Zu diesem Zeitpunkt ist ein funktionierender Galera-Testcluster mit drei Knoten konfiguriert. Wenn Sie vorhaben, einen Galera-Cluster in einer Produktionssituation zu verwenden, wird empfohlen, mit mindestens fünf Knoten zu beginnen.

Vor der Verwendung in der Produktion sollten Sie sich einigeother state snapshot transfer (sst) agentswiextrabackupansehen, mit denen Sie sehr schnell und ohne große Unterbrechungen Ihrer aktiven Knoten neue Knoten einrichten können. Dies hat keine Auswirkungen auf die tatsächliche Replikation, ist jedoch ein Problem, wenn Knoten initialisiert werden.

Möglicherweise interessieren Sie sich auch für andere Clustering-Lösungen wie MySQL-Cluster. In diesem Fall können Sie das TutorialHow To Create a Multi-Node MySQL Cluster on Ubuntu 18.04unseres Tutorials lesen.

Related