Detailliertes Tutorial zur Installation eines PXC-Clusters mit Docker

Detailliertes Tutorial zur Installation eines PXC-Clusters mit Docker

Hier sind einige Befehle im Zusammenhang mit der Firewall unter Linux

# Abfrage des Firewall-Status systemctl status firewalld
# Abfrage des Firewall-Status firewall-cmd --state
# Prüfen Sie, ob Port 8080 geöffnet ist firewall-cmd --query-port=8080/tcp
# Öffnen Sie Port 80 firewall-cmd --permanent --add-port=80/tcp
# Port entfernen Firewall-cmd --permanent --remove-port=8080/tcp
Löschen Sie die Firewall mit iptables -F

2. Schalten Sie SELINUX und MySQL aus

Dauerhaft geschlossen:

vi /etc/selinux/config

Deaktivieren Sie SELINUX und starten Sie den Computer neu.

Vorübergehende Schließung:

0

MySQL herunterfahren

systemctl status mysql
systemctl stoppt MySQL

3. Erstellen Sie einen Docker-Swarm-Cluster

Swarm erfordert auch, dass einige Ports geöffnet sind. Wenn Sie die Firewall ausschalten, müssen Sie natürlich nichts weiter sagen.

Vorwort

Es gibt viele selbst erstellte MySQL-Clusterlösungen, z. B. Keepalived, MHA, PXC, MySQL Master-Slave usw. Je nach unserer eigenen Situation und unseren Bedingungen verwenden wir jedoch PXC für den Aufbau. Der größte Vorteil besteht darin, dass es über mehrere Master und mehrere Backups verfügt, d. h. Master-Slave-Integration, keine Probleme mit Synchronisierungsverzögerungen und eine bequeme und einfache Verwendung.

Ich habe sowohl die direkte Installation von pxc als auch die Installation von Docker-Containern verwendet. Ich persönlich bin der Meinung, dass die Installation unter Docker bequemer und einfacher zu warten ist, daher empfehle ich Ihnen, diese Methode zu verwenden.

Erstellen der Umgebung

Umfeld
centos7
Pxc-Versionsbild: die neueste Version, derzeit 8.0+

Host-IP einsetzen Schwarm
172.16.9.40 pxc1 Manager
172.16.9.41 pxc2 Arbeitnehmer
172.16.9.42 pxc3 Arbeitnehmer
172.16.9.48 nginx als Last

Vorbereitende Vorbereitung

Unter Linux muss die Firewall ausgeschaltet oder bestimmte erforderliche Ports geöffnet werden. pxc wird mit MySQL geliefert und die Versionen sind konsistent, sodass MySQL auf dem Computer nicht benötigt wird. Am besten schalten Sie SELINUX aus, die Sicherheitsverbesserung, die mit Linux geliefert wird.

Beachten Sie diese Konfigurationen, die auf allen drei Maschinen durchgeführt werden müssen.

1. Öffnen Sie die von pxc benötigten Ports

Hafen Funktion
3306 MySQL-Datenbank
4567 PXC-Cluster-Kommunikationsport
4444 sst Vollübertragung
4568 ist Inkrementalgetriebe

Hafen Funktion
2377 Für die Clusterkommunikation
4789 Container-Overlay-Netzwerk
7946 Container-Netzwerkerkennung

Ich verwende 172.16.9.40 als Masterknoten

docker swarm init Initialisiert den Masterknoten docker swarm join --token xxxx xxxx Verbinde andere Knoten

40Nachdem der Masterknoten initialisiert wurde, zeigt die Konsole docker swarm join --token xxxx xxxx

Anschließend rufen die Maschinen 41 und 42 die entsprechenden Befehle auf, um dem Schwarmcluster beizutreten.

Docker-Knoten ls

Die aktuellen Knoteninformationen können Sie wie folgt einsehen

root@srig-Konfiguration]# Docker-Knoten ls
ID HOSTNAME STATUS VERFÜGBARKEIT MANAGER STATUS ENGINE VERSION
vk3kzrob1b8jvjq9bxia8lwa7 * srig.dcmp.database.m1 Bereit Aktiver Leiter 20.10.3
4s0pj57d43hm71wipnnbckfkt srig.dcmp.database.m2 Bereit Aktiv 20.10.3
ub1fe2qms2rlhmj9zlap20bsq srig.dcmp.database.s1 Bereit Aktiv
docker node rm -f xxx Erzwungenes Löschen von Knoten docker swarm leave -f Der Masterknoten wird gezwungen den Swarm-Cluster zu verlassen docker swarm leave Der Slaveknoten verlässt den Swarm-Cluster

