Implementierungsschritte zum Erstellen einer MySQL Master-Slave-Replikationsumgebung basierend auf Docker

Implementierungsschritte zum Erstellen einer MySQL Master-Slave-Replikationsumgebung basierend auf Docker

1. Einleitung

Die bisherige Programmarchitektur kann folgende Form haben:

Wenn die Programmgröße zunimmt, können wir es auf mehrere Hintergrunddienstinstanzen erweitern, aber es gibt immer noch nur eine Datenbank, sodass der Engpass des Systems immer noch die Datenbank ist. Daher besteht die Hauptaufgabe diesmal darin, die Datenbank zu erweitern. Die Hauptform ist: Erweitern Sie mehrere Datenbankinstanzen, realisieren Sie eine Lese-/Schreibtrennung, weisen Sie der Hauptdatenbank einige Schreibaufgaben zu und verwenden Sie die Unterdatenbank für Leseaufgaben. Dadurch wird die Systemleistung verbessert.

Die geänderte Architektur sieht wie folgt aus:

2. Umgebung Vor dem Bau

Dieses Mal wird Docker zum Erstellen dieser Umgebung verwendet und die verwendete MySQL-Version ist 5.7.13.

docker pull mysql:5.7.13

Die Gesamtstruktur ist:

  • 1 Masterknoten, der als Schreibknoten dient.
  • Zwei Slave-Knoten dienen als Leseknoten.

Starten Sie diese Knoten zunächst separat und ordnen Sie sie unterschiedlichen Ports zu. Verwenden Sie das Datenbankverbindungstool auf diesem Computer, um eine Verbindung herzustellen und zu testen, ob es normal gestartet und verbunden ist.

docker run -p 3307:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.13
docker run -p 3308:3306 --name mysql-slave1 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.13
docker run -p 3309:3306 --name mysql-slave2 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.13

Hier ordne ich den Masterknoten (mysql-master) dem Port 3307 zu und die beiden Slaveknoten (mysql-slave1, 2) den Ports 3308 bzw. 3309 . Legen Sie dann das MySQL-Root-Passwort auf 123456 fest.

Anschließend können Sie Tools wie navicat verwenden, um eine Verbindung herzustellen und MySQL zu testen.

Tragen Sie diese Knoten entsprechend ein und bearbeiten Sie die Konfigurationsdateien.

docker exec -it mysql-master /bin/bash

Ich verwende den Namen, um den Container einzugeben. Sie können auch nach der ID auswählen, d. h. docker exec -it 對應容器的id /bin/bash .

Da die Programme vi und vim nicht vorinstalliert sind, müssen Sie beim Herunterladen den Befehl apt update ausführen und dann aus fremden Quellen herunterladen. Die Geschwindigkeit ist aus bekannten Gründen sehr langsam. Ich habe die Downloadquelle auf eine inländische Quelle geändert.

Wechseln Sie in den Ordner /etc/apt und sichern Sie zunächst die Originaldateien:

mv Quellen.Liste Quellen.Liste.bak

Anschließend erstellen Sie mit folgendem Befehl eine neue Datei und geben den Inhalt ein:

echo deb http://mirrors.aliyun.com/ubuntu/ xenial Haupteingeschränktes Universum Multiversum > Quellenliste

Dann führen wir apt update und andere Operationen aus und installieren schließlich vim .

3. Führen Sie die Master-Slave-Konfiguration durch

Masterknotenkonfiguration

Rufen Sie nach dem Aufrufen des Masterknotencontainers den Ordner /etc/mysql auf. Dort befindet sich eine Datei my.cnf , die hauptsächlich geändert wurde.

Bearbeiten Sie diese Datei, suchen Sie nach [mysqld] und fügen Sie darunter den folgenden Befehl hinzu:

[mysqld]
...
...
## Eindeutige Nummer Server-ID=101
## Dies ist das Schlüsselkonfigurationselement log-bin=mysql-bin

