Bringen Sie Ihnen bei, wie Sie in 5 Minuten den Redis-Clustermodus und den Sentinelmodus mit Docker erstellen

Bringen Sie Ihnen bei, wie Sie in 5 Minuten den Redis-Clustermodus und den Sentinelmodus mit Docker erstellen

Wenn Sie aufgefordert werden, einen Sentinel- und Cluster-Modus-Redis für die Entwicklungsumgebung bzw. die Testumgebung einzurichten, wie lange werden Sie dafür im Normalfall brauchen? Vielleicht brauchen Sie einen Tag? 2 Stunden? Die Wahrheit ist, es kann kürzer sein. Ja, Sie haben es erraten, die Bereitstellung mit Docker dauert tatsächlich nur ein Dutzend Minuten.

1. Vorbereitung

Ziehen Sie das Redis-Image

Führen Sie den folgenden Befehl aus:

Docker-Pull Redis

Das von diesem Befehl abgerufene Bild ist das offizielle Bild. Natürlich können Sie nach anderen Bildern suchen. Hier werden wir nicht näher auf die Bildsituation eingehen:

2. Stellen Sie den Redis Sentinel Master-Slave-Modus bereit

Was ist der Wächtermodus? --Bitte Baidu

1. Was ist Docker Compose?

Docker Compose kann als Festigung der Art und Weise und Konfiguration zum Ausführen mehrerer Container verstanden werden!

Nehmen wir das einfachste Beispiel: Wenn wir einen MySQL-Container und einen Redis-Container für unseren Anwendungscontainer vorbereiten möchten, müssen wir bei jedem Start zuerst den MySQL-Container und den Redis-Container starten und dann den Anwendungscontainer ausführen. Vergessen Sie beim Erstellen des Anwendungscontainers nicht, das Containernetzwerk mit dem MySQL-Container und dem Redis-Container zu verbinden, damit die Anwendung sich mit ihnen verbinden und Daten austauschen kann.

Dies reicht jedoch nicht aus. Wenn wir verschiedene Konfigurationen für den Container vorgenommen haben, speichern wir die Befehle zum Erstellen und Konfigurieren des Containers besser, damit wir sie beim nächsten Mal direkt verwenden können.

Als Reaktion auf diese Situation müssen wir die in unserer Entwicklung am häufigsten verwendete Multi-Container-Definition und -Ausführungssoftware einführen, nämlich Docker Compose.

2. Schreiben Sie Reids Master-Slave Docker-Compose.yml

Version: '3.7'
Leistungen:
  Master:
    Bild: Redis
    Containername: Redis-Master
    Neustart: immer
    Befehl: redis-server --requirepass redispwd --appendonly yes
    Häfen:
      -6379:6379
    Bände:
      - ./data1:/data
  Sklave1:
    Bild: Redis
    Containername: Redis-Slave-1
    Neustart: immer
    Befehl: redis-server --slaveof redis-master 6379 --requirepass redispwd --masterauth redispwd --appendonly yes
    Häfen:
      -6380:6379
    Bände:
      - ./data2:/data
  Sklave2:
    Bild: Redis
    Containername: Redis-Slave-2
    Neustart: immer
    Befehl: redis-server --slaveof redis-master 6379 --requirepass redispwd --masterauth redispwd --appendonly yes
    Häfen:
      -6381:6379
    Bände:
      - ./data3:/data

Glossar:

3. Starten Sie den Master-Slave-Redis

Geben Sie das Verzeichnis von docker-compose.yml ein, das Redis entspricht, und führen Sie den Befehl aus:

docker-compose up -d

-d bedeutet, dass es im Hintergrund ausgeführt wird. Verwenden Sie den Befehl docker ps, um die Startergebnisse anzuzeigen:


Der Screenshot wird angezeigt und zeigt den erfolgreichen Vorgang an

4. Schreiben Sie Sentinel docker-compose.yml