4. Erstellen Sie ein virtuelles Netzwerk

Docker-Netzwerk erstellen -d Overlay --attachable xxxxx

Andere verwandte Befehle

docker network inspect xxxx Netzwerkinformationen anzeigen docker network ls Alle Netzwerkinformationen anzeigen docker network rm xxxx Ein Netzwerk löschen

Der Netzwerkname hier ist swarm_mysql . Nachdem das Netzwerk erstellt wurde, docker network inspect swarm_mysql um es anzuzeigen (in meinem Fall können Sie nach dem Einrichten der Knoten sehen, dass es drei Maschinen gibt).

5. Verzeichnis und Zertifikat erstellen

Wenn Sie 8.0+ verwenden und nicht dasselbe Zertifikat verwenden, erhalten Sie auf jeden Fall einen SSL-bezogenen Fehler

„Fehler:0407008A:rsa-Routinen:RSA_padding_check_PKCS1_type_1:ungültige Polsterung“

Dies liegt daran, dass nach 8.0 SSL für die Verbindung verwendet wird und die drei Maschinen die Konsistenz des Schlüssels aufrechterhalten müssen, um kommunizieren zu können.

Dies ist die offizielle Lösung zum Generieren von Zertifikaten und jeder verwendet denselben Satz.

Erstellen Sie ein Verzeichnis

Generell ist es am besten, die Partitionierung der Systemfestplatte zu überprüfen und die MySQL-Daten dann auf einer großen Festplatte zu speichern.

df -h 

Meine Daten befinden sich alle in /home /home daher ist es das größte Dateisystem.

! Beachten Sie, dass das Verzeichnis hier auf allen drei Maschinen auf die gleiche Weise erstellt werden muss.

CD /Home
mkdir -m 777 pxc_cert Zertifikat mkdir -m 777 pxc_config Benutzerdefinierte MySQL-Konfigurationsdatei mkdir -m 777 pxc_data Daten

Hinweis: Hier müssen Sie Berechtigungen erteilen, sonst werden an vielen Stellen Fehler gemeldet

Erstellen Sie custom.cnf

cd /home/pxc_config
vi benutzerdefiniert.cnf

Geben Sie hier den Inhalt ein

[mysqld]
Kleinbuchstabentabellennamen = 1
sql_mode=STRICT_TRANS_TABLES,KEINE_NULL_IM_DATUM,KEINE_NULL_DATUM,FEHLER_FÜR_DIVISION_DURCH_NULL,KEINE_ENGINE_SUBSTITUTION
ssl-ca = /cert/ca.pem
ssl-cert = /cert/server-cert.pem
ssl-Schlüssel = /cert/server-key.pem

[Kunde]
ssl-ca = /cert/ca.pem
ssl-cert = /cert/client-cert.pem
ssl-Schlüssel = /cert/client-key.pem

[sst]
verschlüsseln = 4
ssl-ca = /cert/ca.pem
ssl-cert = /cert/server-cert.pem
ssl-Schlüssel = /cert/server-key.pem

Ich muss die Datenbank so einrichten, dass die Groß-/Kleinschreibung nicht mehr beachtet wird und „group by“ nach 8.0 verwendet werden kann.

Zertifikat erstellen

docker run --name pxc-cert --rm -v /home/pxc_cert:/cert \
percona/percona-xtradb-cluster:8.0 mysql_ssl_rsa_setup -d /cert

Sie können eine Zertifikatsdatei im Verzeichnis /home/pxc_cert erstellen

! Beachten Sie, dass das Zertifikat nach der Erstellung in die entsprechenden Verzeichnisse auf den anderen beiden Computern kopiert werden muss.

scp -r [email protected]:/home/pxc_cert /Benutzer/jafir/downloads/pxc_cert

Herunterladen auf lokal

scp -r /Benutzer/jafir/Downloads/pxc_cert [email protected]:/home/
scp -r /Benutzer/jafir/Downloads/pxc_cert [email protected]:/home/

Hochladen auf 41 42 andere zwei Maschinen

! Hinweis: Alle drei Maschinen müssen Ihnen Berechtigungen für Zertifikatsdateien erteilen

cd /home/pxc_cert
chmod 777 *

Erstellen eines PXC-Clusters

1. Installieren Sie das Image

Docker-Pull Percona/Percona-XtraDB-Cluster

Der Name ist etwas lang, Sie können ihn mit Tag umbenennen

