Implementierung der Master-Slave-Replikation im Docker Compose-Deployment

Implementierung der Master-Slave-Replikation im Docker Compose-Deployment

Aufgrund der Einschränkungen der Single-Point-Leistung von Redis und unserem inhärenten Bedarf an Datensicherung bietet Redis Master-Slave-Replikationsdienste.

Dieser Artikel beschreibt die Erstellung eines Master-Dual-Slave-Redis-Dienstes durch Docker Compose.

Konfigurationsanalyse

########################################### REPLIKATION ######################################

# [Slave] Konfiguration der Verbindung zum Master # slaveof 172.25.0.101 6379

# 【Slave】Nur-Lese-Modus# Slave-Nur-Lese-Ja

# 【Slave】Passwort# masterauth <Master-Passwort>

# [Slave] Darf während der Replikation auf Abfragen geantwortet werden? Es können fehlerhafte Daten zurückgegeben werden. # slave-serve-stale-data yes

# [Slave] Die Priorität eines Slaves, der zum Master befördert werden soll. Dies ist nur im Sentinel-Modus wirksam. # Slave-Priorität 100

# 【Slave】Die eigene IP des Slaves wird dem Master gemeldet
# Slave-Announce-IP 5.5.5.5

# 【Slave】Der eigene Port des Slaves wird dem Master gemeldet# slave-announce-port 1234

# 【Slave】Das Intervall zwischen dem Pingen des Slaves an den Master# repl-ping-slave-period 10

# 【Master/Slave】Zeitüberschreitung# repl-timeout 60

# [Master] Diskless bedeutet, dass die zu kopierende RDB-Datei direkt in den Socket geschrieben wird, ohne sie vorher auf der Festplatte zu speichern. repl-diskless-sync no

# [Master] Wenn Diskless aktiviert ist, wird vor der Replikation die angegebene Anzahl von Sekunden gewartet, sodass sich innerhalb des Zeitfensters mehrere Clients verbinden und parallel übertragen können. # repl-diskless-sync-delay 5

# [Master] Gibt an, ob der Nagle-Algorithmus aktiviert werden soll, der den Datenverkehr reduzieren kann, die Synchronisierung jedoch verlangsamt repl-disable-tcp-nodelay no

# [Master] Die Größe des Ringpufferprotokolls, das zum erneuten Verbinden verwendet wird, nachdem der Slave getrennt wurde, um eine vollständige Replikation zu vermeiden. Der Standardwert ist 1 MB
# Repl-Backlog-Größe 1 MB

# 【Master】Wenn der Master alle Slaves für einen bestimmten Zeitraum trennt, löscht der Master den Rückstand
# repl-backlog-ttl 3600

# [Master] Wenn die Anzahl der Slave-Verbindungen kleiner als die angegebene Zahl ist, lehnt der Master alle Schreibvorgänge ab. # min-slaves-to-write 3

# [Master] Wenn die Verzögerung größer als die angegebene Anzahl von Sekunden ist, lehnt der Master alle Schreibvorgänge ab. # min-slaves-max-lag 10

Dienstleistungsbau

Verzeichnisstruktur

Replikation/
├── docker-compose.yml
├── Meister
│ ├── Daten
│ └── redis.conf
├── Sklave1
│ ├── Daten
│ └── redis.conf
└── Sklave2
    ├── Daten
    └── redis.conf

Datei erstellen

Zur einfachen Bedienung wird ein Subnetz definiert und die Ports 6371 (Master), 6372 und 6373 werden freigegeben.

Version: "3"

Netzwerke:
  Redis-Replikation:
    Treiber: Brücke
    ipam:
      Konfiguration:
        - Subnetz: 172.25.0.0/24

Leistungen:
  Master:
    Bild: Redis
    Containername: Redis-Master
    Häfen:
      - „6371:6379“
    Bände:
      – „./master/redis.conf:/etc/redis.conf“
      – „./master/data:/data“
    Befehl: ["redis-server", "/etc/redis.conf"]
    Neustart: immer
    Netzwerke:
      Redis-Replikation:
        IPv4-Adresse: 172.25.0.101

  Sklave1:
    Bild: Redis
    Containername: Redis-Slave-1
    Häfen:
      - „6372:6379“
    Bände:
      – „./slave1/redis.conf:/etc/redis.conf“
      - "./slave1/data:/data"
    Befehl: ["redis-server", "/etc/redis.conf"]
    Neustart: immer
    Netzwerke:
      Redis-Replikation:
        IPv4-Adresse: 172.25.0.102

  Sklave2:
    Bild: Redis
    Containername: Redis-Slave-2
    Häfen:
      - „6373:6379“
    Bände:
      – „./slave2/redis.conf:/etc/redis.conf“
      - "./slave2/data:/data"
    Befehl: ["redis-server", "/etc/redis.conf"]
    Neustart: immer
    Netzwerke:
      Redis-Replikation:
        IPv4-Adresse: 172.25.0.103