Version: '3.7'
Leistungen:
  sentinel1:
    Bild: Redis
    Containername: Redis-Sentinel-1
    Neustart: immer
    Häfen:
      -26379:26379
    Befehl: redis-sentinel /usr/local/etc/redis/sentinel.conf
    Bände:
      - ./sentinel1.conf:/usr/local/etc/redis/sentinel.conf
  sentinel2:
    Bild: Redis
    Containername: Redis-Sentinel-2
    Neustart: immer
    Häfen:
    -26380:26379
    Befehl: redis-sentinel /usr/local/etc/redis/sentinel.conf
    Bände:
      - ./sentinel2.conf:/usr/local/etc/redis/sentinel.conf
  sentinel3:
    Bild: Redis
    Containername: Redis-Sentinel-3
    Häfen:
      -26381:26379
    Befehl: redis-sentinel /usr/local/etc/redis/sentinel.conf
    Bände:
      - ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf
Netzwerke:
  Standard:
    extern:
      Name: redis_default

5. Schreiben Sie sentinel.conf

# Passen Sie den Clusternamen an, wobei 172.19.0.3 die IP-Adresse des Redis-Masters, 6379 die Portnummer des Redis-Masters und 2 die Mindeststimmenzahl ist (da es 3 Sentinels gibt, kann sie auf 2 eingestellt werden).
Port 26379
dir /tmp
Sentinel-Monitor Mymaster 172.19.0.3 6379 2
Sentinel nach Millisekunden ausgefallen, Mymaster 30000
Sentinel Parallel-Syncs MyMaster 1
Sentinel Auth-Pass MyMaster Redispwd
Sentinel Failover-Timeout MyMaster 180000
Sentinel verweigert die Skript-Neukonfiguration, ja

Kopieren Sie die obigen Dateien in drei Kopien und benennen Sie sie sentinel1.conf, sentinel2.conf und sentinel3.conf, entsprechend den Konfigurationsdateien in docker-compose.yml, und platzieren Sie sie dann im selben Verzeichnis wie Sentinels docker-compose.yml

6. Sentinel starten

Geben Sie das Verzeichnis ein, in dem sich die Sentinel-Datei docker-compose.yml befindet, und führen Sie den Befehl aus:

docker-compose up -d

Überprüfen Sie den Container und Sie können sehen, dass der Sentinel und das Master-Slave-Redis aktiv sind.

6.1 Sentinel-Startprotokoll


Wie aus dem obigen Protokoll ersichtlich ist, überwacht Sentinel die Master- und Slave-Knoten

6.2 Den Masterknoten herunterfahren

Stoppen Sie den Redis-Masterknoten über den Befehl

Docker stoppt Redis-Master 


Aus den obigen Protokollen können wir „sdown“ und „odown“ ersehen. Was bedeuten sie?
Sdown ist eine subjektive Ausfallzeit. Wenn ein Sentinel denkt, dass ein Master ausgefallen ist, dann ist es eine subjektive Ausfallzeit.
odown ist eine objektive Ausfallzeit. Wenn ein Quorum von Sentinels denkt, dass ein Master abgestürzt ist, dann ist es eine objektive Ausfallzeit und die Wahl beginnt. Aus dem Protokoll können wir ersehen, dass zwei Sentinels denselben Slave-Knoten ausgewählt haben. Zu diesem Zeitpunkt ist die von uns konfigurierte Mindestanzahl an Stimmen erreicht und dieser Slave wird als neuer Master ausgewählt.

6.3 Neustart des Masterknotens


Die obigen Protokolle zeigen, dass Sentinel erkennt, dass der ursprüngliche Master neu gestartet wurde, und den ursprünglichen Masterknoten in einen Slave-Knoten des neuen Masters umwandelt.

3. Stellen Sie den Redis-Clustermodus bereit

1. Verzeichnisse und Dateien erstellen

