Beispiel für den Aufbau eines Redis-Sentinel-Clusters basierend auf Docker

Beispiel für den Aufbau eines Redis-Sentinel-Clusters basierend auf Docker

1. Übersicht

Redis Cluster ermöglicht hohe Verfügbarkeit und Sharding zwischen einer Gruppe von Redis-Knoten. Es wird einen Master- und mehrere Slave-Knoten im Cluster geben. Wenn der Masterknoten ausfällt, sollte ein Slaveknoten als neuer Master gewählt werden. Redis selbst (einschließlich vieler seiner Clients) verfügt jedoch nicht über die Fähigkeit, Fehler automatisch zu erkennen und eine Aktiv-Standby-Umschaltung durchzuführen, und erfordert für eine automatische Fehlerbehebung eine externe Überwachungslösung.

Redis Sentinel ist die offiziell empfohlene Hochverfügbarkeitslösung. Es handelt sich um ein Überwachungs- und Verwaltungstool für Redis-Cluster, das Dienste zur Knotenüberwachung, Benachrichtigung, automatischen Fehlerbehebung und Clientkonfigurationserkennung bereitstellen kann.

2. Aufgetretene Probleme

1. Docker-Hostnetzwerk

Wenn Docker das Hostnetzwerk verwendet, funktioniert es unter Windows und Mac nicht (es wurde keine Lösung gefunden). Schließlich habe ich Windows aufgegeben und CentOS zum Bereitstellen des Clusters verwendet.

2. Sentinel-Verbindungsproblem ohne Verwendung des Hostnetzwerks

Wenn Sie eine Verbindung zum Sentinel-Cluster herstellen, ohne das Hostnetzwerk zu verwenden, können Sie den Port des Masterknotens angeben, damit eine normale Verbindung hergestellt werden kann. Wenn der Masterknoten jedoch ausfällt, ist die von Sentinel vom Masterknoten erhaltene IP die virtuelle IP im Container, was dazu führt, dass der Cluster keine normale Verbindung herstellen kann.

3. Bauprozess

1. Verzeichnisstruktur

2. Sentinel-Konfigurationsdatei

1. sentinel1.conf

#Portnummer Port 26379
dir /tmp
# mymaster: benutzerdefinierter Clustername, 2: Die Abstimmungsmenge muss 2 Sentinels betragen, um zu bestimmen, ob der Masterknoten ausfällt. Sentinel-Monitor mymaster <ip> <port> 2
# Wenn der Masterknoten nach mehr als 5000 Sekunden nicht erreichbar ist und keine Antwort erfolgt, Sentinel down-after-milliseconds mymaster 5000
# Gibt an, dass während des Failovers höchstens numslaves den neuen Master synchron aktualisieren.
Sentinel Parallel-Syncs MyMaster 1
# Failover-Timeout Sentinel Failover-Timeout Mymaster 5000

2. sentinel2.conf

#Portnummer Port 26380
dir /tmp
# mymaster: benutzerdefinierter Clustername, 2: Die Abstimmungsmenge muss 2 Sentinels betragen, um zu bestimmen, ob der Masterknoten ausfällt. Sentinel-Monitor mymaster <ip> <port> 2
# Wenn der Masterknoten nach mehr als 5000 Sekunden nicht erreichbar ist und keine Antwort erfolgt, Sentinel down-after-milliseconds mymaster 5000
# Gibt an, dass während des Failovers höchstens numslaves den neuen Master synchron aktualisieren.
Sentinel Parallel-Syncs MyMaster 1
# Failover-Timeout Sentinel Failover-Timeout Mymaster 5000

3. sentinel3.conf

#Portnummer Port 26381
dir /tmp
# mymaster: benutzerdefinierter Clustername, 2: Die Abstimmungsmenge muss 2 Sentinels betragen, um zu bestimmen, ob der Masterknoten ausfällt. Sentinel-Monitor mymaster <ip> <port> 2
# Wenn der Masterknoten nach mehr als 5000 Sekunden nicht erreichbar ist und keine Antwort erfolgt, Sentinel down-after-milliseconds mymaster 5000
# Gibt an, dass während des Failovers höchstens numslaves den neuen Master synchron aktualisieren.
Sentinel Parallel-Syncs MyMaster 1
# Failover-Timeout Sentinel Failover-Timeout Mymaster 5000

3. docker-compose.yml

