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

Der Unterschied zwischen Docker Run und Start

Der Unterschied zwischen Ausführen und Starten in...

Detaillierte Analyse des Linux-Kernel-Makros container_of

1. Wie oben erwähnt Ich habe dieses Makro gesehen...

Tutorial zum Verbinden und Verwenden von MySQL 8.0 im Maven-Projekt von IDEA

Schauen wir uns zunächst meine grundlegende Entwi...

Tutorial zur Installation und Konfiguration der Centos7-MySQL-Datenbank

1. Systemumgebung Die Systemversion nach dem Yum-...

Beispiele für die Verwendung von DD DT DL-Tags

Normalerweise verwenden wir die Tags <ul><...

7 native JS-Fehlertypen, die Sie kennen sollten

Inhaltsverzeichnis Überblick 1. Bereichsfehler 2....

So implementieren Sie On-Demand-Import und globalen Import in Element-Plus

Inhaltsverzeichnis Import auf Anfrage: Globaler I...

JavaScript zum Erreichen eines dynamischen Farbwechsels der Tabelle

In diesem Artikel wird der spezifische Code für J...