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

So erstellen Sie einen Aktiv-Aktiv-Aktiv-Cluster mit RHEL 8 und Percona MySQL

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.


Linux
  1. So erstellen Sie eine Datenbank in MySQL mit MySQL Workbench

  2. So installieren Sie Lighttpd mit PHP5 FastCGI und MySQL unter CentOS 6 / RHEL 6

  3. So installieren Sie Lighttpd mit PHP5 FastCGI und MySQL auf Fedora 16

  4. So installieren Sie Nginx mit PHP-FPM und MySQL auf Fedora 16 „Verne“

  5. So installieren Sie Nginx mit PHP5 und MySQL unter Ubuntu 11.10

So installieren Sie Lighttpd mit PHP-FPM 7 und MySQL 5.7 auf Ubuntu 18.04 LTS

So richten Sie Percona-Cluster mit HAproxy Loadbalancer unter CentOS 7 ein

So stellen Sie CouchDB als Cluster mit Docker bereit

Wie man MySQL mit Percona und Keepalived multimastert

So stellen Sie eine PHP-Anwendung mit Nginx und MySQL mit Docker und Docker Compose bereit

So konfigurieren Sie einen Linux-Cluster mit 2 Knoten auf RedHat und CentOS