Version: '2'
Leistungen:
 Master:
 Bild: redis:4.0
 Neustart: immer
 Containername: Redis-Master
 #Host-Netzwerk verwenden network_mode: "host"
 Befehl: redis-server --port 16379 
 
 Sklave1:
 Bild: redis:4.0
 Neustart: immer
 Containername: Redis-Slave-1
 Netzwerkmodus: "Host"
 # Geben Sie den Port an und geben Sie den Master-IP-Port-Befehl an: redis-server --port 16380 --slaveof <master ip> 16379
 
 Sklave2:
 Bild: redis:4.0
 Neustart: immer
 Containername: Redis-Slave-2
 Netzwerkmodus: "Host" 
 Befehl: redis-server --port 16381 --slaveof <Master-IP> 16379
 
 sentinel1:
 Bild: redis:4.0
 Neustart: immer
 Containername: Redis-Sentinel-1
 Netzwerkmodus: "Host"
 # Geben Sie den Speicherort der Sentinel-Datei an. Befehl: redis-sentinel /usr/local/etc/redis/sentinel.conf
 # Verwenden Sie das Datenvolumen, um die Datei den angegebenen Sentinel-Standortvolumes zuzuordnen:
  - ./sentinel/sentinel1.conf:/usr/local/etc/redis/sentinel.conf
 
 sentinel2:
 Bild: redis:4.0
 Neustart: immer
 Containername: Redis-Sentinel-2
 Netzwerkmodus: "Host" 
 Befehl: redis-sentinel /usr/local/etc/redis/sentinel.conf
 Bände:
  - ./sentinel/sentinel2.conf:/usr/local/etc/redis/sentinel.conf
 
 sentinel3:
 Bild: redis:4.0
 Neustart: immer
 Containername: Redis-Sentinel-3
 Netzwerkmodus: "Host" 
 Befehl: redis-sentinel /usr/local/etc/redis/sentinel.conf
 Bände:
  - ./sentinel/sentinel3.conf:/usr/local/etc/redis/sentinel.conf

4. Verwenden Sie Centos, um Cluster-Testergebnisse bereitzustellen

1. Testen Sie die Verbindung zum Cluster über Sentinel1

2. Testen Sie die Datensynchronisation zwischen Masterknoten und Unterknoten

3. Schließen Sie den Master, um den Master-Slave-Schalter anzuzeigen

Sentinel ist normal verbunden

Der Masterknoten wird von 16379 auf 16381 umgestellt

Abschluss

Nach dem Drachenbootfest war ich eine Woche faul. Ich habe vorher einen Sentinel-Cluster erstellt. Aufgrund des Problems des Docker-Netzwerkmodells konnte der Cluster nach dem Wechsel der Master- und Slave-Knoten nicht verbunden werden. Gestern habe ich gesehen, dass der Host unter Windows nicht implementiert werden konnte, also habe ich ihn zum Testen auf CentOS installiert und es hat perfekt funktioniert.

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:
  • Detaillierte Erläuterung der Umgebungskonstruktion von Docker zum Erstellen eines Redis-Clusters
  • Methode zum Erstellen eines Redis-Clusters basierend auf Docker
  • Verwenden Sie Docker, um einen Redis-Master-Slave-Replikationscluster zu erstellen
  • Bringen Sie Ihnen bei, wie Sie in 5 Minuten den Redis-Clustermodus und den Sentinelmodus mit Docker 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

<<:  my.cnf (my.ini) wichtige Parameteroptimierungs-Konfigurationsanweisungen

>>:  React-Internationalisierung – Verwendung von react-intl

Artikel empfehlen

Detaillierte Erklärung der Anzeigemodi in CSS-Tags

Beschriftungsanzeigemodus (wichtig) Div- und Span...

Detaillierte Erklärung der TMPF-Mounts im Docker-Datenspeicher

Bevor Sie diesen Artikel lesen, hoffe ich, dass S...

Vue+Openlayer verwendet modify, um den gesamten Code des Elements zu ändern

Vue+Openlayer verwendet „modify“, um Elemente zu ...

Windows-Plattformkonfiguration Version 5.7 + MySQL-Datenbankdienst

Beinhaltet den Prozess der Initialisierung des Ro...

W3C Tutorial (5): W3C XML Aktivitäten

XML dient der Beschreibung, Speicherung, Übertrag...

Lösung zum Verhindern des Caching in Seiten

Lösung: Fügen Sie in <head> den folgenden Co...

Anfänger lernen einige HTML-Tags (2)

Anfänger können HTML lernen, indem sie einige HTM...

Eine kurze Analyse der parallelen MySQL-Replikation

01 Das Konzept der parallelen Replikation In der ...

Freigabe der schnellen Wiederherstellungslösung für große MySQL-SQL-Dateien

Vorwort Bei der Verwendung einer MySQL-Datenbank ...

Erläuterung der Lösung zur mobilen H5-Bildgenerierung in JavaScript

Derzeit gibt es viele Betriebsaktivitäten für öff...

Detaillierte Erläuterung des Befehls zum Bereinigen des MySQL-Datenbank-Binlogs

Überblick Heute werde ich hauptsächlich erklären,...