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

Bedeutung der Hintergrundfarbdeklaration beim Schreiben von Stilen

Wie der Titel schon sagt, kann andernfalls bei ein...

Implementierungscode zum Betreiben einer MySQL-Datenbank in Golang

Vorwort Golang stellt das Datenbank-/SQL-Paket fü...

Warum gibt es das in JS?

Inhaltsverzeichnis 1. Nachfrage 2. Lösung 3. Die ...

So erstellen Sie ein CentOS-Basisimage

Vorwort Derzeit ist das von meiner Firma verwende...

Lösung für den Fehler, dass IE6 select nicht durch div abgedeckt werden kann

Verwenden Sie div, um eine Maske zu erstellen oder...

So verwenden Sie den Yum-Befehl

1. Einführung in yum Yum (vollständiger Name Yell...

Einführung in die Fuzzy-Abfragemethode mit instr in MySQL

Die Verwendung der internen Funktion instr in MyS...

Vue implementiert Benutzeranmeldung und Token-Verifizierung

Im Falle einer vollständigen Trennung von Front-E...

JavaScript zur Implementierung eines Sprachwarteschlangensystems

Inhaltsverzeichnis einführen Hauptmerkmale Effekt...

CSS Polarkoordinaten Beispielcode

Vorwort Das Projekt stellt Anforderungen an Karte...

CentOS 7.6 Installation der MySQL 5.7 GA-Version Tutorial-Diagramm

Inhaltsverzeichnis Umgebungsvorbereitung Umgebung...

Einführung in MySQL-Rollenfunktionen

Inhaltsverzeichnis Vorwort: 1. Einführung in die ...