├── docker-compose.yml
├── redis-6371
│ ├── conf
│ │ └── redis.conf
│ └── Daten
├── redis-6372
│ ├── conf
│ │ └── redis.conf
│ └── Daten
├── redis-6373
│ ├── conf
│ │ └── redis.conf
│ └── Daten
├── redis-6374
│ ├── conf
│ │ └── redis.conf
│ └── Daten
├── redis-6375
│ ├── conf
│ │ └── redis.conf
│ └── Daten
└── redis-6376
    ├── Konf
    │ └── redis.conf
    └── Daten

2. redis.conf-Konfigurationsdatei

Port 6371
Clusterfähig ja
Cluster-Konfigurationsdatei nodes-6371.conf
Cluster-Knoten-Timeout 5000
nur anhängen ja
geschützter Modus nein
erforderlich 1234
Masterauth 1234
cluster-announce-ip 10.12.12.10 # Dies ist die Host-IP
Cluster-Ankündigungs-Port 6371
Cluster-Ankündigung-Bus-Port 16371

Die Konfiguration jedes Knotens erfordert lediglich eine Änderung des Ports.

3. Docker-Compose-Konfigurationsdatei

Version: "3"

# Definieren Sie Dienste. Sie können mehrere Dienste haben:
  redis-6371: # Dienstnameimage: redis # Beim Erstellen eines Containers erforderliches Imagecontainer_name: redis-6371 # Containernamerestart: immer # Container wird immer neu gestartetvolumes: # Datenvolume, Verzeichnis mount- ./redis-6371/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - ./redis-6371/Daten:/Daten
    Häfen:
      -6371:6371
      -16371:16371
    Befehl:
      redis-server /usr/local/etc/redis/redis.conf

  redis-6372:
    Bild: Redis
    Containername: redis-6372
    Bände:
      - ./redis-6372/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - ./redis-6372/Daten:/Daten
    Häfen:
      -6372:6372
      - 16372:16372
    Befehl:
      redis-server /usr/local/etc/redis/redis.conf

  redis-6373:
    Bild: Redis
    Containername: redis-6373
    Bände:
      - ./redis-6373/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - ./redis-6373/Daten:/Daten
    Häfen:
      -6373:6373
      -16373:16373
    Befehl:
      redis-server /usr/local/etc/redis/redis.conf
      
  redis-6374:
    Bild: Redis
    Containername: redis-6374
    Neustart: immer
    Bände:
      - ./redis-6374/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - ./redis-6374/Daten:/Daten
    Häfen:
      -6374:6374
      -16374:16374
    Befehl:
      redis-server /usr/local/etc/redis/redis.conf

  redis-6375:
    Bild: Redis
    Containername: redis-6375
    Bände:
      - ./redis-6375/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - ./redis-6375/Daten:/Daten
    Häfen:
      -6375:6375
      -16375:16375
    Befehl:
      redis-server /usr/local/etc/redis/redis.conf

  redis-6376:
    Bild: Redis
    Containername: redis-6376
    Bände:
      - ./redis-6376/conf/redis.conf:/usr/local/etc/redis/redis.conf
      - ./redis-6376/Daten:/Daten
    Häfen:
      -6376:6376
      -16376:16376
    Befehl:
      redis-server /usr/local/etc/redis/redis.conf

Verwenden Sie nach dem Schreiben docker-compose up -d, um den Container zu starten. Der Hostmodus wird hier nicht verwendet, sondern der NAT-Modus, da der Hostmodus dazu führen kann, dass externe Clients keine Verbindung herstellen können.

4. Betreten Sie den Container und erstellen Sie einen Cluster

Das Obige startet nur 6 Redis-Instanzen und erstellt keinen Cluster.
Führen Sie „docker exec -it redis-6371 bash“ aus, um einen Redis-Knotencontainer aufzurufen. Jeder davon ist geeignet.
Führen Sie weiterhin den folgenden Befehl aus, um einen Cluster zu erstellen:

# Befehl zur Clustererstellung redis-cli -a 1234 --cluster create 10.35.30.39:6371 10.35.30.39:6372 10.35.30.39:6373 10.35.30.39:6374 10.35.30.39:6375 10.35.30.39:6376 --cluster-replicas 1
# Nach der Ausführung wird die folgende Ausgabe angezeigt: Warnung: Die Verwendung eines Kennworts mit der Option „-a“ oder „-u“ in der Befehlszeilenschnittstelle ist möglicherweise nicht sicher.
>>> Hash-Slot-Zuweisung auf 6 Knoten wird durchgeführt …
Master[0] -> Steckplätze 0 - 5460
Master[1] -> Steckplätze 5461 - 10922
Master[2] -> Plätze 10923 - 16383
Replikat 10.35.30.39:6375 zu 10.35.30.39:6371 hinzufügen
Replikat 10.35.30.39:6376 zu 10.35.30.39:6372 hinzufügen
Replikat 10.35.30.39:6374 zu 10.35.30.39:6373 hinzufügen
>>> Versuch, die Slave-Zuweisung für Anti-Affinität zu optimieren
[WARNUNG] Einige Slaves befinden sich im selben Host wie ihr Master
M: e9a35d6a9d203830556de89f06a3be2e2ab4eee1 10.35.30.39:6371
   Steckplätze:[0-5460] (5461 Steckplätze) Master
M: 0c8755144fe6a200a46716371495b04f8ab9d4c8 10.35.30.39:6372
   Steckplätze:[5461-10922] (5462 Steckplätze) Master
M: fcb83b0097d2a0a87a76c0d782de12147bc86291 10.35.30.39:6373
   Steckplätze:[10923-16383] (5461 Steckplätze) Master
S: b9819797e98fcd49f263cec1f77563537709bcb8 10.35.30.39:6374
   Replikate fcb83b0097d2a0a87a76c0d782de12147bc86291
S: f4660f264f12786d81bcf0b18bc7287947ec8a1b 10.35.30.39:6375
   Replikate e9a35d6a9d203830556de89f06a3be2e2ab4eee1
S: d2b9f265ef7dbb4a612275def57a9cc24eb2fd5d 10.35.30.39:6376
   Replikate 0c8755144fe6a200a46716371495b04f8ab9d4c8
Kann ich die obige Konfiguration festlegen? (Geben Sie „yes“ ein, um zu akzeptieren): yes # Geben Sie hier „yes“ ein und drücken Sie die Eingabetaste, um die Master-Slave-Identität des Knotens und die Hash-Slot-Zuweisung zu bestätigen >>> Knotenkonfiguration aktualisiert
>>> Jedem Knoten eine andere Konfigurationsepoche zuweisen
>>> Senden von CLUSTER MEET-Nachrichten zum Beitritt zum Cluster
Warten auf den Beitritt zum Cluster
.
>>> Clusterprüfung durchführen (mit Knoten 10.35.30.39:6371)
M: e9a35d6a9d203830556de89f06a3be2e2ab4eee1 10.35.30.39:6371
   Steckplätze:[0-5460] (5461 Steckplätze) Master
   1 zusätzliche Replik(en)
M: 0c8755144fe6a200a46716371495b04f8ab9d4c8 10.35.30.39:6372
   Steckplätze:[5461-10922] (5462 Steckplätze) Master
   1 zusätzliche Replik(en)
S: b9819797e98fcd49f263cec1f77563537709bcb8 10.35.30.39:6374
   Steckplätze: (0 Steckplätze) Slave
   Replikate fcb83b0097d2a0a87a76c0d782de12147bc86291
M: fcb83b0097d2a0a87a76c0d782de12147bc86291 10.35.30.39:6373
   Steckplätze:[10923-16383] (5461 Steckplätze) Master
   1 zusätzliche Replik(en)
S: f4660f264f12786d81bcf0b18bc7287947ec8a1b 10.35.30.39:6375
   Steckplätze: (0 Steckplätze) Slave
   Replikate e9a35d6a9d203830556de89f06a3be2e2ab4eee1
