Implementierung eines Redis Master-Slave-Clusters basierend auf Docker

Implementierung eines Redis Master-Slave-Clusters basierend auf Docker

In letzter Zeit haben mich viele Freunde als Freund hinzugefügt, um nach dem Problem beim Einrichten eines Redis-Clusters zu fragen. Ich denke, mit dem Artikel „Einrichten eines Redis-Clusters basierend auf Docker“, den ich zuvor geschrieben habe, stimmt etwas nicht. Deshalb habe ich ein paar Minuten damit verbracht, den vorherigen Artikel durchzulesen und die folgenden Fragen zusammengefasst:

Die Anzahl der Redis ist zu gering und es werden nur 3 Instanzen erstellt. Da es nur 3 Instanzen gibt, können alle nur Masterknoten sein und die Master-Slave-Beziehung des Clusters kann nicht widergespiegelt werden. Wie erstellt man einen Master-Slave-Cluster? Wie werden Slave-Knoten zugewiesen?

Basierend auf dem vorherigen Artikel möchte ich diese Fragen kurz durchgehen. Dieser Artikel basiert auf der Version Docker + Redis 5.0.5 und erstellt im Clustermodus einen Master-Slave-Cluster mit 6 Redis-Instanzen. Natürlich wird im Artikel auf die entsprechenden Parameterbeschreibungen hingewiesen, sodass die Methode auch bei der Erstellung eines Clusters mit 9 Instanzen dieselbe ist.

1. Ziehen Sie das Redis-Image

Basierend auf Redis: Version 5.0.5, führen Sie die folgenden Anweisungen aus:

Docker-Pull Redis: 5.0.5

2. Erstellen Sie 6 Redis-Container

Erstellen Sie 6 Redis-Container:

  • redis-knoten1:6379
  • redis-knoten2:6380
  • redis-knoten3:6381
  • redis-knoten4:6382
  • redis-node5:6383
  • redis-node6:6384

Der Ausführungsbefehl lautet wie folgt:

docker erstellen --name redis-node1 --net host -v /data/redis-data/node1:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-1.conf --port 6379

docker erstellen --name redis-node2 --net host -v /data/redis-data/node2:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-2.conf --port 6380

docker erstellen --name redis-node3 --net host -v /data/redis-data/node3:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-3.conf --port 6381

docker erstellen --name redis-node4 --net host -v /data/redis-data/node4:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-4.conf --port 6382

docker erstellen --name redis-node5 --net host -v /data/redis-data/node5:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-5.conf --port 6383

docker erstellen --name redis-node6 --net host -v /data/redis-data/node6:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-6.conf --port 6384

Einige Parametererklärungen:

  • --cluster-enabled: ob der Cluster aktiviert werden soll, Wert auswählen: ja, nein
  • --cluster-config-file Konfigurationsdatei.conf: Knoteninformationen angeben, automatisch generiert
  • --cluster-node-timeout Millisekundenwert: Konfigurieren Sie das Timeout für die Knotenverbindung
  • --appendonly: ob Persistenz aktiviert werden soll, Wert auswählen: ja, nein

Screenshot des ausgeführten Befehls:

3. Starten Sie den Redis-Container

Der Ausführungsbefehl lautet wie folgt:

Docker starten Redis-Knoten1 Redis-Knoten2 Redis-Knoten3 Redis-Knoten4 Redis-Knoten5 Redis-Knoten6

Der Start-Screenshot sieht wie folgt aus:

4. Erstellen Sie einen Redis-Cluster

Geben Sie eine beliebige Redis-Instanz ein:

# Hier nehmen wir die Instanz redis-node1 als Beispiel docker exec -it redis-node1 /bin/bash

Führen Sie den Befehl des Komponentenclusters aus:

# Einen Cluster erstellen, 10.211.55.4 ist die IP-Adresse der aktuellen physischen Maschine redis-cli --cluster create 10.211.55.4:6379 10.211.55.4:6380 10.211.55.4:6381 10.211.55.4:6382 10.211.55.4:6383 10.211.55.4:6384 --cluster-replicas 1

Der Screenshot des Ausführungsbefehls sieht wie folgt aus:

Überprüfen Sie nach der erfolgreichen Erstellung die Clusterknoteninformationen über Redis-CLI:

root@CentOS7:/data# redis-cli
127.0.0.1:6379> Clusterknoten

Der Screenshot des Ausführungsbefehls sieht wie folgt aus:

5. Informationen zum Aufbau eines Redis-Clusters

Kehren wir zum Befehl zum Erstellen des Clusters zurück:

redis-cli --cluster erstellen 10.211.55.4:6379~6384 --cluster-replicas 1

Bitte achten Sie besonders auf diesen Parameter --cluster-replicas 1. Die Zahl nach dem Parameter gibt das Master-Slave-Verhältnis an. Die 1 hier bedeutet beispielsweise, dass das Master-Slave-Verhältnis 1:1 beträgt. Was bedeutet das?

Das heißt, 1 Masterknoten entspricht mehreren Slaveknoten. Es gibt jetzt 6 Instanzen, daher beträgt die Master-Slave-Zuordnung 3 Masterknoten und 3 Slaveknoten.

