So erstellen Sie einen MySQL PXC-Cluster

So erstellen Sie einen MySQL PXC-Cluster

1. Einführung in PXC

1.1 Einführung in PXC

PXC ist eine MySQL-Hochverfügbarkeitsclusterlösung. Im Vergleich zur herkömmlichen Clusterarchitektur, die auf dem Master-Slave-Replikationsmodus basiert, besteht das herausragendste Merkmal von PXC darin, dass es das lange kritisierte Problem der Datenreplikationsverzögerung löst und grundsätzlich eine Echtzeitsynchronisierung erreichen kann. Darüber hinaus ist die Beziehung zwischen den Knoten gleich. PXC legt größten Wert auf die Datenkonsistenz. Bei der Verarbeitung von Dingen führt es diese entweder auf allen Knoten aus oder überhaupt nicht. Sein Implementierungsmechanismus bestimmt, dass es bei der Verarbeitung der Konsistenz sehr streng ist, wodurch auch die Datenkonsistenz des MySQL-Clusters perfekt sichergestellt werden kann.

1.2 PXC-Funktionen und Vorteile

  • Vollständig kompatibel mit MySQL.
  • Bei der synchronen Replikation wird eine Transaktion entweder auf allen Knoten festgeschrieben oder nicht.
  • Durch die Multi-Master-Replikation können Schreibvorgänge auf jedem beliebigen Knoten durchgeführt werden.
  • Wenden Sie Ereignisse parallel auf Slave-Servern an, echte parallele Replikation.
  • Automatische Knotenkonfiguration, Datenkonsistenz, keine asynchrone Replikation mehr.
  • Failover: Da Multipoint-Schreiben unterstützt wird, kann bei einem Datenbankfehler problemlos ein Failover durchgeführt werden.
  • Automatisches Klonen von Knoten: Beim Hinzufügen neuer Knoten oder Herunterfahren zu Wartungszwecken müssen inkrementelle Daten oder Basisdaten nicht manuell gesichert werden. Galera Cluster ruft automatisch Online-Knotendaten ab, und der Cluster wird schließlich konsistent.

Der größte Vorteil von PXC: starke Konsistenz und keine Synchronisationsverzögerung

1.3 Einschränkungen und Nachteile von PXC

  • Die Replikation unterstützt nur die InnoDB-Engine. Änderungen an anderen Speicher-Engines werden nicht repliziert.
  • Die Schreibeffizienz hängt vom langsamsten Knoten ab

1.4 Unterschiede zwischen PXC und Replikation

Replikation PXC
Die Datensynchronisierung erfolgt in eine Richtung. Der Master ist für das Schreiben und die anschließende asynchrone Replikation auf den Slave verantwortlich. Wenn der Slave Daten schreibt, werden diese nicht auf den Master repliziert. Die Datensynchronisierung erfolgt bidirektional. Alle von einem MySQL-Knoten geschriebenen Daten werden mit anderen Knoten im Cluster synchronisiert.
Asynchrone Replikation, Slave und Master können keine Datenkonsistenz garantieren Synchrone Replikation, Transaktionen werden entweder gleichzeitig auf allen Clusterknoten festgeschrieben oder nicht gleichzeitig

1.5 Gemeinsame PXC-Anschlüsse

  • 3306: Portnummer für externe Datenbankdienste.
  • 4444: Port zum Anfordern von SST.
  • 4567: Eine Portnummer für die Kommunikation zwischen Gruppenmitgliedern
  • 4568: wird zur Übertragung von IST verwendet.

Glossar:

  • SST (State Snapshot Transfer): Vollständige Übertragung
  • IST (Incremental State Transfer): inkrementelle Übertragung

2. Üben

2.1 Aufbau eines PXC-Clusters

Im Gegensatz zu MySQL stellt PXC offiziell Docker-Images bereit, sodass wir problemlos einen PXC-Cluster erstellen können.

1) Laden Sie das Docker-Image herunter

Docker-Pull Percona/Percona-XtraDB-Cluster: 5.7

Benennen Sie das Bild um