Nachdem die Konfiguration abgeschlossen ist, müssen Sie den MySQL-Dienst neu starten, damit die Konfiguration wirksam wird. Verwenden Sie zum Neustarten service mysql restart . Nach Abschluss des Neustarts wird der MySQL-Container geschlossen. Wir müssen auch den Container docker restart mysql-master starten.

Slave-Konfiguration

Wie beim Masterknoten bearbeiten Sie die Datei /etc/mysql/my.cnf

[mysqld]
...
...
## Eindeutige Nummer Server-ID = 103
## Auswählen. Wenn Sie diesen Knoten als Masterknoten anderer Knoten verwenden müssen, müssen Sie # log-bin = mysql-bin hinzufügen.

Verknüpfen von Master- und Slave-Knoten

Master-Knoten

Geben Sie MySQL mysql -u root -p im Masterknotencontainer ein. Das Passwort lautet 123456 und wird beim Starten des Containers festgelegt.

Führen Sie nach dem Aufrufen von MySQL show master status; “ aus:

Von hier erhalten wir die Werte von zwei Informationen, File und Position , die mysql-bin.000001 bzw. 154 sind.

Slave-Knoten

Geben Sie MySQL ein und führen Sie den folgenden Befehl aus:

Ändere Master in Master_Host='***', Master_Port=3306, Master_User='Root', Master_Password='123456', Master_Log_File='****', Master_Log_Pos= ***;

Erklären Sie, was diese Parameter jeweils bedeuten:

master_host: Die IP-Adresse des Masterknotens. Sie können auf diesem Computer den folgenden Befehl verwenden, um die IP-Adresse des Containers anzuzeigen.

docker inspect --format='{{.NetworkSettings.IPAddress}}' Containername | Container-ID

master_port: die Portnummer von MySQL, nicht die extern zugeordnete Portnummer

master_user: Benutzer in MySQL, muss über Berechtigungen verfügen, ich habe direkt root verwendet, Sie können auch einen neuen Benutzer erstellen

master_password: MySQL-Kontokennwort, das für die Synchronisierung verwendet wird

master_log_file: Die für die Synchronisierung verwendete Datei, d. h. die vom Masterknoten abgefragte Datei. Hier bin ich mysql-bin.000001

master_log_pos: Die Position, an der die Binlog-Datei synchronisiert wird, also die Position, die vom Masterknoten abgefragt wird. In meinem Fall ist es 154

Führen Sie nach der Ausführung des Befehls jetzt show slave status \G; im MySQL-Terminal aus, um den Master-Slave-Synchronisierungsstatus anzuzeigen.

Wir können hier die Konfigurationsinformationen überprüfen und dann sehen, dass die beiden Attribute slave_io_running und slave_sql_running beide „Nein“ sind, was bedeutet, dass sie geschlossen sind.

Wir können start slave ausführen, um die Master-Slave-Replikation zu starten. Führen Sie nach der Ausführung show slave status \G; erneut aus, um zu sehen, dass beide Attribute zu yes geworden sind, was bedeutet, dass die Master-Slave-Replikation aktiviert wurde.

Wenn der Start fehlschlägt, können wir überprüfen, ob eine Netzwerkverbindung besteht, ob das für die Synchronisierung verwendete MySQL-Kennwort korrekt ist und ob der Name und der Speicherort der Synchronisierungsdatei korrekt sind!

prüfen

Wir können eine neue Datenbank in der Master-Datenbank erstellen. Wenn wir die Existenz dieser Datenbank in der Slave-Datenbank sehen, bedeutet dies, dass die Master-Slave-Synchronisierung abgeschlossen ist.

4. Kaskadenkonfiguration

Ich möchte einen weiteren Sicherungsknoten hinzufügen, und dieser Knoten wird vom Knoten Slave1 gesichert, d. h. der Knoten Slave1 dient als Masterknoten des Sicherungsknotens. Dadurch entsteht eine Kaskadenbeziehung von Master->Slave->Backup.

Ich habe ursprünglich die obigen Schritte befolgt und es zur my.cnf des Slaves hinzugefügt

log-bin=mysql-slave-bin #Zur Unterscheidung habe ich den Dateinamen geändert

