Nachteile einer Single-Node-Datenbank
Leistungsengpass bei MySQL mit einem einzigen Knoten Das Geschäftsvolumen der WeChat-Rotumschläge zum Frühlingsfest 2016 war riesig und die Datenbank stand unter großer Belastung Gängige MySQL-Clusterlösungen Bei der Einführung der MySQL-Clusterlösung wird die Verwendung von PXC empfohlen, da eine schwache Konsistenz zu Problemen führt. Beispielsweise zeigt die Datenbank von Knoten A an, dass mein Kauf erfolgreich war, aber die Datenbank von Knoten B zeigt an, dass er nicht erfolgreich war. Das ist problematisch. Die PXC-Lösung meldet Ihnen den Erfolg erst, wenn alle Knoten erfolgreich geschrieben wurden. Es handelt sich um eine bidirektionale Synchronisierung mit Lese- und Schreibzugriff, die Replikation jedoch ist unidirektional. Zur Kommunikation sind Ports zwischen Datenbanken verschiedener Knoten geöffnet. Wenn dieser Port von der Firewall geschlossen ist, wird PXC die Synchronisierung nicht erfolgreich durchführen und Ihnen keine Erfolgsmeldung zurückgeben. Replikation
PXC (Percona XtraDB-Cluster)
Es wird empfohlen, dass PXC PerconaServer verwendet (eine verbesserte Version von MySQL mit deutlich verbesserter Leistung). Die starke Datenkonsistenz von PXC Synchrone Replikation, Transaktionen werden entweder gleichzeitig an alle Clusterknoten übermittelt oder nicht übermittelt. Die Replikation erfolgt asynchron, wodurch keine Datenkonsistenz garantiert werden kann. Einführung in die PXC-Clusterinstallation Installieren Sie den PXC-Cluster in Docker, indem Sie das offizielle PXC-Image im Docker-Repository verwenden: https://hub.docker.com/r/percona/percona-xtradb-cluster 1. Laden Sie das PXC-Image aus dem offiziellen Docker-Repository herunter: Docker-Pull Percona/Percona-XtraDB-Cluster Oder lokal installieren Docker laden < /home/soft/pxc.tar.gz Installation abgeschlossen: [root@localhost ~]# Docker-Pull Percona/Percona-Xtradb-Cluster Standard-Tag verwenden: latest Es wird versucht, das Repository docker.io/percona/percona-xtradb-cluster abzurufen ... aktuell: Abrufen von docker.io/percona/percona-xtradb-cluster ff144d3c0ab1: Ziehen abgeschlossen eafdff1524b5: Pull abgeschlossen c281665399a2: Ziehen abgeschlossen c27d896755b2: Pull abgeschlossen c43c51f1cccf: Ziehen abgeschlossen 6eb96f41c54d: Ziehen abgeschlossen 4966940ec632: Ziehen abgeschlossen 2bafadcea292: Ziehen abgeschlossen 3c2c0e21b695: Ziehen abgeschlossen 52a8c2e9228e: Ziehen abgeschlossen f3f28eb1ce04: Ziehen abgeschlossen d301ece75f56: Ziehen abgeschlossen 3d24904bec3c: Ziehen abgeschlossen 1053c2982c37: Ziehen abgeschlossen Zusammenfassung: sha256:17c64dacbb9b62bd0904b4ff80dd5973b2d2d931ede2474170cbd642601383bd Status: Neueres Image für docker.io/percona/percona-xtradb-cluster:latest heruntergeladen [root@localhost ~]# Docker-Bilder REPOSITORY TAG BILD ID ERSTELLT GRÖSSE docker.io/percona/percona-xtradb-cluster latest 70b3670450ef vor 2 Monaten 408 MB 2. Benennen Sie das Bild um: (der Name ist zu lang, benennen Sie es um) Docker-Tag Percona/Percona-XtraDB-Cluster: neuestes pxc Anschließend kann das Originalbild gelöscht werden [root@localhost ~]# Docker-Bilder REPOSITORY TAG BILD ID ERSTELLT GRÖSSE docker.io/percona/percona-xtradb-cluster latest 70b3670450ef vor 2 Monaten 408 MB pxc latest 70b3670450ef vor 2 Monaten 408 MB docker.io/java latest d23bdf5b1b1b vor 2 Jahren 643 MB [root@localhost ~]# docker rmi docker.io/percona/percona-xtradb-cluster Ohne Tag: docker.io/percona/percona-xtradb-cluster:latest Nicht markiert: docker.io/percona/percona-xtradb-cluster@sha256:17c64dacbb9b62bd0904b4ff80dd5973b2d2d931ede2474170cbd642601383bd [root@localhost ~]# Docker-Bilder REPOSITORY TAG BILD ID ERSTELLT GRÖSSE pxc latest 70b3670450ef vor 2 Monaten 408 MB docker.io/java latest d23bdf5b1b1b vor 2 Jahren 643 MB 3. Erstellen Sie aus Sicherheitsgründen ein internes Docker-Netzwerk für den PXC-Cluster # Erstellen Sie ein Netzwerksegment docker network create --subnet=172.18.0.0/24 net1 # Zeigen Sie das Netzwerksegment Docker Network Inspection Net1 an # Löschen Sie das Netzwerksegment# docker network rm net1 4. Erstellen Sie ein Docker-Volume: # Erstellen Sie ein Datenvolumen mit dem Namen v1, --name kann weggelassen werden docker volume create --name v1 Datenvolumen anzeigen Docker-Inspektion v1 Ergebnis: [root@localhost ~]# Docker-Inspektion v1 [ { "Treiber": "lokal", "Beschriftungen": {}, "Mountpoint": "/var/lib/docker/volumes/v1/_data",#Dies ist der Speicherort auf dem Hostcomputer"Name": "v1", "Optionen": {}, "Geltungsbereich": "lokal" } ] Löschen eines Datenvolumens Docker-Volume RM v1 Erstellen Sie 5 Datenvolumes # Erstellen Sie 5 Datenvolumes docker volume create --name v1 Docker-Volume erstellen --Name v2 Docker-Volume erstellen --Name v3 Docker-Volume erstellen --Name v4 Docker-Volume erstellen --Name v5 5. Erstellen Sie 5 PXC-Container: # Erstellen Sie 5 PXC-Container, um einen Cluster zu bilden. # Der erste Knoten docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -v v1:/var/lib/mysql --name=node1 --network=net1 --ip 172.18.0.2 pxc # Warten Sie nach dem Start des ersten Knotens einen Moment, bis MySQL gestartet ist. # Zweiter Knoten Docker-Ausführung -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql --name=node2 --net=net1 --ip 172.18.0.3 pxc # Der dritte Knoten docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v3:/var/lib/mysql --name=node3 --net=net1 --ip 172.18.0.4 pxc # Der vierte Knoten docker run -d -p 3309:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v4:/var/lib/mysql --name=node4 --net=net1 --ip 172.18.0.5 pxc # Der fünfte Knoten docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v5:/var/lib/mysql --name=node5 --net=net1 --ip 172.18.0.6 pxc Überprüfen: [root@localhost ~]# docker ps CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN f4708ce32209 pxc "/entrypoint.sh " Vor etwa einer Minute Aktiv Vor etwa einer Minute 4567-4568/tcp, 0.0.0.0:3309->3306/tcp node4 bf612f9586bc pxc "/entrypoint.sh " vor 17 Minuten Aktiv seit 17 Minuten 4567-4568/tcp, 0.0.0.0:3310->3306/tcp node5 9fdde5e6becd pxc "/entrypoint.sh " vor 17 Minuten Aktiv seit 17 Minuten 4567-4568/tcp, 0.0.0.0:3308->3306/tcp node3 edd5794175b6 pxc "/entrypoint.sh " vor 18 Minuten Aktiv seit 18 Minuten 4567-4568/tcp, 0.0.0.0:3307->3306/tcp node2 33d842de7f42 pxc "/entrypoint.sh " vor 21 Minuten Aktiv seit 21 Minuten 0.0.0.0:3306->3306/tcp, 4567-4568/tcp node1 Die Notwendigkeit des Datenbank-Lastausgleichs Obwohl ein Cluster erstellt wird, wird kein Datenbanklastenausgleich verwendet. Ein einzelner Knoten verarbeitet alle Anforderungen, was zu hoher Last und schlechter Leistung führt. Senden Sie Anfragen gleichmäßig an jeden Knoten im Cluster.
Vergleich von Lastausgleichs-Middleware Beim Lastenausgleich wird zunächst ein Datenbankcluster verwendet. Wenn fünf Cluster hinzugefügt werden und jede Anforderung an den ersten Cluster gerichtet ist, kann die erste Datenbank ausfallen. Daher ist es eine bessere Lösung, Anforderungen an verschiedene Knoten zu richten. Dies erfordert Middleware zur Weiterleitung. Zu den besseren Middlewares gehören nginx und haproxy. Nginx unterstützt Plug-Ins, hat aber nur das TCP/IP-Protokoll unterstützt. haproxy ist eine alte Middleware-Weiterleitungssoftware. Wenn Sie Haproxy verwenden möchten, können Sie das Image von der offiziellen Website herunterladen und anschließend das Image konfigurieren (schreiben Sie die Konfigurationsdatei selbst, da dieses Image keine Konfigurationsdatei hat. Ordnen Sie nach der Konfiguration den Ordner beim Ausführen des Images zu. Die Konfigurationsdatei öffnet 3306 (Datenbankanforderung und greift dann basierend auf der Überprüfung der Heartbeat-Erkennung auf verschiedene Datenbanken zu, 8888 überwacht den Datenbankcluster)). Die Konfigurationsdatei legt Benutzer fest (Benutzer führen eine Heartbeat-Erkennung in der Datenbank durch, bestimmen, welcher Datenbankknoten inaktiv ist, und greifen dann auf die inaktiven Knoten zu), verschiedene Algorithmen (wie Round-Robin-Training), die maximale Anzahl von Verbindungen, die Zeit usw. sowie die Clusterüberwachung. Führen Sie das Image aus, nachdem die Konfigurationsdatei geschrieben wurde. Geben Sie nach erfolgreicher Ausführung des Images die Startkonfigurationsdatei des Containers ein. Tatsächlich gibt haprocy auch eine Datenbankinstanz zurück (diese speichert jedoch keine Daten, sondern leitet nur Anfragen weiter), die zum Überprüfen anderer Knoten verwendet wird. Installieren Sie Haproxy 1. Ziehen Sie das Haproxy-Image aus dem Docker-Repository: https://hub.docker.com/_/haproxy Docker zieht Haproxy [root@localhost ~]# Docker-Bilder REPOSITORY TAG BILD ID ERSTELLT GRÖSSE docker.io/haproxy latest 11fa4d7ff427 vor 11 Tagen 72,2 MB 2. Erstellen Sie eine Haproxy-Konfigurationsdatei. Zur Verwendung durch Haproxy-Container (im Docker wird keine Konfigurationsdatei generiert, wir müssen die Konfigurationsdatei selbst auf dem Hostcomputer erstellen) # Verwenden Sie beim Starten des Containers die Verzeichniszuordnungstechnologie, damit der Container die Konfigurationsdatei touch /home/soft/haproxy/haproxy.cfg lesen kann. haproxy.cfg # haproxy.cfg weltweit #Arbeitsverzeichnis chroot /usr/local/etc/haproxy #Protokolldatei, verwenden Sie das lokale Protokollgerät (/var/log/local5) im rsyslog-Dienst, Ebeneninfo Protokoll 127.0.0.1 local5 info #Daemon-Prozess, der Daemon ausführt Vorgabewerte globales Protokoll Modus http #Protokollformatoption httplog #Zeichnen Sie den Heartbeat-Erkennungsdatensatz des Lastausgleichs nicht in der Protokolloption dontlognull auf #Verbindungstimeout (Millisekunden) Timeout Verbindung 5000 #Client-Timeout (Millisekunden) Timeout-Client 50000 #Server-Timeout (Millisekunden) Timeout-Server 50000 #Überwachungsschnittstelle listen admin_stats #Überwachung der Schnittstellenzugriffs-IP und der Portbindung 0.0.0.0:8888 #Zugriffsprotokollmodus http #URI relative Adresse Statistik URI /dbs #Statistikbericht formatstats realm Global\ statistics #Login-Kontoinformationen Statistiken Auth Admin:abc123456 #Datenbank-Lastausgleich, Proxy-MySQL abhören #Zugriffs-IP und Port-Bind 0.0.0.0:3306 #Netzwerkprotokollmodus TCP #Lastausgleichsalgorithmus (Round-Robin-Algorithmus) # Polling-Algorithmus: Roundrobin #Gewichtsalgorithmus: static-rr # Algorithmus für geringste Verbindung: leastconn #Quell-IP-Algorithmus anfordern: Quelle Rundenturnier #Protokollformatoption tcplog #Erstellen Sie einen Haproxy-Benutzer ohne Berechtigungen in MySQL und legen Sie das Kennwort leer. Haproxy verwendet dieses Konto, um die Heartbeat-Erkennung für die MySQL-Datenbankoption mysql-check user haproxy durchzuführen. Server MySQL_1 172.18.0.2:3306 Gewicht prüfen 1 maxconn 2000 Server MySQL_2 172.18.0.3:3306 Gewicht prüfen 1 maxconn 2000 Server MySQL_3 172.18.0.4:3306 Gewicht prüfen 1 maxconn 2000 Server MySQL_4 172.18.0.5:3306 Gewicht prüfen 1 maxconn 2000 Server MySQL_5 172.18.0.6:3306 Gewicht prüfen 1 maxconn 2000 #Verwenden Sie Keepalive, um tote Links zu erkennen Option tcpka 3. Erstellen Sie ein leeres Passwort und einen nicht privilegierten Benutzer haproxy im Datenbankcluster, damit Haproxy eine Heartbeat-Erkennung für die MySQL-Datenbank durchführen kann Erstellen Sie den Benutzer „haproxy“@„%“, identifiziert durch „“; 4. Erstellen Sie einen Haproxy-Container (Name=h1 für hohe Verfügbarkeit) # Hier müssen Sie --privileged hinzufügen docker run -it -d -p 4001:8888 -p 4002:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h1 --net=net1 --ip 172.18.0.7 --privileged haproxy 5. Geben Sie den Container ein docker exec -it h1 bash 6. Starten Sie Haproxy im Container Bash haproxy -f /usr/local/etc/haproxy/haproxy.cfg Als Nächstes können Sie die Haproxy-Überwachungsschnittstelle im Browser öffnen, Port 4001 und der Benutzername admin und das Passwort abc123456 sind in der Konfigurationsdatei definiert. Zu diesem Zeitpunkt hängen wir einen Docker-Knoten manuell auf und sehen uns die Änderungen an (wir werden feststellen, dass er als aufgehängt angezeigt wird). 8. Haproxy speichert keine Daten, es leitet sie nur weiter. Sie können eine Haproxy-Verbindung in der Datenbank herstellen, Port 4002, Benutzername und Passwort sind Benutzername und Passwort des Datenbankclusters Warum Dual-Machine-Hot-Standby verwenden? Single-Node-Haproxy hat keine hohe Verfügbarkeit und muss redundant ausgelegt sein. Duale Maschinen bedeuten zwei Anforderungsverarbeitungsprogramme, z. B. zwei Haproxy. Wenn eines ausfällt, kann das andere übernehmen. Unter Hot-Standby verstehe ich Keepalive. Installieren Sie Keepalive im Haproxy-Container. Virtuelle IP-Adresse Das Linux-System kann mehrere IP-Adressen in einer Netzwerkkarte definieren und diese Adressen mehreren Anwendungen zuweisen. Diese Adressen sind virtuelle IPs. Die wichtigste Technologie der Hot-Standby-Lösung für zwei Maschinen von Haproxy ist die virtuelle IP. Der Schlüssel ist die virtuelle IP. Definieren Sie eine virtuelle IP und installieren Sie dann das Keepalive-Image jeweils auf zwei Haproxy-Servern. Da Haproxy auf dem Ubuntu-System läuft, wird für die Installation apt-get verwendet. Die Funktion von Keepalive besteht darin, die virtuelle IP zu beschlagnahmen. Die beschlagnahmte IP ist der primäre Server, die nicht beschlagnahmte IP ist der Backup-Server. Dann führen die beiden Keepalive-Server eine Heartbeat-Erkennung durch (d. h., sie erstellen einen Benutzer, um zu testen, ob die andere Partei noch aktiv ist. Es gibt auch eine Heartbeat-Erkennung zwischen MySQL-Clustern). Wenn es auflegt, wird die IP beschlagnahmt. Bevor Sie Keepalive starten, müssen Sie daher zunächst die Konfigurationsdatei bearbeiten und Angaben dazu machen, wie das Preemption-Verfahren durchgeführt wird, wie das Gewicht lautet, was die virtuelle IP-Adresse ist und was der erstellte Benutzer übermittelt. Nach der Konfiguration und dem Start können Sie durch Pingen prüfen, ob alles korrekt ist, und dann die virtuelle IP der LAN-IP zuordnen. Verwenden von Keepalived zum Implementieren von Hot-Standby
Нaproxy-Hot-Standby-Lösung für zwei Maschinen Erstellen Sie zwei Haproxy in Docker und erfassen Sie die virtuelle IP in Docker über Keepalived Auf die virtuelle IP in Docker kann vom externen Netzwerk aus nicht zugegriffen werden. Daher müssen Sie den Host Keepalived verwenden, um sie einer virtuellen IP zuzuordnen, auf die vom externen Netzwerk aus zugegriffen werden kann. Installieren Sie Keepalived 1. Rufen Sie den Haproxy-Container auf und installieren Sie Keepalived: $ docker exec -it h1 bash apt-get-Aktualisierung apt-get installieren keepalived 2. Keepalived-Konfigurationsdatei (Keepalived.conf): # vim /etc/keepalived/keepalived.conf vrrp_instance VI_1 { Status MASTER # Die Identität von Keepalived (der MASTER-Dienst muss die IP beschlagnahmen, und der BACKUP-Server wird die IP nicht beschlagnahmen). Schnittstelle eth0 # Docker-Netzwerkkartengerät, auf dem sich die virtuelle IP befindet virtual_router_id 51 # Virtuelle Routing-Kennung, die virtuellen Routing-Kennungen von MASTER und BACKUP müssen konsistent sein. Von 0 bis 255 Priorität 100 # MASTER hat ein höheres Gewicht als BACKUP. Je größer die Zahl, desto höher die Priorität. advert_int 1 # Das Zeitintervall für die Synchronisierungsprüfung zwischen MASTER- und BACKUP-Knoten in Sekunden muss zwischen Master und Backup konsistent sein. Authentifizierung { # Authentifizierungsmethode für Master-Slave-Server. Für eine normale Kommunikation müssen Master und Slave dasselbe Passwort verwenden. auth_type PASS Auth_Passwort 123456 } virtual_ipaddress { #Virtuelle IP. Sie können mehrere virtuelle IP-Adressen festlegen, eine 172.18.0.201 pro Zeile } } 3. Starten Sie Keepalived Dienst Keepalived Start Nach dem erfolgreichen Start können Sie mit ip a überprüfen, ob die virtuelle IP in der Netzwerkkarte erfolgreich ist. Darüber hinaus können Sie die virtuelle IP 172.18.0.201 im Hostcomputer erfolgreich anpingen. 4. Sie können die obigen Schritte befolgen, um einen weiteren Haproxy-Container zu erstellen. Beachten Sie, dass der zugeordnete Host-Port nicht wiederholt werden kann und die Haproxy-Konfiguration dieselbe ist. Installieren Sie dann Keepalived im Container. Die Konfiguration ist grundsätzlich dieselbe (das Prioritätsgewicht kann geändert werden). Auf diese Weise wird grundsätzlich die Haproxy-Hot-Standby-Lösung für zwei Maschinen implementiert. Der Befehl lautet wie folgt: Erstellen Sie einen Haproxy-Container (Name=h2 für hohe Verfügbarkeit) # Hier müssen Sie --privileged hinzufügen docker run -it -d -p 4003:8888 -p 4004:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h2 --net=net1 --ip 172.18.0.8 --privileged haproxy Betreten des Containers docker exec -it h2 bash Starten Sie Haproxy im Container Bash haproxy -f /usr/local/etc/haproxy/haproxy.cfg Als Nächstes können Sie die Haproxy-Überwachungsschnittstelle im Browser öffnen, Port 4003. Der Benutzername admin und das Passwort abc123456 sind in der Konfigurationsdatei definiert. Installieren Sie Keepalived: apt-get-Aktualisierung apt-get installieren keepalived Keepalived-Konfigurationsdatei (Keepalived.conf): # vim /etc/keepalived/keepalived.conf vrrp_instance VI_1 { Status MASTER # Die Identität von Keepalived (der MASTER-Dienst muss die IP beschlagnahmen, und der BACKUP-Server wird die IP nicht beschlagnahmen). Schnittstelle eth0 # Docker-Netzwerkkartengerät, auf dem sich die virtuelle IP befindet virtual_router_id 51 # Virtuelle Routing-Kennung, die virtuellen Routing-Kennungen von MASTER und BACKUP müssen konsistent sein. Von 0 bis 255 Priorität 100 # MASTER hat ein höheres Gewicht als BACKUP. Je größer die Zahl, desto höher die Priorität. advert_int 1 # Das Zeitintervall für die Synchronisierungsprüfung zwischen MASTER- und BACKUP-Knoten in Sekunden muss zwischen Master und Backup konsistent sein. Authentifizierung { # Authentifizierungsmethode für Master-Slave-Server. Für eine normale Kommunikation müssen Master und Slave dasselbe Passwort verwenden. auth_type PASS Auth_Passwort 123456 } virtual_ipaddress { #Virtuelle IP. Sie können mehrere virtuelle IP-Adressen festlegen, eine 172.18.0.201 pro Zeile } } Starten Sie Keepalived Dienst Keepalived Start Nach dem erfolgreichen Start können Sie mit ip a überprüfen, ob die virtuelle IP in der Netzwerkkarte erfolgreich ist. Darüber hinaus können Sie die virtuelle IP 172.18.0.201 im Hostcomputer erfolgreich anpingen. Implementierung des externen Netzwerkzugriffs auf virtuelle IP Sehen Sie sich die aktuelle LAN-IP-Zuweisung an: yum installiere nmap -y nmap -sP 192.168.1.0/24 Installieren Sie Keepalived auf dem Host yum installiere Keepalived Die Keepalived-Konfiguration des Hosts ist wie folgt (/etc/keepalived/keepalived.conf): vrrp_instance VI_1 { Zustand MEISTER #Dies ist die Netzwerkkarte des Hosts. Mit ip a können Sie überprüfen, welche Schnittstelle ens33 die aktuell auf Ihrem Computer verwendete Netzwerkkarte ist. virtuelle_Router_ID 100 Priorität 100 Anzeige_int 1 Authentifizierung Authentizitätstyp PASS Auth_Passwort 1111 } virtuelle_IP-Adresse { #Dies ist eine virtuelle IP-Adresse auf einem angegebenen Host-Rechner. Sie muss sich im selben Netzwerksegment wie die Netzwerkkarte des Host-Rechners befinden. #Die IP meiner Host-Netzwerkkarte ist 192.168.63.144, daher ist die angegebene virtuelle IP 160 192.168.63.160 } } #Akzeptieren Sie den Port für die Überwachung der Datenquelle. Der Webseitenzugriff verwendet den virtuellen Server 192.168.63.160 8888 { Verzögerungsschleife 3 lb_algo rr lb_kind NAT Persistenzzeitüberschreitung 50 Protokoll TCP # Leiten Sie die empfangenen Daten an das Netzwerksegment und den Port des Docker-Dienstes weiter. Da sie an den Docker-Dienst gesendet werden, müssen die Daten mit den Daten des Docker-Dienstes real_server 172.18.0.201 8888 { übereinstimmen. Gewicht 1 } } #Datenbankdatenport akzeptieren. Der Host-Datenbankport ist 3306, daher muss dieser auch mit dem Host-Datenakzeptanzport virtual_server 192.168.63.160 3306 { übereinstimmen. Verzögerungsschleife 3 lb_algo rr lb_kind NAT Persistenzzeitüberschreitung 50 Protokoll TCP #Ebenso müssen der Port und die IP-Adresse der an den Dienst weitergeleiteten Datenbank mit den Daten im Docker-Dienst real_server 172.18.0.201 3306 { übereinstimmen. Gewicht 1 } } Starten Sie den Keepalived-Dienst Dienst Keepalived Start #Dienst Keepalived-Status #Dienst Keepalived stoppen Danach können andere Computer über die Ports 8888 und 3306 der virtuellen IP 192.168.63.160 auf die entsprechenden Ports 172.18.0.201 im Host-Docker zugreifen. So suspendieren Sie den PXC-Cluster vi /etc/sysctl.conf #Fügen Sie net.ipv4.ip_forward=1 zur Datei systemctl restart network hinzu Dann suspendieren Sie die virtuelle Maschine Hot-Backup-Daten Kaltes Backup
Hot-Backup Beim Hot Backup handelt es sich um eine Datensicherung im laufenden Systembetrieb. Gängige Hot-Backup-Lösungen für MySQL sind LVM und XtraBackup
XtraBackup XtraBackup ist ein Online-Hot-Backup-Tool auf Basis von InnoDB. Es ist Open Source und kostenlos, unterstützt Online-Hot-Backup, benötigt wenig Speicherplatz und kann MySQL-Datenbanken sehr schnell sichern und wiederherstellen.
Voll-Backup und inkrementelles Backup
PXC-Vollsicherung Die Sicherung sollte in einem Container eines PXC-Knotens durchgeführt werden, die Sicherungsdaten sollten jedoch auf der Host-Maschine gespeichert werden. Daher wird die Verzeichniszuordnungstechnologie verwendet. Erstellen Sie zunächst ein neues Docker-Volume: Docker-Volume erstellt Backup Wählen Sie einen PXC-Knoten node1 aus, stoppen und löschen Sie seinen Container und erstellen Sie dann einen node1-Container mit der hinzugefügten Backup-Verzeichniszuordnung neu Docker stoppt Knoten1 docker rm node1 # Datenbankdaten werden im Docker-Volume v1 gespeichert und gehen nicht verloren # Parameteränderungen: # 1. -e CLUSTER_JOIN=node2;Ursprünglich sind andere Knoten dem Cluster über Knoten1 beigetreten. Jetzt wird Knoten1 neu erstellt und Sie müssen einen anderen Knoten auswählen, der dem Cluster beitritt# 2. -v Backup:/Data;Ordnen Sie das Docker-Volume-Backup dem /data-Verzeichnis des Containers zudocker run -d -u root -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node2 -v v1:/var/lib/mysql -v Backup:/Data --network=net1 --ip 172.18.0.2 --name=node1 pxc Installieren Sie docker exec -it node1 bash apt-get-Aktualisierung apt-get installiere percona-xtrabackup-24 Anschließend können Sie mit dem folgenden Befehl eine vollständige Sicherung durchführen. Die gesicherten Daten werden im Verzeichnis mkdir /Daten/Sicherung mkdir /Daten/Backup/voll #Nicht empfohlen, veraltet innobackupex --backup -u root -p abc123456 --target-dir=/data/backup/full xtrabackup --backup -uroot -pabc123456 --target-dir=/data/backup/full In der offiziellen Dokumentation wird nicht mehr die Verwendung Vollständige PXC-Wiederherstellung Die Datenbank kann im laufenden Betrieb gesichert werden, jedoch nicht im laufenden Betrieb wiederhergestellt werden, da es sonst zu Konflikten zwischen Geschäftsdaten und wiederhergestellten Daten kommt. Um beim PXC-Cluster Datensynchronisierungskonflikte zwischen Knoten während des Wiederherstellungsprozesses zu vermeiden, müssen wir zunächst den ursprünglichen Cluster auflösen und die Knoten löschen. Erstellen Sie dann einen neuen Knoten mit einer leeren Datenbank, führen Sie die Wiederherstellung durch und richten Sie schließlich weitere Clusterknoten ein. Vor der Wiederherstellung müssen Sie die im Hot Backup gespeicherten, nicht festgeschriebenen Transaktionen zurücksetzen und MySQL nach der Wiederherstellung neu starten. Stoppen und löschen Sie alle Knoten im PXC-Cluster Docker stoppen Knoten1 Knoten2 Knoten3 Knoten4 Knoten5 Docker RM Knoten1 Knoten2 Knoten3 Knoten4 Knoten5 Docker-Volumen RM V1 V2 V3 V4 V5 Befolgen Sie die vorherigen Schritte, um den Container node1 neu zu erstellen, den Container aufzurufen und eine Kaltwiederherstellung durchzuführen. # Volume erstellen Docker-Volume erstellen v1 # Einen Container erstellen docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -v v1:/var/lib/mysql -v backup:/data --name=node1 --network=net1 --ip 172.18.0.2 pxc # Geben Sie den Container als Root ein docker exec -it -uroot node1 bash # Daten löschen rm -rf /var/lib/mysql/* # Vorbereitungsphase xtrabackup --prepare --target-dir=/data/backup/full/ # Führen Sie eine Kaltwiederherstellung durch xtrabackup --copy-back --target-dir=/data/backup/full/ # Ändern Sie den Besitzer der wiederhergestellten Datenbankdatei chown -R mysql:mysql /var/lib/mysql # Nach dem Verlassen des Containers den Container neu starten docker stop node1 Docker startet Knoten1 Dies ist das Ende dieses Artikels über die Implementierung der Docker-Bereitstellung eines MySQL-Clusters. Weitere relevante Inhalte zur Docker-Bereitstellung eines MySQL-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:
|
<<: Detaillierte Erläuterung der Vue3-Kapselungsfunktion für Nachrichtenaufforderungsinstanzen
>>: Einführung in die MySQL-Gesamtarchitektur
Wenn sich die Daten ändern, wird die DOM-Ansicht ...
In der Yum-Quelle von Centos7 ist standardmäßig k...
Vorwort Der Befehl apt-get ist ein Paketverwaltun...
Die erste Lösung besteht darin, das Bild in ein ö...
Inhaltsverzeichnis 1. Hintergrund des Problems: 2...
Gehen Sie im Hive-Installationsverzeichnis in das...
1. Übersicht Gruppieren nach bedeutet, Daten nach...
Inhaltsverzeichnis SQL verstehen SELECT verstehen...
Wie kann ich überprüfen, ob die Zeitzone des Dock...
In MySQL gibt es eine Funktion namens „group_conc...
Einführung in Jib Jib ist eine von Google entwick...
Inhaltsverzeichnis 1. Konzept 1.1 Definition 1.2 ...
Inhaltsverzeichnis Vorwort Aktiver Rückzug Ausnah...
SQL-Anweisung DROP-TRIGGER WENN EXISTIERT sys_men...
Kürzlich stieß ich auf eine Datenbank mit folgend...