Docker-Tag Percona/Percona-XtraDB-Cluster:5.7 pxc:5.7

3) Löschen Sie das Originalbild

Docker RMI Percona/Percona-XtraDB-Cluster: 5.7

Erstellen Sie ein Docker-Netzwerk zur unabhängigen Nutzung des PXC-Clusters

Docker-Netzwerk, PXC-Netzwerk erstellen

Erstellen Sie ein Datenvolumen für die spätere Einbindung

Docker-Volume erstellen --Name v1
Docker-Volume erstellen --Name v2
Docker-Volume erstellen --Name v3

Hinweis: PXC-Container unterstützen nur die Bereitstellung von Datenträgern, nicht die Bereitstellung von Verzeichnissen.

Erstellen des ersten Knotens

docker run -di --name=pn1 --net=pxc-network -p 9000:3306 -v v1:/var/lib/mysql --privileged -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=cluster1 -e XTRABACKUP_PASSWORD=123456 pxc:5.7 

Da das Hinzufügen weiterer Knoten dem ersten Knoten zugeordnet werden muss, müssen Sie warten, bis die Datenbank gestartet wird. Überprüfen Sie die Protokolle über Docker-Protokolle pn1. Wenn die folgende Ausgabe erscheint, beweist dies, dass der Start erfolgreich war:

2019-09-04T06:27:30.085880Z 0 [Hinweis] InnoDB: Laden der Pufferpools abgeschlossen um 190904 6:27:30

Hinweis: Verwenden Sie nicht das Schlüsselwort PXC im Namen CLUSTER_NAME, da der Start sonst fehlschlägt.

Verbinden Sie den zweiten Knoten

docker run -di --name=pn2 --net=pxc-network -p 9001:3306 -v v2:/var/lib/mysql --privileged -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=cluster1 -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=pn1 pxc:5.7  

Es ist zu beachten, dass ab dem zweiten Knoten der Parameter CLUSTER_JOIN=pn1 hinzugefügt werden muss, um eine Synchronisierung mit dem Knoten pn1 anzuzeigen, da sonst der Container pn1 automatisch geschlossen wird.

Wenn der PXC-Cluster mehr als zwei Knoten enthält, gibt es kein Konzept eines Masterknotens. Der letzte Knoten, der den Cluster verlässt, wird zum primären Knoten, und der Wert des Attributs safe_to_bootstrap in der Datei /var/lib/mysql/grastate.dat wird von 0 auf 1 gesetzt, um anzuzeigen, dass der Knoten der primäre Knoten ist.

8) Fügen Sie den dritten Knoten hinzu

docker run -di --name=pn3 --net=pxc-network -p 9002:3306 -v v3:/var/lib/mysql --privileged -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=cluster1 -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=pn2 pxc:5.7  

Sie können sehen, dass unser CLUSTER_JOIN dieses Mal der pn2-Container ist, was beweist, dass unsere gerade getätigte Aussage richtig ist, nämlich dass es kein Konzept eines Masterknotens gibt, wenn ein PXC-Cluster mehr als zwei Knoten enthält.

9) Geben Sie den Knoten pn1 ein

docker exec -it pn1 /usr/bin/mysql -uroot -p123456

Status anzeigen