Docker-Tag Percona/Percona-XtraDB-Cluster pxc

Löschen des Originals

Docker RMI Percona/Percona-XtraDB-Cluster

2. Container auf mehreren Rechnern erstellen

Ich habe hier 40 Masterknoten und die anderen sind Clusterknoten, also werden zuerst 40 erstellt.

172.9.16.40 Masterknoten

docker run -d -p 3306:3306 --net=swarm_mysql \
-e MYSQL_ROOT_PASSWORD=asdw@123 \
-e CLUSTER_NAME=pxc_cluster \
-e XTRABACKUP_PASSWORD=asdw@123 \
-v /home/pxc_data:/var/lib/mysql \
-v /home/pxc_cert:/Zertifikat \
-v /home/pxc_config/:/etc/percona-xtradb-cluster.conf.d \
--privileged --name=pxc1 pxc

Befehlsinterpretation:

Docker ausführen -d 
-p 3306:3306 3306 Portzuordnung --net=swarm_mysql Name des virtuellen Netzwerks -e MYSQL_ROOT_PASSWORD=asdw@123 Anfangskennwort der Datenbank -e CLUSTER_NAME=pxc_cluster Clustername -e XTRABACKUP_PASSWORD=asdw@123 Sicherungskennwort -v /home/pxc_cert:/cert Zertifikatspfadzuordnung -v /home/pxc:/var/lib/mysql pxc-Pfadzuordnung -v /home/pxc/config/:/etc/percona-xtradb-cluster.conf.d MySQL-Konfigurationsdateipfadzuordnung --privileged Berechtigungen erteilen --name=pxc1 pxc

Sie können docker logs pxc1 ausführen, um zu sehen, ob das Protokoll Fehler meldet.

Bei Erfolg können Sie mit Navicat eine Verbindung herstellen, um zu prüfen, ob MySQL erfolgreich gestartet wurde, und anschließend den Slave-Knoten installieren, nachdem er gestartet wurde.

172.9.16.41-Knoten

docker run -d -p 3306:3306 --net=swarm_mysql \
-e MYSQL_ROOT_PASSWORD=asdw@123 \
-e CLUSTER_NAME=pxc_cluster \
-e XTRABACKUP_PASSWORD=asdw@123 \
-v /home/pxc_data:/var/lib/mysql \
-v /home/pxc_cert:/Zertifikat \
-v /home/pxc_config/:/etc/percona-xtradb-cluster.conf.d \
-e CLUSTER_JOIN=pxc1 \
--privileged --name=pxc2 pxc

Im Vergleich zum Obigen gibt es hier einen weiteren Satz -e CLUSTER_JOIN=pxc1 , was bedeutet, dass pxc1 verbunden wird. Woher kann die zweite Maschine pxc1 kennen? Durch die Bildung des Schwarmclusters können sie miteinander kommunizieren.

172.9.16.42-Knoten

docker run -d -p 3306:3306 --net=swarm_mysql \
-e MYSQL_ROOT_PASSWORD=asdw@123 \
-e CLUSTER_NAME=pxc_cluster \
-e XTRABACKUP_PASSWORD=asdw@123 \
-v /home/pxc_data:/var/lib/mysql \
-v /home/pxc_cert:/Zertifikat \
-v /home/pxc_config/:/etc/percona-xtradb-cluster.conf.d \
-e CLUSTER_JOIN=pxc1 \
--privileged --name=pxc3 pxc

Hinweis: Wenn Sie 8.0+ verwenden, wird auf jeden Fall ein SSL-bezogener Fehler auftreten.

„Fehler:0407008A:rsa-Routinen:RSA_padding_check_PKCS1_type_1:ungültige Polsterung“

Dies liegt daran, dass nach 8.0 SSL für die Verbindung verwendet wird und die drei Maschinen die Konsistenz des Schlüssels aufrechterhalten müssen, um kommunizieren zu können.

Dies ist die offizielle Lösung zum Generieren von Zertifikaten und jeder verwendet denselben Satz. Ich halte es einfach. Ich extrahiere einfach die Datei vom Host-Computer und übertrage sie auf die anderen beiden Computer. Nach dem Überschreiben starte ich sie neu.

Serverschlüssel.pem, Serverzertifikat.pem, Clientschlüssel.pem, Clientzertifikat.pem, ca.pem

scp -r [email protected]:/home/pxc /Benutzer/jafir/Downloads/pxc

Kopieren Sie die Daten von Knoten 40 und löschen Sie alle Dateien außer den 5 Dateien.

