So konfigurieren Sie einen Galera-Cluster mit MariaDB auf CentOS 7-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 CentOS 7-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 CentOS 7-Droplets mit aktiviertem privaten Netzwerk, jeweils mit einem Nicht-Root-Benutzer mitsudo-Berechtigungen und einer aktivierten Firewall.

Während die Schritte in diesem Lernprogramm für DigitalOcean Droplets geschrieben und für diese getestet wurden, sollten viele von ihnen auch auf Nicht-DigitalOcean-Servern mit aktiviertem privaten 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. In vielen Fällen sind diese austauschbar. Aus Gründen der Konsistenz verwenden wir in diesem Handbuchmariadb, wo beides funktionieren könnte.

In diesem Tutorial verwenden SieMariaDB version 10.4. Da diese Version nicht in den Standard-CentOS-Repositorys enthalten ist, fügen Sie zunächst allen drei Servern das externe CentOS-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 hinzu, indem Sie eine Repository-Datei mit einem Texteditor erstellen. In diesem Tutorial werdenvi verwendet:

sudo vi /etc/yum.repos.d/mariadb.repo

Fügen Sie als Nächstes den folgenden Inhalt zur Datei hinzu, indem Siei drücken, um in den Einfügemodus zu wechseln, und dann Folgendes hinzufügen:

/etc/yum.repos.d/mariadb.repo

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Drücken Sie die Tasteesc, um zum normalen Modus zurückzukehren, und geben Sie dann:wq ein, um die Datei zu speichern und zu beenden. Wenn Sie mehr über den Texteditorvi und seinen Vorgängervim erfahren möchten, schauen Sie sich unser Tutorial zuInstalling and Using the Vim Text Editor on a Cloud Server an.

Nachdem Sie die Repository-Datei erstellt haben, aktivieren Sie sie mit dem folgenden Befehl:

sudo yum makecache --disablerepo='*' --enablerepo='mariadb'

Der Befehlmakecache speichert die Repository-Metadaten zwischen, sodass der Paketmanager MariaDB installieren kann, wobei--disablerepo und--enablerepo den Befehl auf die gerade erstellte Repo-Dateimariadb ausrichten.

Sie erhalten folgende Ausgabe:

OutputLoaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
mariadb                                                                                                                                                                              | 2.9 kB  00:00:00
(1/3): mariadb/primary_db                                                                                                                                                            |  43 kB  00:00:00
(2/3): mariadb/other_db                                                                                                                                                              | 8.3 kB  00:00:00
(3/3): mariadb/filelists_db                                                                                                                                                          | 238 kB  00:00:00
Metadata Cache Created

Wenn Sie das Repository auf Ihrem ersten Server aktiviert haben, wiederholen Sie dies 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 yum install MariaDB-server MariaDB-client

Sie werden gefragt, ob Sie mit der Installation fortfahren möchten. Geben Sieyes ein, um mit der Installation fortzufahren. Sie werden dann aufgefordert, den GPG-Schlüssel zu akzeptieren, der das MariaDB-Paket authentifiziert. Geben Sieyes erneut ein.

Starten Sie nach Abschluss der Installation den Dienstmariadb, indem Sie Folgendes ausführen:

sudo systemctl start mariadb

Aktivieren Sie den Dienstmariadb, der beim Booten automatisch gestartet wird, indem Sie Folgendes ausführen:

sudo systemctl enable mariadb

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 undyour_password durch Ihr gewünschtes Kennwort ersetzen:

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 undpolicycoreutils-python verlassen, um die Server zu synchronisieren und Security-Enhanced Linux (SELinux) zu steuern. Stellen Sie sicher, dass sie installiert sind, bevor Sie fortfahren:

sudo yum install rsync policycoreutils-python

Dadurch wird bestätigt, dass die neuesten Versionen vonrsync undpolicycoreutils-python bereits verfügbar sind, oder Sie werden aufgefordert, ein Upgrade oder eine Installation durchzuführen.

Wenn Sie diese Schritte ausgeführt haben, wiederholen Sie sie 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 Galera-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 vi /etc/my.cnf.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/my.cnf.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/lib64/galera-4/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.

  • 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 here 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 und speichern und schließen Sie die Datei.

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 vi /etc/mysql/my.cnf.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/my.cnf.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.

Wenn Galera auf allen Ihren Knoten konfiguriert ist, können Sie den Cluster fast starten. Stellen Sie jedoch zuvor sicher, dass die entsprechenden Ports in Ihrer Firewall geöffnet sind und eine SELinux-Richtlinie für Galera erstellt wurde.