Instanzkonfiguration

Master:

Eine Konfiguration ist grundsätzlich nicht notwendig, am einfachsten ist die Angabe eines Ports.

Port 6379
geschützter Modus nein

repl-diskless-sync nein
repl-disable-tcp-nodelay nein

Sklave:

Die Instanzkonfigurationen müssen lediglich konsistent bleiben, da die Subnetze definiert sind und keine Portkonflikte vorliegen.

Port 6379
geschützter Modus nein

Slave von 172.25.0.101 6379
Slave-Nur-Lesen ja
Slave-Serve-Veraltete-Daten ja

Starten des Dienstes

ocker-komponieren -d
Erstellen des Netzwerks „replication_redis-replication“ mit dem Treiber „bridge“
Redis-Slave-1 wird erstellt … fertig
Redis-Master wird erstellt ... fertig
Redis-Slave-2 erstellen ... fertig

Wenn Sie das Master-Protokoll überprüfen, können Sie sehen, dass die Replikationsanforderungen von zwei Slaves akzeptiert wurden:

1:M 18. Aug. 2021 15:50:31.772 * Replik 172.25.0.102:6379 fordert Synchronisierung an
1:M 18. August 2021 15:50:31.772 * Vollständige Neusynchronisierung durch Replik 172.25.0.102:6379 angefordert
1:M 18. Aug. 2021 15:50:31.772 * Replikationsrückstand erstellt, meine neuen Replikations-IDs sind „5d27746f14ee9be9694d794f96de6ba14a669dd1“ und „0 …“
1:M 18. Aug. 2021 15:50:31.772 * Starte BGSAVE für SYNC mit Ziel: Disk
1:M 18. Aug. 2021 15:50:31.773 * Speichern im Hintergrund gestartet durch PID 19
19:C 18. August 2021 15:50:31.777 * DB auf Festplatte gespeichert
19:C 18. August 2021 15:50:31.777 * RDB: 0 MB Speicher durch Copy-on-Write verwendet
1:M 18 Aug 2021 15:50:31.822 * Hintergrundspeichern erfolgreich beendet
1:M 18. Aug. 2021 15:50:31.823 * Synchronisierung mit Replik 172.25.0.102:6379 erfolgreich
1:M 18. Aug. 2021 15:50:32.170 * Replik 172.25.0.103:6379 fordert Synchronisierung an
1:M 18. August 2021 15:50:32.170 * Vollständige Neusynchronisierung durch Replik 172.25.0.103:6379 angefordert
1:M 18. Aug. 2021 15:50:32.170 * Starte BGSAVE für SYNC mit Ziel: Disk
1:M 18. Aug. 2021 15:50:32.171 * Speichern im Hintergrund gestartet durch PID 20
20:C 18. August 2021 15:50:32.175 * DB auf Festplatte gespeichert
20:C 18. August 2021 15:50:32.175 * RDB: 0 MB Speicher durch Copy-on-Write verwendet
1:M 18 Aug 2021 15:50:32.225 * Hintergrundspeichern erfolgreich beendet
1:M 18. Aug. 2021 15:50:32.226 * Synchronisierung mit Replik 172.25.0.103:6379 erfolgreich

Überprüfen Sie das Slave-Protokoll, um den gesamten Prozess der Verbindungsherstellung anzuzeigen:

1:S 18. August 2021 15:50:31.771 * Verbindung zum MASTER 172.25.0.101:6379 wird hergestellt
1:S 18. Aug. 2021 15:50:31.771 * MASTER <-> REPLICA-Synchronisierung gestartet
1:S 18. Aug. 2021 15:50:31.771 * Nicht blockierende Verbindung für SYNC hat das Ereignis ausgelöst.
1:S 18. Aug. 2021 15:50:31.771 * Master hat auf PING geantwortet, die Replikation kann fortgesetzt werden …
1:S 18. Aug. 2021 15:50:31.772 * Teilweise Neusynchronisierung nicht möglich (kein zwischengespeicherter Master)
1:S 18. August 2021 15:50:31.773 * Vollständige Neusynchronisierung vom Master: 5d27746f14ee9be9694d794f96de6ba14a669dd1:0
1:S 18. August 2021 15:50:31.823 * MASTER <-> REPLICA-Synchronisierung: 175 Bytes werden vom Master auf die Festplatte empfangen
1:S 18. Aug. 2021 15:50:31.823 * MASTER <-> REPLICA-Synchronisierung: Alte Daten werden gelöscht
1:S 18. August 2021 15:50:31.823 * MASTER <-> REPLICA-Synchronisierung: DB im Speicher laden
1:S 18. August 2021 15:50:31.828 * RDB wird geladen, erstellt von Version 6.2.5
1:S 18. Aug. 2021 15:50:31.828 * RDB-Alter 0 Sekunden
1:S 18. Aug. 2021 15:50:31.828 * RDB-Speichernutzung bei Erstellung 1,83 Mb
1:S 18. Aug. 2021 15:50:31.829 * MASTER <-> REPLICA-Synchronisierung: Erfolgreich abgeschlossen

prüfen

Melden Sie sich beim Master an und versuchen Sie, einen neuen Schlüssel zu schreiben.

127.0.0.1:6371> Hallo Welt setzen
OK

Melden Sie sich beim Slave an und prüfen Sie, ob er Folgendes lesen kann:

127.0.0.1:6372> hallo bekommen
"Welt"

Der Slave versucht einen Schreibvorgang:

127.0.0.1:6372> Hallo Redis setzen
(Fehler) NUR-LESEN. Sie können nicht auf eine schreibgeschützte Replik schreiben.

Dies ist das Ende dieses Artikels über die Implementierung der Master-Slave-Replikation in der Docker Compose-Bereitstellung. Weitere relevante Inhalte zur Docker Compose Master-Slave-Replikation 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:
  • Detailliertes Beispiel für die schnelle Bereitstellung von Multi-Container-Diensten mit Docker Compose
  • Implementierung der Docker Compose-Mehrcontainerbereitstellung
  • Verwenden von Docker Compose zum Erstellen und Bereitstellen des ElasticSearch-Konfigurationsprozesses

<<:  Die automatische Inkrementierung der Primärschlüssel-ID von MySQL wird auf diese Weise nicht verarbeitet

>>:  Lösung für ungültige obere Ränder von Elementen in Div-Tags

Artikel empfehlen

Implementieren einer benutzerdefinierten Bildlaufleiste mit nativem JS

In diesem Artikelbeispiel wird der spezifische JS...

HTML css js implementiert Tab-Seite Beispielcode

Code kopieren Der Code lautet wie folgt: <html...

MySQL 8.0.11 Installationstutorial mit Bildern und Text

Es gibt viele Tutorials im Internet und sie sind ...

Implementierung des Tomcat-Bereitstellungsprojekts und Integration mit IDEA

Inhaltsverzeichnis 3 Möglichkeiten zum Bereitstel...

So verstehen Sie SELinux unter Linux

Inhaltsverzeichnis 1. Einführung in SELinux 2. Gr...

DOCTYPE Dokumenttypdeklaration (unbedingt lesenswert für Webseiten-Liebhaber)

DOCTYPE-DEKLARATION: Oben auf jeder Seite, die Sie...

Vue implementiert das Umschalten des Anmeldetyps

In diesem Artikelbeispiel wird der spezifische Co...

IIS 7.5 verwendet das URL-Rewrite-Modul, um eine Webseitenumleitung zu erreichen

Wir alle wissen, dass Apache in der Konfiguration...

MySQL 8.0.20 Installations- und Konfigurations-Tutorial unter Docker

Docker installiert MySQL Version 8.0.20 zu Ihrer ...

HTML-Grundlagen - Pflichtlektüre - Umfassendes Verständnis von CSS-Stylesheets

CSS (Cascading Style Sheet) wird zum Verschönern ...

CSS Flex mehrere mehrspaltige Layouts

Grundlegendes dreispaltiges Layout .Container{ An...

Ein MySQL-Migrationsplan und eine praktische Auflistung der Fallstricke

Inhaltsverzeichnis Hintergrund Lösung 1: Alte Dat...