mysql> Status wie „wsrep%“ anzeigen;
+----------------------------------+-------------------------------------------------+
| Variablenname | Wert |
+----------------------------------+-------------------------------------------------+
| wsrep_local_state_uuid | 068dd5e8-cedd-11e9-904d-466e75bd8fe1 |
| wsrep_protokoll_version | 9 |
| wsrep_last_applied | 16 |
| wsrep_last_committed | 16 |
| wsrep_repliziert | 0 |
| wsrep_replicated_bytes | 0 |
| wsrep_repl_keys | 0 |
| wsrep_repl_keys_bytes | 0 |
| wsrep_repl_data_bytes | 0 |
| wsrep_repl_other_bytes | 0 |
| wsrep_empfangen | 10 |
| wsrep_received_bytes | 800 |
| wsrep_local_commits | 0 |
| wsrep_local_cert_failures | 0 |
| wsrep_local_replays | 0 |
| wsrep_local_send_queue | 0 |
| wsrep_local_send_queue_max | 1 |
| wsrep_local_send_queue_min | 0 |
| wsrep_local_send_queue_avg | 0,000000 |
| wsrep_local_recv_queue | 0 |
| wsrep_local_recv_queue_max | 2 |
| wsrep_local_recv_queue_min | 0 |
| wsrep_local_recv_queue_avg | 0,100000 |
| wsrep_local_cached_downto | 0 |
| wsrep_flow_control_paused_ns | 0 |
| wsrep_flow_control_paused | 0,000000 |
| wsrep_flow_control_sent | 0 |
| wsrep_flow_control_recv | 0 |
| wsrep_flow_control_interval | [ 173, 173 ] |
| wsrep_flow_control_interval_low | 173 |
| wsrep_flow_control_interval_high | 173 |
| wsrep_flow_control_status | AUS |
| wsrep_cert_deps_distance | 0,000000 |
| wsrep_apply_oooe | 0,000000 |
| wsrep_apply_oool | 0,000000 |
| wsrep_apply_window | 0,000000 |
| wsrep_commit_oooe | 0,000000 |
| wsrep_commit_oool | 0,000000 |
| wsrep_commit_window | 0,000000 |
| wsrep_lokaler_status | 4 |
| wsrep_local_state_comment | Synchronisiert |
| wsrep_cert_index_size | 0 |
| wsrep_cert_bucket_count | 22 |
| wsrep_gcache_pool_size | 1592 |
| wsrep_causal_reads | 0 |
| wsrep_cert_interval | 0,000000 |
| wsrep_open_transactions | 0 |
| wsrep_open_connections | 0 |
| wsrep_ist_receive_status | |
| wsrep_ist_receive_seqno_start | 0 |
| wsrep_ist_receive_seqno_current | 0 |
| wsrep_ist_receive_seqno_end | 0 |
| wsrep_incoming_addresses | 172.19.0.2:3306,172.19.0.3:3306,172.19.0.4:3306|
| wsrep_cluster_gewicht | 3 |
| wsrep_desync_count | 0 |
| wsrep_evs_delayed | |
| wsrep_evs_Ausschlussliste | |
| wsrep_evs_repl_latency | 0/0/0/0/0 |
| wsrep_evs_state | BETRIEBSBEREIT |
| wsrep_gcomm_uuid | 11ed51e2-cedd-11e9-b362-af453a7ac074 |
| wsrep_cluster_conf_id | 3 |
| wsrep_cluster_größe | 3 |
| wsrep_cluster_state_uuid | 068dd5e8-cedd-11e9-904d-466e75bd8fe1 |
| wsrep_cluster_status | Primär |
| wsrep_connected | EIN |
| wsrep_local_bf_aborts | 0 |
| wsrep_local_index | 0 |
| wsrep_Anbietername | Galera |
| wsrep_provider_vendor | Codership Oy <[email protected]> |
| wsrep_provider_version | 3.37(rff05089) |
| wsrep_ready | EIN |
+----------------------------------+-------------------------------------------------+
71 Zeilen im Satz (0,06 Sek.)

Sie können sehen, dass der Wert von wsrep_incoming_addresses die IP-Adresse unserer drei Container ist

| wsrep_incoming_addresses | 172.19.0.2:3306,172.19.0.3:3306,172.19.0.4:3306 |

Überprüfung der Clusterintegrität:

Eigentum Bedeutung
wsrep_cluster_state_uuid Die Werte aller Knoten im Cluster sollten gleich sein. Knoten mit unterschiedlichen Werten werden nicht mit dem Cluster verbunden.
wsrep_cluster_conf_id Normalerweise ist der Wert auf allen Knoten gleich. Wenn der Wert unterschiedlich ist, bedeutet dies, dass der Knoten vorübergehend „partitioniert“ ist. Wenn die Netzwerkverbindung zwischen den Knoten wiederhergestellt wird, sollte der gleiche Wert wiederhergestellt werden.
wsrep_cluster_size Wenn dieser Wert mit der erwarteten Knotenanzahl übereinstimmt, sind alle Clusterknoten verbunden.
wsrep_cluster_status Der Status des Clusters. Wenn er nicht „Primär“ ist, bedeutet dies, dass eine „Partitionierung“ oder ein „Split-Brain“-Brain-Split vorliegt.