[[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, die Sie im Abschnitt Voraussetzungen eingerichtet haben, indem Sie Folgendes ausführen:

sudo firewall-cmd --list-all

In diesem Fall ist nur SSH-, DHCP-, HTTP- und HTTPS-Verkehr zulässig durch:

Outputpublic
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: ssh dhcpv6-client http https
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Wenn Sie jetzt versuchen, den Cluster zu starten, schlägt dies fehl, da die Firewall die Verbindungen zwischen den Knoten blockiert. Um dieses Problem zu beheben, fügen Sie Regeln hinzu, die den Datenverkehr zwischen MariaDB und Galera zulassen.

Galera kann vier Ports nutzen:

  • 3306 Für MariaDB-Clientverbindungen und State Snapshot Transfer, die die Methodemysqldumpverwenden.

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

  • 4568 FürIncremental State Transfers oder IST der Prozess, durch den ein fehlender Status von anderen Knoten im Cluster empfangen wird.

  • 4444 Für alle anderenState Snapshot Transfers oder SST der Mechanismus, mit dem ein Joiner-Knoten seinen Status und seine Daten von einem Donor-Knoten erhält.

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 den folgenden Befehlen:

sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp
sudo firewall-cmd --permanent --zone=public --add-port=4567/tcp
sudo firewall-cmd --permanent --zone=public --add-port=4568/tcp
sudo firewall-cmd --permanent --zone=public --add-port=4444/tcp
sudo firewall-cmd --permanent --zone=public --add-port=4567/udp

Mit--zone=public und--add-port= öffnetfirewall-cmd diese Ports für den öffentlichen Verkehr. --permanent stellt sicher, dass diese Regeln bestehen bleiben.

[.note] #Note: Abhängig davon, was sonst noch auf Ihren Servern ausgeführt wird, möchten Sie möglicherweise den Zugriff sofort einschränken. Weitere Informationen zur Verwendung von FirewallD finden Sie in unserem TutorialHow To Set Up a Firewall Using FirewallD on CentOS 7.
#

Fügen Sie nun jeden Server zur Zonepublichinzu, indem Sie die folgenden Befehle ausführen und den markierten Text durch die jeweiligen privaten IP-Adressen Ihrer Knoten ersetzen:

sudo firewall-cmd --permanent --zone=public --add-source=galera-node-1-ip/32
sudo firewall-cmd --permanent --zone=public --add-source=galera-node-2-ip/32
sudo firewall-cmd --permanent --zone=public --add-source=galera-node-3-ip/32

Laden Sie die Firewall neu, um die Änderungen zu übernehmen:

sudo firewall-cmd --reload

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 im nächsten Schritt eine SELinux-Richtlinie erstellen.

[[Schritt-6 - Erstellen einer Selinux-Richtlinie]] == Schritt 6 - Erstellen einer SELinux-Richtlinie

In diesem Abschnitt erstellen Sie eine SELinux-Richtlinie, mit der alle Knoten im Cluster miteinander kommunizieren und Clustervorgänge ausführen können.

SELinux ist ein Linux-Kernelmodul, das die Sicherheit von Betriebssystemen verbessert und Zugriffssteuerung und obligatorische Zugriffssteuerungsrichtlinien unterstützt. Es ist unter CentOS 7 standardmäßig aktiviert und verhindert, dass der MariaDB-Dämon viele Aktivitäten ausführt.

Um die Richtlinie zu erstellen, führen Sie verschiedene Aktivitäten im Cluster aus, wobei der SELinux-Modus für MySQL als zulässig festgelegt ist. Anschließend erstellen Sie eine Richtlinie aus den protokollierten Ereignissen und setzen den SELinux-Modus auf Erzwingung, sobald die Richtlinie erfolgreich installiert wurde.

Ermöglichen Sie zunächst den Zugriff auf die relevanten Ports, indem Sie die folgenden Befehle auf allen drei Servern ausführen:

sudo semanage port -a -t mysqld_port_t -p tcp 4567
sudo semanage port -a -t mysqld_port_t -p udp 4567
sudo semanage port -a -t mysqld_port_t -p tcp 4568
sudo semanage port -a -t mysqld_port_t -p tcp 4444

[.note] #Note: Möglicherweise erhalten SieValueError, wenn Sie den Zugriff auf einige dieser Ports zulassen. Dies bedeutet, dass der SELinux-Status dieses Ports bereits festgelegt wurde, was in diesem Fall den Prozess dieses Lernprogramms nicht beeinflusst.
#

In diesen Befehlen verwenden Sie das SELinux-Verwaltungstoolsemanage mit dem Flag-a, um angegebene Ports hinzuzufügen und den Datenbankserver zu ignorieren.

Führen Sie als Nächstes den folgenden Befehl auf allen drei Servern aus, wodurch die MySQL SELinux-Domäne vorübergehend in den zulässigen Modus versetzt wird.

sudo semanage permissive -a mysqld_t

Dieser Befehl kann eine Minute dauern und zeigt keine Ausgabe an.

Stoppen Sie als Nächstes den Datenbankserver auf allen Knoten, damit Sie den Datenbankcluster mit gemeinsam genutzten SELinux-Richtlinien booten können. Führen Sie dazu den folgenden Befehl auf allen drei Knoten aus:

sudo systemctl stop mariadb

Starten Sie nun den Cluster mit einem Bootstrap, um Kommunikationsereignisse zwischen Knoten zu generieren, die der SELinux-Richtlinie hinzugefügt werden. Booten Sie den Cluster auf dem ersten Knoten, indem Sie Folgendes ausführen:

sudo galera_new_cluster

Erstellen Sie eine Datenbank und eine Tabelle für den speziellen Zweck der Protokollierung von SST-Ereignissen, indem Sie auf dem ersten Knoten Folgendes ausführen:

mysql -u root -p -e 'CREATE DATABASE selinux;
CREATE TABLE selinux.selinux_policy (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id));
INSERT INTO selinux.selinux_policy VALUES ();'

Starten Sie nun den Server auf dem zweiten Knoten:

sudo systemctl start mariadb

Dann machen Sie dasselbe auf dem dritten Knoten:

sudo systemctl start mariadb

Für die vorherigen Befehle wird keine Ausgabe angezeigt. Führen Sie zum Generieren von IST-Ereignissen auf allen drei Servern Folgendes aus:

mysql -u root -p -e 'INSERT INTO selinux.selinux_policy VALUES ();'

Erstellen und aktivieren Sie nun die SELinux-Richtlinie, indem Sie die folgenden Befehle auf allen drei Servern ausführen:

sudo grep mysql /var/log/audit/audit.log | sudo audit2allow -M Galera

Dieser erste Befehl sucht nach generierten Ereignissen in der Dateiaudit.log und leitet sie an ein Modul mit dem NamenGalera.pp weiter, das vom Toolaudit2allow generiert wurde. Dies führt zu folgender Ausgabe:

Output******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i Galera.pp

Folgen Sie anschließend den Anweisungen in der Ausgabe und installieren Sie das generierte Modul mit dem folgenden Befehl:

sudo semodule -i Galera.pp

Deaktivieren Sie jetzt, da die Richtlinie aktiv ist, den zulässigen Modus für den MariaDB-Server:

sudo semanage permissive -d mysqld_t

Nachdem Sie eine SELinux-Richtlinie erfolgreich erstellt und aktiviert haben, können Sie den Cluster im nächsten Abschnitt starten.

[[Schritt 7 - Starten des Clusters]] == Schritt 7 - 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

Wenn Sie den MariaDB-Dienst beenden, ist es wichtig, diese Aktion in einer bestimmten Reihenfolge auf Ihren Servern auszuführen. Diese Sequenz zum Herunterfahren stellt sicher, dass der erste Knoten den Cluster beim Start sicher booten kann.

Führen Sie zunächst den folgenden Befehl auf dem dritten Knoten aus:

sudo systemctl stop mariadb

Beenden Sie als Nächstes den Dienst auf dem zweiten Knoten:

sudo systemctl stop mariadb

Beenden Sie schließlich den Dienst auf dem ersten Knoten:

sudo systemctl stop mariadb

systemctl zeigt nicht das Ergebnis aller Dienstverwaltungsbefehle an. Verwenden Sie daher auf jedem Ihrer Server den folgenden Befehl, um sicherzustellen, dass Sie erfolgreich waren:

sudo systemctl status mariadb

Die letzte Zeile sieht ungefähr so ​​aus:

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

Sobald Siemariadb 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 mariadb 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 Siemariadb 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. Startmariadb:

sudo systemctl start mariadb

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. Startmariadb:

sudo systemctl start mariadb

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 8 - Testen der Replikation]] == Schritt 8 - 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.

Wenn Sie mehr über SQL-Datenbanken erfahren möchten, lesen Sie unseren ArtikelHow To Manage an SQL Database.

Related