Percona XtraDB Cluster 8.0 basiert auf Percona Server für MySQL 8.0 eingebettet in die Galera Writeset-Replikations-API und die Galera-Replikationsbibliothek, um eine hochverfügbare Multi-Master-Replikation für MySQL-basierte Datenbankserver zu bilden. Percona XtraDB Cluster wird mit der XtraDB-Speicher-Engine (einem Drop-in-Ersatz von InnoDB) geliefert und folgt den Upstream-Veröffentlichungen von Oracle MySQL sehr genau (einschließlich aller darin enthaltenen Fehlerkorrekturen), mit einigen zusätzlichen Variablen und Status, die für diesen Build spezifisch sind.
In diesem Blogpost werden wir untersuchen, wie ein Percona XtraDB Cluster 8.0 für Hochverfügbarkeit auf manuelle und automatisierte Weise bereitgestellt wird.
Bemerkenswerte Funktionen
Bevor wir mit den Bereitstellungsschritten fortfahren, sollten bemerkenswerte Funktionen und signifikante Verbesserungen in dieser Hauptversion erwähnt werden, die auf Percona Server für MySQL 8.0 (ohne Gruppenreplikations-Plugin) und Galera 4 basiert:
- Streaming-Replikation – Dies ermöglicht der Writeset-Replikation die Verarbeitung großer Datentransaktionen in kleineren, leichter zu verwaltenden Fragmenten, wodurch Datenkonflikte minimiert werden.
- Die Synchronisierungs-MySQL-Funktionen zur Aktionskoordination (wsrep_last_seen_gtid, wsrep_last_written_gtid, wsrep_sync_wait_upto_gtid).
- Neue Galera-Systemtabellen, die helfen, den Zustand des Clusters unter dem "mysql"-Schema zu überwachen - wsrep_cluster, wsrep_cluster_members und wsrep_streaming_log.
- Gcache-Verschlüsselung.
- Die wsrep-Infrastruktur von Galera 4 ist robuster als die von Galera 3. Sie bietet eine schnellere Ausführung von Code mit besserer Zustandsbehandlung, verbesserter Vorhersagbarkeit und Fehlerbehandlung.
Eine vollständige Liste der Änderungen finden Sie in den Versionshinweisen.
Manuelle Bereitstellung von Percona XtraDB Cluster 8.0
Installationsschritte
Für den Percona XtraDB Cluster benötigen wir mindestens drei Knoten:
- db1 (192.168.20.61)
- db2 (192.168.20.62)
- db3 (192.168.20.63)
Die in diesem Abschnitt beschriebenen Schritte sollten auf allen Datenbankknoten (db1, db2 und db3) ausgeführt werden, die unter CentOS 8 ausgeführt werden. Deaktivieren Sie zunächst SELinux (andernfalls würde der IST-Prozess fehlschlagen):
$ setenforce 0
$ sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux
Installieren Sie das Percona-Repository-Paket:
$ yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
Zu diesem Zeitpunkt ist die neueste stabile Version Percona XtraDB Cluster 8.0, aber standardmäßig ist das Repository-Paket bis Version 5.7 konfiguriert. Das Paket percona-release enthält ein Skript, das zusätzliche Repositories für die neueren Produkte aktivieren kann. Lassen Sie uns dieses Skript ausführen und das pxc80-spezifische Repository aktivieren:
$ percona-release setup pxc80
* Disabling all Percona Repositories
On RedHat 8 systems it is needed to disable dnf mysql module to install Percona-Server
Do you want to disable it? [y/N]
Wählen Sie "y", um das mysql-DNF-Modul zu deaktivieren. Dies ist notwendig, um das Percona-Repository für MySQL-bezogene Pakete zu priorisieren.
Installieren Sie dann das neueste Percona XtraDB Cluster und Percona Xtrabackup:
$ dnf -y install percona-xtradb-cluster percona-xtrabackup-80
Zum jetzigen Zeitpunkt sollten Sie einen Percona XtraDB Cluster 8.0.0-11.3 installiert bekommen. Alle Abhängigkeitspakete werden wie Shared-Compat-, Shared- und Client-Pakete installiert. Anschließend können wir den MySQL-Dienst zur Erstkonfiguration starten:
$ systemctl start mysql
Beim ersten Start wird ein neues Root-Passwort generiert. Wir müssen zuerst die Root-Passwort-Informationen aus dem MySQL-Fehlerprotokoll abrufen (Standard ist /var/log/mysqld.log in RHEL-basierten Systemen):
$ cat /var/log/mysqld.log | grep 'temporary password'
2020-11-27T06:53:05.929661Z 6 [Note] [MY-010454] [Server] A temporary password is generated for [email protected]: <eqo+jXNw2lk
Wie Sie sehen, lautet das generierte Passwort "
Das generierte Root-Passwort läuft sofort nach der ersten Root-Anmeldung ab. Das obige Hilfsskript hilft uns, ein neues MySQL-Root-Passwort zu konfigurieren, eine Passwort-Validierungsrichtlinie festzulegen, die Remote-Anmeldung für Root zu deaktivieren, die Testdatenbank und anonyme Benutzer zu entfernen und auch die Berechtigungstabellen neu zu laden.
Die Standardkonfigurationsdatei (/etc/my.cnf) ist mit einer leeren gcomm://-Verbindungszeichenfolge unter der Variablen wsrep_cluster_address konfiguriert, wie unten gezeigt: Die obige Zeile muss mit einer Liste von IP-Adressen aller teilnehmenden Knoten im Cluster gesetzt werden. Wenn Sie diesen Schritt verpasst haben, wird auf jedem Knoten (3 separate 1-Knoten-Cluster) ein neuer Galera-Cluster erstellt, nachdem der Dienst auf allen Knoten gestartet wurde. Daher sollten die folgenden Zeilen im Abschnitt [mysqld] entsprechend geändert werden: Erwarten Sie, dass wsrep_cluster_address auf allen Datenbankhosts identisch ist, während wsrep_node_address und wsrep_node_name auf jedem Datenbankhost unterschiedlich sein müssen. Die letzte Zeile pxc-encrypt-cluster-traffic=OFF bedeutet, dass wir die Verschlüsselung für den Cluster-Datenverkehr deaktivieren möchten. Beachten Sie, dass dies beabsichtigt ist, um unsere Bereitstellungsschritte zu vereinfachen, andernfalls müssten wir Schlüssel-/Zertifikatsverwaltungsschritte durchführen. Wenn Sie die Verschlüsselung aktivieren möchten, lesen Sie diesen Artikel.
Wiederholen Sie die obigen Schritte für die verbleibenden Datenbankknoten, bevor Sie mit dem Bootstrap des Clusters fortfahren.
Galera erfordert, dass Sie einen Knoten in einem Cluster als Referenzpunkt starten, bevor die verbleibenden Knoten beitreten und den Cluster bilden können. Dieser Vorgang wird als Cluster-Bootstrap bezeichnet. Bootstrapping ist ein erster Schritt, um einen Datenbankknoten als primäre Komponente einzuführen, bevor andere ihn als Referenzpunkt zum Synchronisieren von Daten sehen.
In diesem Beispiel verwenden wir db1 als Referenzknoten und starten ihn mit dem Bootstrap-Befehl (Sie können auch andere Knoten auswählen, da dies ein neuer Cluster ohne Daten ist): Nach dem Start können wir die anderen Knoten (db2 und db3) mit dem Standard-Startbefehl starten (ein Knoten nach dem anderen): Sie können dies mit der folgenden Zeile in /var/log/mysqld.log überprüfen: Zu diesem Zeitpunkt wurde unser Percona XtraDB Cluster-Dienst gestartet und die manuelle Bereitstellung ist nun abgeschlossen. Weitere Informationen zum Percona XtraDB-Cluster-Bootstrapping-Prozess finden Sie in diesem Blog-Beitrag How to Bootstrap MySQL or MariaDB Galera Cluster.
Es gibt zwei Möglichkeiten, wie Sie einen Percona XtraDB Cluster 8.0 mit ClusterControl bereitstellen können. Sie können die ClusterControl-UI (webbasierte GUI) oder die ClusterControl-CLI namens s9s verwenden. In diesem Abschnitt zeigen wir Ihnen beide Möglichkeiten. ClusterControl muss sich auf einem separaten Host außerhalb Ihres Datenbank-Clusters befinden. Daher kann unsere Architektur wie folgt dargestellt werden:
Verbinden Sie sich per SSH mit dem ClusterControl-Server und installieren Sie ClusterControl mit den folgenden Befehlen: Folgen Sie dem Installationsassistenten, bis die Installation abgeschlossen ist. Öffnen Sie nach Abschluss der Installation den Webbrowser und gehen Sie zu http://192.168.20.19/clustercontrol . Erstellen Sie einen Admin-Benutzer und die Lizenz wird automatisch installiert. Alle Neuinstallationen werden mit einer Testlizenz für die Enterprise Edition für 30 Tage geliefert. Sobald diese Testlizenz abläuft, wird sie standardmäßig auf die Community-Edition zurückgesetzt, die für immer kostenlos ist.
ClusterControl erfordert, dass passwortloses SSH vom ClusterControl-Server zu allen verwalteten Knoten eingerichtet wird. Um dies zu erreichen, müssen wir zuerst einen SSH-Schlüssel auf dem ClusterControl-Server generieren. Der SSH-Benutzer muss über Superuser-Privilegien (sudo oder root) verfügen. In diesem Fall verwenden wir den Root-Benutzer: Generieren Sie nun einen SSH-Schlüssel für den Benutzer root: Als nächstes kopieren Sie den öffentlichen Schlüssel auf alle Datenbankknoten, die wir bereitstellen und verwalten werden. In diesem Fall alle 3 Galera-Knoten: Geben Sie das Root-Passwort der jeweiligen Hosts ein, wenn Sie dazu aufgefordert werden.
Testen Sie es mit dem folgenden Befehl und vergewissern Sie sich, dass Sie eine korrekte Antwort erhalten: Jetzt können wir unseren Cluster mithilfe der ClusterControl-Benutzeroberfläche oder -CLI bereitstellen, wie in den nächsten Abschnitten gezeigt.
Es ist praktisch einfach, einen Percona XtraDB-Cluster mit ClusterControl bereitzustellen, und standardmäßig konfiguriert ClusterControl den Cluster mit aktivierter Galera-Verschlüsselung. Nachdem das passwortlose SSH konfiguriert wurde, gehen Sie zu ClusterControl -> Deploy -> MySQL Galera und geben Sie die erforderlichen Details wie folgt an: Klicken Sie dann auf „Weiter“, um mit dem nächsten Schritt fortzufahren, in dem wir konfigurieren die MySQL-Spezifikation: Wählen Sie "Percona" als Anbieter und 8.0 als Version. Behalten Sie den Rest als Standard bei und geben Sie das MySQL-Root-Passwort ein. Geben Sie nacheinander die IP-Adresse oder den Hostnamen der Datenbankhosts an und stellen Sie sicher, dass Sie nach jeder Einfügung die grünen Häkchensymbole erhalten. Dies zeigt an, dass ClusterControl die entsprechenden Hosts über passwortloses SSH mit dem bereitgestellten SSH-Benutzer und -Schlüssel erreichen kann, wie in Schritt 1 definiert. Klicken Sie auf die Schaltfläche „Bereitstellen“, um die Bereitstellung zu starten.
ClusterControl löst dann einen Bereitstellungsjob aus, bei dem Sie den Bereitstellungsfortschritt überwachen können, indem Sie zu ClusterControl -> Aktivität -> Jobs -> Cluster erstellen -> Vollständige Jobdetails gehen, wie im folgenden Screenshot gezeigt: Sobald der Vorgang abgeschlossen ist, sollte der Cluster im Dashboard aufgelistet sein : Das war's. Die Bereitstellung ist jetzt abgeschlossen.
Wenn Sie es vorziehen, den Cluster über die Befehlszeile bereitzustellen, können wir einfach das ClusterControl-Befehlszeilen-Client-Tool namens „s9s“ verwenden. Dieses Tool sendet einen Bereitstellungsauftrag an den ClusterControl-Controller und führt alle erforderlichen Schritte zur Bereitstellung des Clusters aus.
Führen Sie den folgenden Befehl auf dem ClusterControl-Server aus:
Sie werden sehen, dass die Auftragsmeldungen erscheinen und Sie können den Bereitstellungsfortschritt dort überwachen und Sie können den Auftragsfortschritt auch über ClusterControl UI -> Activity -> Jobs überwachen . Warten Sie 15-20 Minuten (je nach Internetverbindung), bis Sie die Benachrichtigung über den Abschluss des Auftrags sehen. Unser Percona XtraDB Cluster 8.0 ist jetzt bereitgestellt und Sie können es in der ClusterControl-Benutzeroberfläche sehen.$ mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root:
The existing password for the user account root has expired. Please set a new password.
New password:
Re-enter new password:
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: y
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
Using existing password for root.
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y
New password:
Re-enter new password:
Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.
All done!
wsrep_cluster_address=gcomm://
wsrep_cluster_address=gcomm://192.168.20.51,192.168.20.52,192.168.20.53
wsrep_node_address=192.168.20.51 # IP address of this DB host
wsrep_node_name=db1 # any name to identify this DB host
pxc-encrypt-cluster-traffic=OFF
Cluster-Bootstrapping
$ systemctl stop mysql
$ systemctl start [email protected]
$ systemctl status [email protected]
$ systemctl stop mysql
$ systemctl start mysql
2020-11-27T08:09:01.964152Z 2 [Note] [MY-000000] [WSREP] Synchronized with group, ready for connections
Automatische Bereitstellung mit ClusterControl
ClusterControl installieren
$ wget http://severalnines.com/downloads/cmon/install-cc
$ chmod 744 install-cc
$ ./install-cc
Passwortloses SSH
$ whoami
root
$ ssh-keygen -t rsa # press Enter on all prompts
$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]
$ ssh [email protected] "ls /root"
PXC-Bereitstellung mit der ClusterControl-Benutzeroberfläche
PXC-Bereitstellung mit ClusterControl CLI
$ s9s cluster --create \
--cluster-type=galera \
--nodes="192.168.20.51;192.168.20.52;192.168.20.53" \
--vendor=percona \
--provider-version=8.0 \
--db-admin-passwd='P4ssw0rdSecr3t' \
--os-user=root \
--os-key-file=/root/.ssh/id_rsa \
--cluster-name='My Percona XtraDB Cluster 8.0' \
--log