Knotenstatusprüfung:

Eigentum Bedeutung
wsrep_bereit Wenn dieser Wert eingeschaltet ist, bedeutet dies, dass die SQL-Last akzeptiert werden kann. Wenn er ausgeschaltet ist, müssen Sie wsrep_connected überprüfen.
wsrep_verbunden Wenn der Wert Off ist und der Wert von wsrep_ready ebenfalls Off ist, bedeutet dies, dass der Knoten nicht mit dem Cluster verbunden ist. (Dies kann durch Konfigurationsfehler wie wsrep_cluster_address oder wsrep_cluster_name verursacht werden. Überprüfen Sie bei spezifischen Fehlern bitte das Fehlerprotokoll.)
wsrep_lokaler_Statuskommentar Wenn wsrep_connected eingeschaltet ist, wsrep_ready jedoch ausgeschaltet ist, können Sie den Grund in diesem Punkt überprüfen.

Integritätsprüfung der Replikation:

Eigentum Bedeutung
wsrep_flow_control_paused Gibt an, wie lange die Replikation angehalten wurde. Dies gibt an, wie langsam der Cluster aufgrund der Slave-Latenz ist. Der Wert liegt zwischen 0 und 1, je näher an 0, desto besser, und ein Wert von 1 gibt an, dass die Replikation vollständig angehalten wurde. Sie können den Wert von wsrep_slave_threads optimieren, um
wsrep_cert_deps_distance Wie viele Transaktionen können parallel verarbeitet werden. Der Wert von wsrep_slave_threads sollte nicht zu hoch sein.
wsrep_flow_control_sent Gibt an, wie oft der Knoten die Replikation gestoppt hat
*wsrep_local_recv_queue_avg Gibt die durchschnittliche Länge der Slave-Transaktionswarteschlange an. Ein Zeichen für einen Slave-Engpass. Der langsamste Knoten hat die höchsten Werte von wsrep_flow_control_sent und wsrep_local_recv_queue_avg. Niedrigere Werte sind besser.

Erkennen von langsamen Netzwerkproblemen:

Eigentum Bedeutung
wsrep_local_send_queue_avg Ein Zeichen für einen Netzwerkengpass. Wenn dieser Wert hoch ist, liegt möglicherweise ein Netzwerkengpass vor.

Anzahl der Konflikte oder Deadlocks:

Eigentum Bedeutung
wsrep_last_committed Die Anzahl der zuletzt ausgeführten Transaktionen
wsrep_local_cert_failures und wsrep_local_bf_aborts Rollback, Anzahl erkannter Konflikte

2.2 Überprüfung der Clustersynchronisierung

Erstellen Sie einen Datenbanktest auf Knoten 1

mysql> Datenbanktest erstellen;
Abfrage OK, 1 Zeile betroffen (0,02 Sek.)

Ansicht auf Knoten 2:

mysql> Datenbanken anzeigen;
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
|mysql |
| Leistungsschema |
|System|
| Prüfung |
+--------------------+
5 Zeilen im Satz (0,00 Sek.)

Erstellen Sie eine Tabelle auf Knoten 2

mysql> Test verwenden;
Datenbank geändert
mysql> Tabelle sys_user erstellen (ID int, Name varchar (30));
Abfrage OK, 0 Zeilen betroffen (0,11 Sek.)

4) Zeigen Sie die Tabellenstruktur auf Knoten 3 an

mysql> Test verwenden;
Einlesen von Tabelleninformationen zur Vervollständigung von Tabellen- und Spaltennamen
Sie können diese Funktion deaktivieren, um einen schnelleren Start mit -A zu erhalten