S: d2b9f265ef7dbb4a612275def57a9cc24eb2fd5d 10.35.30.39:6376
   Steckplätze: (0 Steckplätze) Slave
   Replikate 0c8755144fe6a200a46716371495b04f8ab9d4c8
[OK] Alle Knoten stimmen der Slot-Konfiguration zu.
>>> Nach freien Plätzen suchen...
>>> Slot-Abdeckung prüfen...
[OK] Alle 16384 Slots abgedeckt.

Wenn Sie die obige Ausgabe sehen, ist die Clusterkonfiguration abgeschlossen. Und es gibt 3 Meister und 3 Sklaven.

Zusammenfassen:

Das Obige ist der gesamte Prozess der Bereitstellung des Sentinel-Modus und des Cluster-Modus durch Docker Compose. Redis wird in Docker bereitgestellt, das für lokale Umgebungen, Entwicklungs-, Test- und andere Umgebungen geeignet ist. Bitte verwenden Sie es in Produktionsumgebungen mit Vorsicht, es sei denn, Sie haben eine starke Kontrolle über Docker.

Dies ist das Ende dieses Artikels darüber, wie Sie mit Docker in 5 Minuten den Redis-Clustermodus und den Sentinelmodus erstellen. Weitere Informationen zum Erstellen des Redis-Clustermodus und des Sentinelmodus mit Docker finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die folgenden verwandten Artikel weiter. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Umgebungskonstruktion von Docker zum Erstellen eines Redis-Clusters
  • Beispiel für den Aufbau eines Redis-Sentinel-Clusters basierend auf Docker
  • Methode zum Erstellen eines Redis-Clusters basierend auf Docker
  • Verwenden Sie Docker, um einen Redis-Master-Slave-Replikationscluster zu erstellen
  • Erstellen eines Redis-Clusters auf Docker
  • Implementierung eines Redis Master-Slave-Clusters basierend auf Docker
  • So stellen Sie einen Redis 6.x-Cluster über Docker bereit
  • So erstellen Sie schnell einen Redis-Cluster mit Docker-Swarm

<<:  Beispiel für automatischen Stoppeffekt nach Text-Scrollen

>>:  Erweiterte Erklärung der Javascript-Funktionen

Artikel empfehlen

Super einfache QPS-Statistikmethode (empfohlen)

Statistik der QPS-Werte der letzten N Sekunden (i...

So implementieren Sie eine bidirektionale MySQL-Sicherung

Die bidirektionale MySQL-Sicherung wird auch als ...

Detaillierte Erklärung der MySQL Truncate-Verwendung

Inhaltsverzeichnis MySQL Truncate-Verwendung 1. T...

Detaillierte Analyse des binlog_format-Modus und der Konfiguration in MySQL

Es gibt drei Hauptmethoden der MySQL-Replikation:...

Nginx-Server fügt benutzerdefinierte Systemd-Dienstprozessanalyse hinzu

1. Nehmen Sie nginx als Beispiel Nginx mit dem Be...

Ein Artikel, der Ihnen hilft, mehr über JavaScript-Arrays zu erfahren

Inhaltsverzeichnis 1. Die Rolle des Arrays: 2. De...

Ein kleines Problem mit Nullwerten in MySQL

Heute habe ich beim Testen des Nullwertes ein kle...

Detailliertes Beispiel für MySQL ähnlich dem Schreiben von Oracle Rownum

Rownum ist eine einzigartige Schreibmethode in Or...

So zeigen Sie das MySQL-Binlog (Binärprotokoll) an

Wenn Sie beispielsweise eine neue Tabelle erstell...

Lösung für zu große Mysql-Binlog-Protokolldateien

Inhaltsverzeichnis 1. Verwandte Binlog-Konfigurat...

So stellen Sie Go-Webanwendungen mit Docker bereit

Inhaltsverzeichnis Warum brauchen wir Docker? Bei...

MySql-Wissenspunkte: Transaktion, Index, Sperrprinzip und Nutzungsanalyse

Dieser Artikel erläutert anhand von Beispielen di...