Führen Sie es dann auf dem Backup-Knoten aus

Ändere Master in master_host='***', master_user='root', master_password='123456', master_port=3306, master_log_file='****', master_log_pos= ***;

Der Befehl wird durch die IP und andere Attribute des entsprechenden Slave-Knotens ersetzt. Es stellt sich heraus, dass es nicht funktioniert. Nach der Änderung des Primärknotens wird der Backup-Knoten nicht geändert!

Also begann ich mit der Untersuchung und stellte fest, dass in der Binlog-Datei im Slave-Knoten keine Aufzeichnungen geänderter Informationen vorhanden waren und der Sicherungsknoten die Änderungen in dieser Datei überwachte. Wenn sich diese Datei nicht geändert hätte, hätte es auch keine Änderungen im Sicherungsknoten gegeben. Lassen Sie mich das ein wenig ausführen. Das Binärprotokoll von MySQL zeichnet alle unsere Änderungen auf, sodass wir theoretisch Binärprotokoll verwenden können, um den Datenbankinhalt jederzeit wiederherzustellen.

Daher stellt sich die Frage, wie das Binlog-Protokoll des Slave-Knotens aufgezeichnet wird, nachdem sich der Master-Knoten geändert hat.

Wir können beim Bearbeiten der Datei my.cnf eine weitere Zeile hinzufügen: log_slave_updates=1 , damit der Slave das Binärprotokoll nach Erhalt der Synchronisierung vom Master auch in sein eigenes Binlog schreibt.

Dies ist möglich. Nachdem der Masterknoten geändert wurde, werden auch der Slaveknoten und der Backupknoten geändert. Die Daten des Backupknotens werden vom Slaveknoten gesichert.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • So implementieren Sie eine MySQL-Master-Slave-Replikation basierend auf Docker
  • Detaillierte Erläuterung der Docker-Methode zur Implementierung der MySql-Master-Slave-Replikation (praktischer Teil)
  • Detaillierte Erläuterung zur Verwendung von Docker zum schnellen Erstellen einer MySQL-Master-Slave-Replikationsumgebung
  • Verwenden von Docker-Containern zum Erstellen einer MySql-Master-Slave-Replikation
  • Tutorial zum Erstellen einer Master-Slave-Replikationsarchitektur für MySQL 5.7 Docker
  • Beispielcode zur Implementierung der MySQL-Master-Slave-Replikation in Docker

<<:  Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.17

>>:  JavaScript Canvas Tetris-Spiel

Artikel empfehlen

Einführung in die Vue-Grundlagen: Installation und Verwendung von Vuex

Inhaltsverzeichnis 1. Was ist vuex 2. Installatio...

jQuery-Plugin zum Erreichen eines Bildvergleichs

In diesem Artikelbeispiel wird der spezifische Co...

Umfassende Analyse von Prototypen, Prototypobjekten und Prototypketten in js

Inhaltsverzeichnis Prototypen verstehen Prototypo...

So erstellen Sie ein Drag & Drop-Plugin mit benutzerdefinierten Vue-Direktiven

Wir alle kennen die Drag-and-Drop-Funktion von HT...

Docker-Installationsschritte für Redmine

Laden Sie das Image herunter (optionaler Schritt,...

Warum wird UTF-8 in MySQL nicht empfohlen?

Ich bin kürzlich auf einen Fehler gestoßen, als i...

Detaillierte Erläuterung des auf Python basierenden MySQL-Replikationstools

Inhaltsverzeichnis 1. Einleitung Zweites Training...

So konfigurieren Sie einen Pfadalias für das React-Scaffolding

Die React-Version beim Schreiben dieses Artikels ...

So fügen Sie Nginx zu den Systemdiensten in CentOS7 hinzu

Einführung Nach dem Kompilieren, Installieren und...

Vue implementiert scrollbaren Popup-Fenstereffekt

In diesem Artikel wird der spezifische Code von V...

Beispielcode zum Generieren eines QR-Codes mit js

Vor einiger Zeit musste das Projekt die Funktion ...