Datenbank geändert
mysql> Tabellen anzeigen;
+----------------+
| Tabellen_im_Test |
+----------------+
|Sys_Benutzer|
+----------------+
1 Zeile im Satz (0,00 Sek.)

Daten auf Knoten drei einfügen

mysql> in sys_user-Werte einfügen (1, 'a');
FEHLER 1105 (HY000): Percona-XtraDB-Cluster verbietet die Verwendung von DML-Befehlen für eine Tabelle (test.sys_user) ohne expliziten Primärschlüssel mit pxc_strict_mode = ENFORCING oder MASTER

Da ohne einen angezeigten Primärschlüssel keine Daten eingefügt werden können, ändern wir die folgende Tabellenstruktur:

Tabelle sys_user ändern, Primärschlüssel (ID) hinzufügen;

Daten einfügen:

mysql> in sys_user-Werte einfügen (1, 'a');
Abfrage OK, 1 Zeile betroffen (0,05 Sek.)

6) Tabellendaten in Knoten 1 anzeigen

mysql> wähle * von sys_user;
+----+------+
| Ich würde | Name |
+----+------+
| 1 | ein |
+----+------+
1 Zeile im Satz (0,00 Sek.)

Es ist ersichtlich, dass die Daten der drei Knoten normal synchronisiert sind und alle lesbar und beschreibbar sind.

2.3 Hinzufügen von Datenbankknotenoperationen

Wenn die Datenbank nicht ausreicht, müssen wir normalerweise Datenbankknoten hinzufügen, um den Druck zu verteilen. Lassen Sie uns den Vorgang zum Hinzufügen neuer Knoten demonstrieren.

Erstellen eines Datenvolumens

Docker-Volume erstellen --Name v4

2) Einen neuen Container hinzufügen

docker run -di --name=pn4 --net=pxc-network -p 9003:3306 -v v4:/var/lib/mysql --privileged -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=cluster1 -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=pn3 pxc:5.7 

Beachten Sie, dass CLUSTER_JOIN dieses Mal pn3 beitritt.

Geben Sie Knoten 4 ein, um Daten anzuzeigen

mysql> Datenbanken anzeigen;
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
|mysql |
| Leistungsschema |
|System|
| Prüfung |
+--------------------+
5 Zeilen im Satz (0,00 Sek.)
mysql> Test verwenden;
Einlesen von Tabelleninformationen zur Vervollständigung von Tabellen- und Spaltennamen
Sie können diese Funktion deaktivieren, um einen schnelleren Start mit -A zu erhalten
Datenbank geändert
mysql> Tabellen anzeigen;
+----------------+
| Tabellen_im_Test |
+----------------+
|Sys_Benutzer|
+----------------+
1 Zeile im Satz (0,00 Sek.)
mysql> wähle * von sys_user;
+----+------+
| Ich würde | Name |
+----+------+
| 1 | ein |
+----+------+
1 Zeile im Satz (0,00 Sek.)

Sie sehen, dass auch die bisherigen Daten automatisch synchronisiert werden.

2.4 Ausfallbetrieb

Schließen Sie den Node-pn4-Container, da dies zu Ausfallzeiten führt

Docker stoppt PN4

Überprüfen Sie den Clusterstatus auf Knoten pn2

mysql> Status wie „wsrep%“ anzeigen;
......
| wsrep_lokaler_status | 4 |
| wsrep_local_state_comment | Synchronisiert |
| wsrep_cert_index_größe | 3 |
......
| wsrep_incoming_addresses | 172.19.0.4:3306,172.19.0.3:3306,172.19.0.2:3306 |

Sie können sehen, dass der Cluster 4 Knoten haben sollte, jetzt aber normalerweise nur 3 verbunden sind.

3) Führen Sie Änderungsvorgänge am Knoten pn2 durch

mysql> aktualisiere sys_user setze Name='b', wobei ID=1 ist; 
Abfrage OK, 1 Zeile betroffen (0,00 Sek.)
Übereinstimmende Zeilen: 1 Geändert: 1 Warnungen: 0

Starten Sie den Node-PN4-Container