Um die Robustheit des Clusters sicherzustellen, müssen mindestens drei Masterknoten vorhanden sein.

Was wäre wenn --cluster-replicas 2?

Dann beträgt das Master-Slave-Verhältnis 1:2, das heißt, 1 Masterknoten entspricht 2 Slaveknoten.

Das heißt: 3 (Master) + 6 (Slave) = 9 Redis-Instanzen.

Was passiert, wenn weniger als 9 Redis-Instanzen vorhanden sind, der Parameter aber als 2 angegeben ist?

Die Fehlermeldung lautet:

Die Eingabeaufforderung ist sehr klar: Der Redis-Cluster benötigt mindestens 3 Masterknoten. Dann müssen 6 Slave-Knoten vorhanden sein, sodass letztendlich mindestens 9 Knoten erforderlich sind.

OK, ich werde nicht mit der Anforderung von mindestens 3 Masterknoten fortfahren, aber ich denke, 4 Masterknoten und 2 Slaveknoten sollten ausreichen, oder?

4 Masternodes überzeugen:

# Geben Sie eine gestartete Redis-Instanz ein. Hier nehmen wir die Instanz redis-node1 als Beispiel. docker exec -it redis-node1 /bin/bash

Führen Sie den Befehl aus, um einen Cluster zu erstellen:

redis-cli --cluster erstellen 10.211.55.4:6379 10.211.55.4:6380 10.211.55.4:6381 10.211.55.4:6382 --cluster-replicas 0

Geben Sie 4 Master ohne Slaves an, sodass Sie 4 Master haben:

Was ist mit den verbleibenden zwei Slave-Knoten? Manuell hinzufügen.

Wie hinzufügen? Manuell hinzufügen!

Sehen Sie die IDs dieser Masterknoten? Weisen Sie ihnen einfach Slaves zu.

Führen Sie weiterhin die folgenden Befehle aus:

redis-cli --cluster add-node 10.211.55.4:6383 10.211.55.4:6379 --cluster-slave --cluster-master-id b0c32b1dae9e7b7f7f4b74354c59bdfcaa46f30a

redis-cli --cluster add-node 10.211.55.4:6384 10.211.55.4:6379 --cluster-slave --cluster-master-id 111de8bed5772585cef5280c4b5225ecb15a582e

Die beiden Redis-Instanzen sind an andere Masterknoten angeschlossen:

Schließlich rufen wir redis-cli auf und zeigen die Knoteninformationen über die Clusterknoten an:

Dies ist das Ende dieses Artikels über die Implementierung eines Redis-Master-Slave-Clusters basierend auf Docker. Weitere relevante Inhalte zum Docker Redis-Master-Slave-Cluster finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

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
  • Bringen Sie Ihnen bei, wie Sie in 5 Minuten den Redis-Clustermodus und den Sentinelmodus mit Docker erstellen
  • Erstellen eines Redis-Clusters auf Docker
  • So stellen Sie einen Redis 6.x-Cluster über Docker bereit
  • So erstellen Sie schnell einen Redis-Cluster mit Docker-Swarm

<<:  Detaillierte Erklärung des Problems bei der Kombination von CSS-Ellipsen und -Auffüllungen

>>:  Grundkenntnisse in HTML: ein erstes Verständnis von Webseiten

Artikel empfehlen

Centos7-Installation des in Nginx integrierten Lua-Beispielcodes

Vorwort Der von mir verwendete Computer ist ein M...

Analysieren Sie, wie Uniapp den Schnittstellendomänennamen dynamisch erhält

Hintergrund Der Domänenname der Schnittstelle ist...

So implementieren Sie die Unschärfefunktion von DIV

Verwenden Sie Anti-Shake, um DIV verschwinden zu ...

Implementierung der Formatierung von Partitionen und der Einbindung in Centos7

Unter Linux treten häufig Situationen auf, in den...

So konfigurieren Sie mehrere Projekte mit demselben Domänennamen in Nginx

Es gibt zwei Möglichkeiten, mit Nginx mehrere Pro...

CSS-Implementierungscode für horizontale und vertikale Fortschrittsbalken

Manchmal ist es schön, ein paar nette Scrollbar-E...

Vier Lösungen für die Verwendung von setTimeout in JS for-Schleifen

Inhaltsverzeichnis Überblick Lösung 1: Verschlüss...

Vue implementiert ein einfaches Einkaufswagenbeispiel

In diesem Artikel wird der spezifische Code von V...

Schreiben Sie einen einfachen Rechner mit JavaScript

Die Wirkung ist wie folgt:Referenzprogramm: <!...

Eine elegantere Methode zur Fehlerbehandlung in JavaScript async await

Inhaltsverzeichnis Hintergrund Warum Fehlerbehand...

Detaillierte Erklärung zur Konfiguration der OpenGauss-Datenbank im Docker

Für Windows-Benutzer Verwenden von openGauss in D...

Node.js erstellt ein einfaches Crawler-Case-Tutorial

Vorbereitung Zuerst müssen Sie nodejs herunterlad...