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

So implementieren Sie verschiebbare Komponenten in Vue

In diesem Artikel erfahren Sie, wie Sie ziehbare ...

Zwei Möglichkeiten zum Verwalten von Volumes in Docker

Im vorherigen Artikel habe ich die Grundkenntniss...

Die beste Erklärung zu HTTPS

Guten Morgen allerseits, ich habe meinen Artikel ...

Best Practices zur Implementierung einfacher Jira-Projekte mit React+TS

Eine Reihe von Projekten für die Ausbildung reagi...

So starten Sie eine Transaktion in MySQL

Vorwort In diesem Artikel wird hauptsächlich besc...

Ein Artikel, der Ihnen ein tiefes Verständnis von Mysql-Triggern vermittelt

Inhaltsverzeichnis 1. Wenn beim Einfügen oder Änd...

Auch Webdesigner müssen Web-Coding lernen

Oftmals wird nach der Fertigstellung eines Webdes...

WeChat Mini-Programm implementiert den Likes-Dienst

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

Sieben Prinzipien eines guten Designers (2): Farbgebrauch

<br />Vorheriger Artikel: Sieben Prinzipien ...

Die HTML-Tag-ID kann eine Variable sein

<table id=" <%=var1%>">, der...