In der Vergangenheit war der Aufbau eines fehlertoleranten, sicheren Multi-Master-MySQL-Dienstes umständlich. Es erforderte mehrere Schritte und abhängige Pakete. Replikationskonfiguration, Datensynchronisierung und mehrere Konfigurationsdateien trugen zur Komplexität bei. Das Erstellen einer Lösung auf einem gehärteten Betriebssystem wie Red Hat Enterprise Linux (RHEL) 8 und die Verwendung einer professionell verpackten Multi-Master-MySQL-Distribution von Percona macht es einfach. Diese Anleitung zeigt Ihnen, wie es geht.
Architekturdiagramm:

[ Das könnte Ihnen auch gefallen: Keepalived und Hochverfügbarkeit:Themen für Fortgeschrittene ]
Installieren Sie die Cluster-Software
Führen Sie die folgenden Befehle auf allen drei Servern aus (DB1 , DB2 und DB3 ):
# yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
# percona-release enable-only pxc-80 release
# percona-release enable tools release
# yum repolist
Updating Subscription Management repositories.
repo id repo name
prel-release-noarch Percona Release release/noarch YUM repository
pxc-80-release-x86_64 Percona XtraDB Cluster 8.0 release/x86_64 YUM repository
rhel-8-for-x86_64-appstream-rpms Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)
rhel-8-for-x86_64-baseos-rpms Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)
satellite-tools-6.8-for-rhel-8-x86_64-rpms Red Hat Satellite Tools 6.8 for RHEL 8 x86_64 (RPMs)
tools-release-x86_64 Percona Tools release/x86_64 YUM repository
Da die RHEL 8-Repositorys eine Version von MySQL enthalten, müssen Sie den Zugriff darauf deaktivieren, damit die Percona-Installation erfolgreich abgeschlossen werden kann.
# yum -y module disable mysql
# yum -y install percona-xtradb-cluster
Cluster konfigurieren
Auf der DB1 Server, starten Sie den Datenbankdienst, um über den MySQL-Client darauf zuzugreifen, um das Standardkennwort zu aktualisieren und jedem Host zu ermöglichen, sich zur Verwaltung remote zu verbinden:
# systemctl start mysql
# grep 'temporary password' /var/log/mysqld.log
# mysql -u root -p
Ändern Sie das Standard-Root-Passwort mit ALTER
Befehl:
# mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'redhatPERCONA';
Aktivieren Sie die Anmeldung von jedem Host mit UPDATE
Befehl:
# mysql> UPDATE mysql.user SET host='%' WHERE user='root';
Beenden Sie die MySQL-Verwaltung:
# mysql> exit
Auf der DB1 Server, stoppen Sie den Datenbankdienst:
# systemctl stop mysql
Auf DB2 und DB3 Server, starten/stoppen Sie den MySQL-Dienst, um die anfänglichen Dateistrukturen zu erstellen:
# systemctl start mysql
# systemctl stop mysql
Auf allen Datenbankservern im Cluster (DB1 , DB2 und DB3 ) stellen Sie die Konfigurationsdatei /etc/my.cnf
sicher enthält die folgenden eindeutigen Felder:
wsrep_cluster_address=gcomm://
wsrep_cluster_name=
wsrep_node_name=
Fügen Sie die IP-Adresse jedes Datenbankservers hinzu. So kommuniziert der Cluster und mit wem:
wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93
Fügen Sie einen eindeutigen Clusternamen hinzu. Dies muss auf allen Servern im Cluster gleich sein. Dadurch wird der Cluster von anderen Clustern identifiziert:
wsrep_cluster_name=pxc-cluster
Fügen Sie einen eindeutigen Knotennamen und seine IP-Adresse hinzu. Der Cluster muss eine Möglichkeit haben, jeden Knoten zu identifizieren:
wsrep_node_name=pxc-cluster-node-db1
wsrep_node_address=192.168.40.91
Führen Sie diesen Befehl auf jedem Datenbankserver aus, um sicherzustellen, dass die von Ihnen vorgenommenen Einstellungen korrekt sind:
[DB1]
# grep -e address -e cluster /etc/my.cnf | grep -v \#
wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93
wsrep_node_address=192.168.40.91
wsrep_cluster_name=pxc-cluster
wsrep_node_name=pxc-cluster-node-db1
[DB2]
# grep -e address -e cluster /etc/my.cnf | grep -v \#
wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93
wsrep_node_address=192.168.40.92
wsrep_cluster_name=pxc-cluster
wsrep_node_name=pxc-cluster-node-db2
[DB3]
# grep -e address -e cluster /etc/my.cnf | grep -v \#
wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93
wsrep_node_address=192.168.40.93
wsrep_cluster_name=pxc-cluster
wsrep_node_name=pxc-cluster-node-db3
Starten Sie den Cluster
Sobald die Konfiguration gut aussieht, besteht der nächste Schritt darin, DB1 zu booten Server. Dies geschieht mit einem speziellen Dienst namens [email protected] :
# systemctl start [email protected]
Melden Sie sich an, um den Status mit den folgenden Befehlen zu überprüfen:
# mysql -u root -p
# mysql> show status like 'wsrep%';
Suchen Sie nach wsrep_cluster_size, was 1 sein sollte , da derzeit der einzige Server im Cluster DB1 ist .
Der Bootstrap-Dienst generiert die TLS-Sicherheitszertifikate, die für die sichere Clusterkommunikation verwendet werden. Kopieren Sie diese Dateien nach /var/lib/mysql
auf den anderen beiden Datenbankservern:server-key.pem
,ca.pem
und server-cert.pem
# cd /var/lib/mysql
# scp server-key.pem server-cert.pem ca.pem db2:/var/lib/mysql/
# scp server-key.pem server-cert.pem ca.pem db3:/var/lib/mysql/
Konfigurieren Sie die Firewall für sicheren Clusterbetrieb
Der Percona-Cluster erfordert, dass die folgenden vier Ports geöffnet sind, um ordnungsgemäß zu funktionieren:3306, 4444, 4567 und 4568. Führen Sie diese Firewall-Befehle auf allen drei Servern aus (DB1 , DB2 und DB3 ), um sie zu konfigurieren.
Stellen Sie sicher, dass die firewalld Dienst läuft:
# systemctl enable firewalld
# systemctl start firewalld
Die Standardzone ist öffentlich , wenn Sie es also nicht geändert haben, können Sie die erforderlichen vier Ports auf diese Weise hinzufügen:
# firewall-cmd --add-port 3306/tcp --zone=public --permanent
# firewall-cmd --add-port 4444/tcp --zone=public --permanent
# firewall-cmd --add-port 4567/tcp --zone=public --permanent
# firewall-cmd --add-port 4568/tcp --zone=public --permanent
Oder fügen Sie, wenn Sie möchten, mehrere Ports auf einmal mit einem einzigen Befehl hinzu:
# firewall-cmd --add-port={3306/tcp,4444/tcp,4567/tcp,4568/tcp} --zone=public --permanent
Laden Sie die Firewall neu service mit dem folgenden Befehl und listen Sie dann die Ports auf, um zu bestätigen, dass der Dienst wie erwartet konfiguriert ist:
# firewall-cmd --reload
# firewall-cmd --list-ports
3306/tcp 4444/tcp 4567/tcp 4568/tcp
Weitere Informationen zur RHEL 8-Firewall finden Sie hier.
Cluster vergrößern
Jetzt ist es an der Zeit, weitere Server zu dem vorhandenen Cluster hinzuzufügen, der derzeit ausgeführt wird, nachdem er gebootet wurde. Ziel ist es, sowohl DB2 hinzuzufügen und DB3 an den Cluster, der auf DB1 ausgeführt wird .
Starten Sie nacheinander den MySQL-Dienst auf jedem Server und warten Sie, bis er beendet ist, bevor Sie zum nächsten Server wechseln.
Auf DB2 , geben Sie Folgendes ein:
# systemctl start mysql
Machen Sie dasselbe auf DB3 :
# systemctl start mysql
Auf DB1 , tail
die mysql.log
Datei, um nach neuen Servern zu suchen, die dem Cluster beitreten. Dadurch erfahren Sie, ob die Dinge wie erwartet funktionieren oder ob während der Clusterbeitrittsphase Fehler auftreten:
# tail -f /var/log/mysqld.log | grep db3
2021-04-08T17:48:25.892746Z 0 [Note] [MY-000000] [Galera] STATE EXCHANGE: got state msg: 9ea100f1-9892-11eb-af
0e-66802999478c from 0 (pxc-cluster-node-db3)
0: 9e07f773-9892-11eb-a4b8-7bfcd02aca9e, pxc-cluster-node-db3
2021-04-08T17:48:26.405209Z 0 [Note] [MY-000000] [Galera] Member 0.0 (pxc-cluster-node-db3) requested state tr
ansfer from '*any*'. Selected 1.0 (pxc-cluster-node-db1)(SYNCED) as donor.
2021-04-08T17:48:41.023324Z 0 [Note] [MY-000000] [Galera] 1.0 (pxc-cluster-node-db1): State transfer to 0.0 (p
xc-cluster-node-db3) complete.
2021-04-08T17:48:46.677727Z 0 [Note] [MY-000000] [Galera] 0.0 (pxc-cluster-node-db3): State transfer from 1.0
(pxc-cluster-node-db1) complete.
2021-04-08T17:48:46.678022Z 0 [Note] [MY-000000] [Galera] Member 0.0 (pxc-cluster-node-db3) synced with group.
In der obigen Protokolldateiausgabe können Sie sehen, dass DB3 dem Cluster beigetreten ist, eine Zustandsübertragung angefordert und seine Daten erfolgreich von DB1 synchronisiert hat. Eine andere Möglichkeit, die Clustergröße zu überprüfen, besteht darin, sich bei einem beliebigen Server anzumelden, der ein Clustermitglied ist, und diese Befehle auszuführen:
# mysql -u root -p
# mysql> show status like 'wsrep%';
Suchen Sie nach wsrep_cluster_size , was 3 sein sollte , da alle drei Server (DB1 , DB2 und DB3 ) sind jetzt dem Cluster beigetreten.
Suchen Sie nach wsrep_incoming_addresses , die alle drei Server-IP-Adressen anzeigen sollte. Auch dies ist eine weitere Möglichkeit, um zu bestätigen, dass sich alle Server im Cluster befinden und korrekt kommunizieren.
Testen der Cluster
Nachdem Sie nun einen Cluster mit drei Knoten eingerichtet und ausgeführt haben, müssen Sie die Aktiv-Aktiv-Aktiv-Funktionen testen.
Auf Server DB1 , erstellen Sie eine neue Datenbank mit dem folgenden Befehl:
# mysql -u root -p
# mysql> create database myACTIVEdb;
Auf Server DB2 oder DB3 , führen Sie die folgenden Befehle aus, um zu prüfen, ob die neu erstellte Datenbank angezeigt wird:
# mysql -u root -p
# mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| myACTIVEdb |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
Die neue Datenbank sollte fast sofort angezeigt werden. Unabhängig davon, auf welchem Server Schreibvorgänge ausgeführt werden, werden die Daten auf die anderen Datenbankserver repliziert. Herzlichen Glückwunsch, Sie haben jetzt einen Aktiv-Aktiv-Aktiv-MySQL-Percona-Server mit drei Knoten, der auf RHEL 8 ausgeführt wird!
Clusterwartung
Von Zeit zu Zeit muss einer der Datenbankserver möglicherweise gewartet werden, was einen Neustart erfordert. Sie sollten den MySQL-Dienst vor dem Neustart immer ordnungsgemäß herunterfahren:
# systemctl stop mysql
Dieser Befehl kann einige Zeit in Anspruch nehmen, da er den Cluster auf einen gestörten Zustand vorbereitet. Lassen Sie es ordnungsgemäß herunterfahren, um den Clusterstatus auf allen Servern zu synchronisieren und zu aktualisieren.
Starten Sie den zu wartenden Server neu und treten Sie dann dem Cluster mit dem folgenden Befehl erneut bei:
# systemctl start mysql
Der Zustand des Clusters hängt von der Einhaltung des Quorums ab . Denken Sie immer daran, eine mehr als die Hälfte der Größe des Clusters am Laufen zu halten. Für einen Cluster von drei wäre ein Quorum zwei. Für einen Cluster von fünf wäre ein Quorum drei. Es ist einfach, den Cluster von drei auf fünf zu erweitern; Wiederholen Sie einfach die oben beschriebenen Schritte. Es ist ratsam, eine ungerade Anzahl von Servern im Cluster zu haben, um das Quorum einfacher zu verwalten.
Wenn der gesamte Cluster ausgeschaltet ist und neu gestartet werden muss, denken Sie daran, einen Server zum Initiieren des Clusters auszuwählen. Dies geschieht mit dem Bootstrap-Prozess. Zum Beispiel auf DB1 :
# systemctl start [email protected]
Verbinden Sie sich auf den anderen beiden Servern mit dem folgenden Befehl, sobald der Bootstrap-Prozess abgeschlossen ist:
# systemctl start mysql
Der Cluster ist jetzt betriebsbereit.
SELinux
RHEL 8 wird mit SELinux in Erzwingen ausgeliefert Modus. Red Hat, Percona und MySQL haben gute Arbeit geleistet, da SELinux beim Enforcing sofort einsatzbereit ist Modus. Es müssen keine Änderungen vorgenommen werden. Weitere Einzelheiten finden Sie auf der Percona-Website, falls Änderungen an bestimmten Percona-Konfigurationsparametern vorgenommen werden müssen.
[ Holen Sie sich dieses kostenlose E-Book:Verwalten Ihrer Kubernetes-Cluster für Dummies. ]
Abschluss
RHEL 8 bietet eine Plattform für Datenbank-Workloads, die sowohl unterstützt wird als auch eine hervorragende Leistung bietet. Percona hat gute Arbeit geleistet, indem es eine einfach bereitzustellende Multi-Master-Implementierung des MySQL-Servers unter Berücksichtigung von Sicherheitsdetails zusammengestellt hat.