[root@VM_0_15_centos ~]# Docker startet pn4

Geben Sie den Container pn4 ein, um zu prüfen, ob der Änderungsvorgang synchronisiert ist

docker exec -it pn4 /usr/bin/mysql -uroot -p123456
mysql> Test verwenden;
Einlesen von Tabelleninformationen zur Vervollständigung von Tabellen- und Spaltennamen
Sie können diese Funktion deaktivieren, um einen schnelleren Start mit -A zu erhalten

Datenbank geändert
mysql> wähle * von sys_user;
+----+------+
| Ich würde | Name |
+----+------+
| 1 | b |
+----+------+
1 Zeile im Satz (0,00 Sek.)

Sie können sehen, dass der Knoten dem Cluster normal beigetreten ist und die Daten synchronisiert wurden.

pn4 ist ein Container, der durch den Eintritt in den PXC-Cluster in Form eines designierten Masterknotens erstellt wird. Was passiert, wenn pn1 direkt einen Container mit sich selbst als Masterknoten startet? Lassen Sie uns dies demonstrieren:

Fahren Sie den pn1-Knoten herunter.

Docker stoppt PN1

Fügen Sie ein Datenelement in den Knoten pn2 ein.

mysql> in sys_user-Werte einfügen('2','c');
Abfrage OK, 1 Zeile betroffen (0,01 Sek.)

Starten Sie den Knoten pn1

Docker starten pn1

Warten Sie eine Minute und überprüfen Sie die Container-Startliste

Docker ps -a

Es wurde festgestellt, dass der Knoten pn1 nicht gestartet wurde

CONTAINER ID BILD ...... STATUSNAMEN
fa123563e787 pxc:5.7 ...... Beendet (1) Vor etwa einer Minute pn1               

Überprüfen Sie das Fehlerprotokoll:

Docker-Protokolle pn1

Die Ausnahmeinformationen lauten wie folgt:

2019-09-04T07:21:56.412918Z 0 [FEHLER] WSREP: Es ist möglicherweise nicht sicher, den Cluster von diesem Knoten aus zu booten. Er war nicht der letzte, der den Cluster verlassen hat, und enthält möglicherweise nicht alle Updates. Um den Cluster-Bootstrap mit diesem Knoten zu erzwingen, bearbeiten Sie die Datei grastate.dat manuell und setzen Sie safe_to_bootstrap auf 1 .
2019-09-04T07:21:56.412922Z 0 [FEHLER] WSREP: Provider/Knoten (gcomm://) konnte keine Verbindung mit dem Cluster herstellen (Grund: 7)
2019-09-04T07:21:56.412929Z 0 [FEHLER] Abbruch

Ins Chinesische übersetzt:

2019-09-04T07:21:56.412918Z 0 [FEHLER] WSREP: Es ist möglicherweise unsicher, den Cluster von diesem Knoten aus zu booten. Es war nicht das letzte, das den Cluster verlassen hat und enthält möglicherweise nicht alle Aktualisierungen. Um den Cluster zum Bootstrap mithilfe dieses Knotens zu zwingen, bearbeiten Sie die Datei grastate.dat manuell und setzen Sie safe_to_bootstrap auf 1.
2019-09-04T07:21:56.412922Z 0 [FEHLER] WSREP: Provider/Knoten (gcomm://) konnte keine Verbindung mit dem Cluster herstellen (Grund: 7)
2019-09-04T07:21:56.412929Z 0 [FEHLER] Abgebrochen

Die Fehlermeldung ist offensichtlich, denn der Knoten pn1 ist nicht der letzte, der den Cluster verlässt und kann nicht als Masterknoten gestartet werden. Möchte man ihn als Masterknoten starten, muss man den Parameter safe_to_bootstrap in der Datei grastate.dat auf 1 setzen.

Es ist jedoch zu beachten, dass der gestartete Container keine Verbindung zum vorherigen Cluster hat, da andere Knoten im Cluster nicht heruntergefahren werden, und die Daten nicht synchronisiert werden. Lassen Sie uns das überprüfen:

Den Pfad anzeigen, in dem das Datenvolumen gespeichert ist

Docker-Volumeninspektion v1
[
    {
        "Erstellt am": "2019-09-05T09:22:22+08:00",
        "Treiber": "lokal",
        "Beschriftungen": {},
        "Einhängepunkt": "/var/lib/docker/volumes/v1/_data",
        "Name": "v1",
        "Optionen": {},
        "Geltungsbereich": "lokal"
    }
]

Gehen Sie in das Datenträgerverzeichnis und prüfen Sie, ob dort eine Datei grastate.dat vorhanden ist.

[root@VM_0_15_centos ~]# cd /var/lib/docker/volumes/v1/_data
[root@VM_0_15_centos _data]# ll
insgesamt 323444
-rw-r----- 1 1001 1001 56 5. September 08:34 auto.cnf
-rw------- 1 1001 1001 1680 5. September 08:34 ca-key.pem
-rw-r--r-- 1 1001 1001 1120 5. September 08:34 ca.pem
-rw-r--r-- 1 1001 1001 1120 5. September 08:34 client-cert.pem
-rw------- 1 1001 1001 1676 5. September 08:34 client-key.pem
-rw-r----- 1 1001 1001 2 5. September 08:34 fa123563e787.pid
-rw-r----- 1 1001 1001 134219048 5. September 09:22 galera.cache
-rw-r----- 1 1001 1001 113 5. September 09:21 grastate.dat
-rw-r----- 1 1001 1001 1300 5. September 08:34 ib_buffer_pool
-rw-r----- 1 1001 1001 79691776 5. September 09:15 ibdata1
-rw-r----- 1 1001 1001 50331648 5. September 09:15 ib_logfile0
-rw-r----- 1 1001 1001 50331648 5. September 08:34 ib_logfile1
-rw-r----- 1 1001 1001 12582912 5. September 08:38 ibtmp1
-rw-r----- 1 1001 1001 34751 5. September 08:38 innobackup.backup.log
drwxr-x--- 2 1001 1001 4096 5. September 08:34 mysql
drwxr-x--- 2 1001 1001 4096 5. September 08:34 performance_schema
-rw------- 1 1001 1001 1676 5. September 08:34 private_key.pem
-rw-r--r-- 1 1001 1001 452 5. September 08:34 public_key.pem
-rw-r--r-- 1 1001 1001 1120 5. September 08:34 server-cert.pem
-rw------- 1 1001 1001 1676 5. September 08:34 server-key.pem
drwxr-x--- 2 1001 1001 12288 5. September 08:34 sys
drwxr-x--- 2 1001 1001 4096 5. September 09:07 Test
-rw-r--r-- 1 1001 1001 143 5. Sep 09:22 version_info
-rw-r----- 1 1001 1001 3932160 5. September 09:15 xb_doublewrite

Bearbeiten einer Datei

vim grastate.dat

Ändern Sie den Parameterwert safe_to_bootstrap auf 1, speichern Sie und beenden Sie

# GALERA hat den Status gespeichert
Version: 2.1
UUID: 068dd5e8-cedd-11e9-904d-466e75bd8fe1
Sequenznummer: 20
sicher_zum_Booten: 1

Starten Sie den pn1-Container neu

Docker starten pn1

Betreten Sie den Container und sehen Sie sich die Daten an

docker exec -it pn1 /usr/bin/mysql -uroot -p123456
mysql> Test verwenden;
Einlesen von Tabelleninformationen zur Vervollständigung von Tabellen- und Spaltennamen
Sie können diese Funktion deaktivieren, um einen schnelleren Start mit -A zu erhalten

Datenbank geändert
mysql> wähle * von sys_user;
+----+------+
| Ich würde | Name |
+----+------+
| 1 | b |
+----+------+
1 Zeile im Satz (0,01 Sek.)

Es wurde festgestellt, dass die Daten nicht synchronisiert sind. Wie kann also der Knoten pn1 zum Cluster hinzugefügt werden?

Wir können den pn1-Container direkt löschen und den Container durch Hinzufügen des Knotens neu erstellen. Und da wir die Containerdaten zuvor auf dem Datenvolumen bereitgestellt haben, besteht kein Risiko eines Datenverlusts. Gehen wir es so an:

Löschen Sie den pn1-Container

Docker stoppt PN1
Docker RM PN1

Treten Sie dem Cluster als Slave-Knoten bei

docker run -di --name=pn1 --net=pxc-network -p 9000:3306 -v v1:/var/lib/mysql --privileged -e MYSQL_ROOT_PASSWORD=123456 -e CLUSTER_NAME=cluster1 -e XTRABACKUP_PASSWORD=123456 -e CLUSTER_JOIN=pn2 pxc:5.7  

Warten Sie, bis der Container initialisiert ist

3) Geben Sie den Container ein und prüfen Sie, ob die Daten synchronisiert sind

docker exec -it pn1 /usr/bin/mysql -uroot -p123456
mysql> Test verwenden;
Einlesen von Tabelleninformationen zur Vervollständigung von Tabellen- und Spaltennamen
Sie können diese Funktion deaktivieren, um einen schnelleren Start mit -A zu erhalten

Datenbank geändert
mysql> wähle * von sys_user;
+----+------+
| Ich würde | Name |
+----+------+
| 1 | b |
| 2 | c |
+----+------+
2 Zeilen im Satz (0,00 Sek.)

Die Daten wurden synchronisiert.

Dies ist das Ende dieses Artikels über die Schritte zum Erstellen eines MySQL PXC-Clusters. Weitere Informationen zum Erstellen eines MySQL PXC-Clusters finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Bereitstellung eines MySQL-Hochverfügbarkeitsclusters und Implementierung eines Failovers
  • MySQL 5.7-Clusterkonfigurationsschritte
  • Implementierung der Docker-Bereitstellung eines MySQL-Clusters
  • Detaillierte Schritte zur Installation von MySQL mit Cluster-RPM
  • Detaillierte Erläuterung des MySQL-Clusters: Implementierung einer Master- und einer Slave-Architektur
  • So stellen Sie MySQL 5.7- und 8.0-Master-Slave-Cluster mit Docker bereit
  • Detaillierte Erläuterung der Galera-Cluster-Bereitstellung im Clustermodus von MySQL
  • Beispiel zum Erstellen eines MySQL-Clusters mit Docker
  • Tutorial zur grundlegenden Bereitstellung von MySQL Cluster
  • So erstellen Sie einen MySQL-Cluster mit hoher Verfügbarkeit und Leistung

<<:  Kreatives „Über uns“-Webseitendesign

>>:  Detaillierte Erklärung der Verwendung des SS-Befehls in Linux in Kombination mit Zabbix zum Überwachen von Sockets

Artikel empfehlen

Analyse langsamer Einfügefälle aufgrund großer Transaktionen in MySQL

【Frage】 Die INSERT-Anweisung ist eine der am häuf...

WeChat-Miniprogramm zur Implementierung elektronischer Signaturen

In diesem Artikel finden Sie den spezifischen Cod...

So verwenden Sie VUE, um die Ali Iconfont-Bibliothek online aufzurufen

Vorwort Vor vielen Jahren war ich ein Neuling auf...

CSS3-Textanimationseffekte

Wirkung html <div Klasse="sp-container&qu...

Konfigurieren von MySQL und Squel Pro auf dem Mac

Als Reaktion auf die Popularität von nodejs haben...

Detaillierter Prozess der Bereitstellung von Docker für WSL2 in IDEA

Die lokale Umgebung ist Windows 10 + WSL2 (Ubuntu...

Methode und Einführung der Tabellenindexdefinition in MySQL

Überblick Ein Index ist eine vom DBMS basierend a...

Detaillierte Erklärung der MySQL-Injektion ohne Kenntnis des Spaltennamens

Vorwort Ich habe in letzter Zeit das Gefühl, dass...

Prototyp und Prototypenkette Prototyp und Protodetails

Inhaltsverzeichnis 1. Prototyp 2. Prototypenkette...