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

Lösung für die Inkonsistenz zwischen Crontab-Ausführungszeit und Systemzeit

Vorwort Unter LINUX werden periodische Aufgaben n...

Detaillierte Erklärung des Prinzips und der Funktion des JavaScript-Closures

Inhaltsverzeichnis Einführung Verwendung von Vers...

So fügen Sie CentOS7 systemd benutzerdefinierte Systemdienste hinzu

systemd: Das Service-Systemctl-Skript von CentOS ...

Browserübergreifender lokaler Speicher Ⅰ

Originaltext: http://www.planabc.net/2008/08/05/u...

Designtheorie: Warum suchen wir am falschen Ort?

Ich bin vor ein paar Tagen mit dem Bus zur Arbeit...

So stellen Sie ein Vue-Projekt unter Nginx bereit

Heute werde ich den Server nginx verwenden und mu...

JavaScript Canvas realisiert dynamische Punkt- und Linieneffekte

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

Lösen Sie den Konflikt zwischen Docker und VMware

1. Docker-Startproblem: Problem gelöst: Sie müsse...

Wie stelle ich Tomcat als automatisch gestarteten Dienst ein? Der schnellste Weg

Stellen Sie Tomcat so ein, dass der Dienst automa...

Details zur Verwendung von Bimface in Vue

Inhaltsverzeichnis 1. Installieren Sie das Vue-Ge...

10 sehr gute CSS-Fähigkeiten sammeln und teilen

Hier können Sie durch geschickten Einsatz von CSS-...