scp -r /Benutzer/jafir/Downloads/pxc [email protected]:/home

Laden Sie es zum Überschreiben auf 41 und 42 hoch und starten Sie dann neu.

Erfolg

Wenn alle drei erfolgreich sind, bestätigen Sie erneut.

Der Masterknoten betritt den Container und betritt dann MySQL zur Ansicht

docker exec -it pxc1 sh
mysql -uroot -p
Status wie „wsrep%“ anzeigen; 

Wie erwartet beträgt die Clustergröße hier 3

Docker-Netzwerkinspektion xxx 

Es gibt auch 3 Netzwerke

überprüfen

Sie können mit Navicat auf einer der Maschinen eine Datenbank, eine Tabelle usw. erstellen und sehen, dass alle drei Maschinen synchronisiert sind!

Nginx-Last

Ich habe nginx auf 172.16.9.48 installiert.

Wenn keine nginx.conf-Konfigurationsdatei vorhanden ist, können Sie zunächst eine erstellen und dann die Konfiguration testen

Selbst erstellt /nginx/log /nginx/etc/nginx.conf usw.

docker run -d -name nginx nginx
docker cp nginx:/etc/nginx/nginx.conf kopiere es docker rm -f nginx

Konfigurationsänderung von nginx.conf

Fügen Sie es in der letzten Zeile hinzu, die sich auf derselben Ebene wie http befindet.

Strom {
 Upstream-PXC {
  Server 172.16.9.40:3306;
  Server 172.16.9.41:3306;
  Server 172.16.9.42:3306;
 }
 Server {
  hören Sie 3306;
  Proxy_Passwort pxc;
 }
}
docker run --net=host --name nginx -v /nginx/log/:/var/log/nginx -v /nginx/etc/nginx.conf:/etc/nginx/nginx.conf -d nginx

Anschließend kann Navicat eine Verbindung zur Datenbank herstellen, indem es eine Verbindung zu http://172.16.9.48:3306 herstellt.

Dies ist das Ende dieses Artikels über die Installation eines PXC-Clusters in Docker. Weitere Informationen zur Installation eines PXC-Clusters in Docker 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:
  • Detaillierte Erklärung von Docker-Swarm-Clusterfehlern und Ausnahmen
  • So verwenden Sie Docker Swarm zum Erstellen eines Clusters
  • So erstellen Sie eine RabbitMQ-Clusterumgebung mit Docker
  • Detaillierte Erläuterung der Umgebungskonstruktion von Docker zum Erstellen eines Redis-Clusters
  • So erstellen Sie schnell einen Spark-Cluster mit Docker
  • Detaillierte Erläuterung der Verwendung von Docker zum Erstellen eines verteilten Hadoop-Clusters
  • Docker erstellt ein ELK Docker-Cluster-Protokollsammlungssystem

<<:  Implementierung zum Hinzufügen von Bemerkungsinformationen zu MySQL

>>:  Vue-Vorlagenkonfiguration und Webstorm-Codeformatspezifikationseinstellungen

Artikel empfehlen

Eine kurze Diskussion zu DDL und DML in MySQL

Inhaltsverzeichnis Vorwort 1. DDL 1.1 Datenbankop...

Lösungen für das Problem der Tabellenschachtelung und Rahmenzusammenführung

【Frage】 Wenn die äußere und die innere Tabelle ve...

Automatische Dateisynchronisierung zwischen zwei Linux-Servern

Wenn Server B (172.17.166.11) eingeschaltet oder ...

Vue-Methode zum Überprüfen, ob der Benutzername verfügbar ist

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierte Schritte zur Installation von MySql 5.7.21 unter Linux

Vorwort Die am häufigsten verwendete Datenbank in...

So installieren Sie den Kibana-Tokenizer im Docker-Container

Schritt: 1. Erstellen Sie eine neue Datei docker-...

MySQL-Datenbankoptimierung: Indeximplementierungsprinzip und Nutzungsanalyse

Dieser Artikel veranschaulicht anhand von Beispie...

HarborRestart-Vorgang nach dem Ändern der Konfigurationsdatei

Ich werde nicht viel Unsinn erzählen, schauen wir...

JSONP-domänenübergreifende Simulation der Baidu-Suche

Inhaltsverzeichnis 1. Was ist JSONP 2. JSONP-Cros...

Zusammenfassung der Berechtigungsprobleme bei gespeicherten MySQL-Prozeduren

Ja, gespeicherte MySQL-Prozeduren scheinen sehr s...