Beispiel für den schnellen Aufbau eines Redis-Clusters mit Docker

Beispiel für den schnellen Aufbau eines Redis-Clusters mit Docker

Was ist Redis Cluster?

Redis Cluster ist eine von Redis bereitgestellte verteilte Datenbanklösung. Der Cluster teilt Daten durch Sharding und bietet Replikations- und Failover-Funktionen.

Knoten

Ein Redis-Cluster besteht normalerweise aus mehreren Knoten. Zu Beginn ist jeder Knoten unabhängig von den anderen. Sie befinden sich alle in einem Cluster, der nur sich selbst enthält. Um einen wirklich funktionierenden Cluster zu bilden, müssen wir die unabhängigen Knoten zu einem Cluster mit mehreren Knoten verbinden.

Cluster-Konfiguration

Konfigurationsdateien

Laden Sie die Konfigurationsdatei herunter: https://raw.githubusercontent.com/antirez/redis/5.0/redis.conf

Passen Sie die CLUSTER-Knotenkonfiguration an

# Cluster aktivieren cluster-enabled yes

# Cluster-Konfigurationsdatei cluster-config-file nodes-6379.conf

# Clusterknoten-Timeout Clusterknoten-Timeout 15000

Docker erstellt schnell einen Redis-Cluster

Redis installieren

Referenzartikel: https://www.jb51.net/article/150054.htm

Vorbereitung

├── Konf
│ ├── redis.conf
│ └── sentinel.conf
├── Redis
│ ├── Daten_6379
│ ├── Daten_6380
│ ├── Daten_6381
│ ├── Daten_6382
│ ├── Daten_6383
│ └── Daten_6384
└── Skripte
  ├── cluster.sh
  ├── ausführen.sh
  └── sentinel.sh

Skriptdatei „run.sh“

#!/usr/bin/env bash
setze -e

# Skript aktuelles Verzeichnis cPath=$(cd $(dirname "$0") || exit; pwd)

# Stammverzeichnis dirPath=$(dirname "$cPath")

# Holen Sie sich den Port port="$1"
wenn [[ ! "$port" ]]; dann
 Port = 6379
fi

# Erstellen Sie ein Datenverzeichnis mkdir -p "$dirPath"/redis/data_"$port"

# Löschen Sie den gestarteten Dienst containerId=$(docker ps -a | grep "redis_$port" | awk -F' ' '{print $1}')
wenn [[ "$containerId" ]]; dann
  docker rm -f ${containerId} > /dev/null
fi

# Starten Sie den Dienst containerName=redis_"$port"
docker run -itd --privileged=true -p "$port":6379 --name ${containerName} \
-v="$dirPath"/conf/redis.conf:/etc/redis/redis.conf \
-v="$dirPath"/redis/data_"$port":/Daten \
redis \
redis-server /etc/redis/redis.conf > /dev/null

# Holen Sie sich die Container-IP-Adresse dockerIp=$(docker inspect -f "{{.NetworkSettings.IPAddress}}" "$containerName")

# Holen Sie sich den Startstatus des Containers isRunning=$(docker inspect -f "{{.State.Running}}" "$containerName")
wenn [[ "$isRunning" == "true" ]]; dann
  echo "Container: $containerName - IP: $dockerIp - Erfolgreich gestartet"
fi

Skriptdatei cluster.sh

#!/usr/bin/env bash
setze -e

# Skript aktuelles Verzeichnis cPath=$(cd $(dirname "$0") || exit; pwd)

# Starten Sie den Cluster mit der Nummer num="$1"
wenn [[ ! "$num" ]]; dann
 Zahl = 6
fi

sPort=6378
für((i=1;i<=$num;i++)); machen
  sh ${cPath}/run.sh $(($sPort+$i))
Erledigt

Starten des Dienstes

Führen Sie die Skriptdatei aus und erstellen Sie standardmäßig 6 Knoten

sh-Skripte/Cluster.sh

Skript gibt Ergebnisse zurück

Container: redis_6379 - IP: 172.17.0.2 - Erfolgreich gestartetContainer: redis_6380 - IP: 172.17.0.3 - Erfolgreich gestartetContainer: redis_6381 - IP: 172.17.0.4 - Erfolgreich gestartetContainer: redis_6382 - IP: 172.17.0.5 - Erfolgreich gestartetContainer: redis_6383 - IP: 172.17.0.6 - Erfolgreich gestartetContainer: redis_6384 - IP: 172.17.0.7 - Erfolgreich gestartet

Führen Sie Docker PS aus, um zu überprüfen, ob der Start erfolgreich war.

root@DESKTOP-Q13EI52:~/docker-config/redis# docker ps
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
c0601df1a456 redis "docker-entrypoint.s..." vor 27 Sekunden Aktiv 26 Sekunden 0.0.0.0:6384->6379/tcp redis_6384
6fecf70465b8 redis "docker-entrypoint.s..." vor 27 Sekunden Aktiv seit 26 Sekunden 0.0.0.0:6383->6379/tcp redis_6383
1af15e90b7a0 redis "docker-entrypoint.s..." vor 28 Sekunden Aktiv seit 27 Sekunden 0.0.0.0:6382->6379/tcp redis_6382
6c495f31a5df redis "docker-entrypoint.s..." vor 28 Sekunden Aktiv 28 Sekunden 0.0.0.0:6381->6379/tcp redis_6381
e54fd9fd0550 redis "docker-entrypoint.s..." vor 29 Sekunden Aktiv seit 28 Sekunden 0.0.0.0:6380->6379/tcp redis_6380
be92ad2f7046 redis "docker-entrypoint.s..." vor 29 Sekunden Aktiv 29 Sekunden 0.0.0.0:6379->6379/tcp redis_6379

Bisher wurden sechs unabhängige Clusterknoten erstellt, die jedoch noch nicht richtig funktionieren.

Erstellen eines Clusters

Diesen Teil können Sie überspringen, ich möchte nur Ärger vermeiden

Holen Sie sich die IP-Adressen aller Container, die vom Container redis_ gestartet wurden

docker inspect -f "{{.NetworkSettings.IPAddress}}:6379" `docker ps | grep redis_ | awk -F' ' '{print $1}'` | sort |xargs | sed ‚s/ /, /g‘

# Ergebnis zurückgeben# 172.17.0.2:6379, 172.17.0.3:6379, 172.17.0.4:6379, 172.17.0.5:6379, 172.17.0.6:6379, 172.17.0.7:6379

Erste Ausführung der Clustererstellung

./redis-cli --cluster erstellen 172.17.0.2:6379, 172.17.0.3:6379, 172.17.0.4:6379, 172.17.0.5:6379, 172.17.0.6:6379, 172.17.0.7:6379 --cluster-replicas 1

Ausgabe

1
>>> 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 172.17.0.6:6379 zu 172.17.0.2:6379 hinzufügen
Replikat 172.17.0.7:6379 zu 172.17.0.3:6379 hinzufügen
Replikat 172.17.0.5:6379 zu 172.17.0.4:6379 hinzufügen
M: e8da1fef656984de3ec2a677edc8d9c48d01cd95 172.17.0.2:6379
  Steckplätze:[0-5460] (5461 Steckplätze) Master
M: 68b925ab0fbbc1a632c1754587fb6dad3fa14c91 172.17.0.3:6379
  Steckplätze:[5461-10922] (5462 Steckplätze) Master
M: 0a46ab2f6d176738b55fe699c2df1c34f8200d06 172.17.0.4:6379
  Steckplätze:[10923-16383] (5461 Steckplätze) Master
S: bd3064ad5297dfc258e9236943455c589be8b2a3 172.17.0.5:6379
  Replikate 0a46ab2f6d176738b55fe699c2df1c34f8200d06
S: f1d8c897882d29e6538b1158525493b3b782289a 172.17.0.6:6379
  Replikate e8da1fef656984de3ec2a677edc8d9c48d01cd95
S: 619e1cb52f39e07b321719b77fc3631fa6293cef 172.17.0.7:6379
  Replikate 68b925ab0fbbc1a632c1754587fb6dad3fa14c91
Kann ich die obige Konfiguration festlegen? (Geben Sie „Ja“ ein, um zu akzeptieren):

Eingabe: ja, die Slots werden gleichmäßig verteilt

>>> 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 172.17.0.2:6379)
M: e8da1fef656984de3ec2a677edc8d9c48d01cd95 172.17.0.2:6379
  Steckplätze:[0-5460] (5461 Steckplätze) Master
  1 zusätzliche Replik(en)
S: f1d8c897882d29e6538b1158525493b3b782289a 172.17.0.6:6379
  Steckplätze: (0 Steckplätze) Slave
  Replikate e8da1fef656984de3ec2a677edc8d9c48d01cd95
S: bd3064ad5297dfc258e9236943455c589be8b2a3 172.17.0.5:6379
  Steckplätze: (0 Steckplätze) Slave
  Replikate 0a46ab2f6d176738b55fe699c2df1c34f8200d06
M: 0a46ab2f6d176738b55fe699c2df1c34f8200d06 172.17.0.4:6379
  Steckplätze:[10923-16383] (5461 Steckplätze) Master
  1 zusätzliche Replik(en)
S: 619e1cb52f39e07b321719b77fc3631fa6293cef 172.17.0.7:6379
  Steckplätze: (0 Steckplätze) Slave
  Replikate 68b925ab0fbbc1a632c1754587fb6dad3fa14c91
M: 68b925ab0fbbc1a632c1754587fb6dad3fa14c91 172.17.0.3:6379
  Steckplätze:[5461-10922] (5462 Steckplätze) Master
  1 zusätzliche Replik(en)
[OK] Alle Knoten stimmen der Slot-Konfiguration zu.
>>> Nach freien Plätzen suchen...
>>> Slot-Abdeckung prüfen...
[OK] Alle 16384 Slots abgedeckt.

Herstellen einer Verbindung mit einem Cluster

Verbindung über Client herstellen

redis-cli -c <Anschluss>

Führen Sie den Befehl aus: cluster info

127.0.0.1:6379> Cluster-Informationen
cluster_state: ok
Zugewiesene Clusterslots: 16384
cluster_slots_ok:16384
cluster_slots_pfail:0
Fehler bei Clusterslots: 0
Bekannte Clusterknoten: 6
Clustergröße: 3
cluster_current_epoch:6
cluster_meine_Epoche:1
cluster_stats_messages_ping_sent:104
cluster_stats_messages_pong_sent:120
cluster_stats_messages_sent:224
cluster_stats_messages_ping_received:115
cluster_stats_messages_pong_received:104
cluster_stats_messages_meet_received:5
Empfangene Clusterstatistiknachrichten: 224

Wenn Sie „ cluster_state:ok sehen, funktioniert der Cluster ordnungsgemäß.

Client-Konsole: cluster help

127.0.0.1:6379> Cluster-Hilfe
 1) CLUSTER <Unterbefehl> arg arg ... arg. Unterbefehle sind:
 2) ADDSLOTS <Slot> [Slot ...] – Dem aktuellen Knoten Slots zuweisen.
 3) BUMPEPOCH – Erweitern Sie die Cluster-Konfigurationsepoche.
 4) COUNT-failure-reports <node-id> – Gibt die Anzahl der Fehlerberichte für <node-id> zurück.
 5) COUNTKEYSINSLOT <Slot> – Gibt die Anzahl der Schlüssel im <Slot> zurück.
 6) DELSLOTS <Slot> [Slot ...] – Löscht Slot-Informationen aus dem aktuellen Knoten.
 7) FAILOVER [erzwingen|übernehmen] – Den aktuellen Replikationsknoten zum Master heraufstufen.
 8) FORGET <Knoten-ID> – Entfernt einen Knoten aus dem Cluster.
 9) GETKEYSINSLOT <Slot> <Anzahl> – Gibt die vom aktuellen Knoten in einem Slot gespeicherten Schlüsselnamen zurück.
10) FLUSHSLOTS – Löscht die eigenen Slot-Informationen des aktuellen Knotens.
11) INFO – Gibt Informationen zum Cluster zurück.
12) KEYSLOT <Schlüssel> – Gibt den Hash-Slot für <Schlüssel> zurück.
13) MEET <ip> <port> [Bus-Port] – Verbindet Knoten zu einem funktionierenden Cluster.
14) MYID – Gibt die Knoten-ID zurück.
15) NODES – Gibt die Clusterkonfiguration zurück, die vom Knoten gesehen wird. Ausgabeformat:
16) <id> <ip:port> <flags> <master> <pings> <pongs> <epoch> <link> <slot> ... <slot>
17) REPLICATE <Knoten-ID> – Aktuellen Knoten als Replikat der <Knoten-ID> konfigurieren.
18) RESET [hard|soft] – Aktuellen Knoten zurücksetzen (Standard: soft).
19) SET-config-epoch <Epoche> – Konfigurationsepoche des aktuellen Knotens festlegen.
20) SETSLOT <Slot> (importieren|migrieren|stabil|Knoten <Knoten-ID>) – Slot-Status festlegen.
21) REPLICAS <Knoten-ID> – Gibt <Knoten-ID> Replikate zurück.
22) SAVECONFIG – Erzwingt das Speichern der Clusterkonfiguration auf der Festplatte.
23) SLOTS – Gibt Informationen zu Slot-Bereichszuordnungen zurück. Jeder Bereich besteht aus:
24) Start-, End-, Master- und Replikat-IP-Adressen, Ports und IDs

Zeigen Sie die vom Client bereitgestellten Cluster-bezogenen Befehle an: redis-cli --cluster help

Cluster Manager-Befehle:
 Erstellen Sie Host1:Port1 ... HostN:PortN
         --cluster-replicas <Argument>
 Host:Port prüfen
         --cluster-search-mehrere-Besitzer
 Info Host:Port
 Host:Port reparieren
         --cluster-search-mehrere-Besitzer
 Reshard-Host:Port
         --cluster-from <Argument>
         --cluster-to <Argument>
         --cluster-slots <Argument>
         --cluster-ja
         --cluster-timeout <Argument>
         --cluster-pipeline <arg>
         --cluster-replace
 Host:Port neu ausbalancieren
         --cluster-weight <Knoten1=w1...KnotenN=wN>
         --cluster-use-empty-masters
         --cluster-timeout <Argument>
         --cluster-simulate
         --cluster-pipeline <arg>
         --cluster-threshold <Argument>
         --cluster-replace
 Knoten hinzufügen neuer_Host: neuer_Port bestehender_Host: bestehender_Port
         --cluster-slave
         --cluster-master-id <arg>
 del-node Host:Port Knoten-ID
 Host aufrufen:Port-Befehl arg arg .. arg
 Setze-Timeout Host:Port Millisekunden
 Host importieren:Port
         --cluster-from <Argument>
         --cluster-copy
         --cluster-replace

Dies ist das Ende dieses Artikels zum schnellen Erstellen eines Redis-Clusters mit Docker. Weitere Informationen zum Erstellen eines Redis-Clusters mit Docker finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • So erstellen Sie einen Redis-Cluster mit Docker
  • Implementierung eines Redis Master-Slave-Clusters basierend auf Docker
  • Erstellen eines Redis-Clusters auf Docker
  • So stellen Sie eigenständigen Pulsar und geclustertes Redis mit Docker bereit (Entwicklungsartefakt)
  • Verwenden Sie Docker, um einen Redis-Master-Slave-Replikationscluster zu erstellen
  • Implementierung der Clusterkonstruktion im Docker Redis5.0-Cluster
  • So konfigurieren Sie den Redis-Sentinel-Modus in Docker (auf mehreren Servern)
  • Implementierung von Redis mit einem Master, zwei Slaves und drei Sentinels basierend auf Docker
  • Bringen Sie Ihnen bei, wie Sie in 5 Minuten den Redis-Clustermodus und den Sentinelmodus mit Docker erstellen

<<:  Eine einfache und effektive Lösung, um das ursprüngliche Passwort bei der Installation von MySQL zu vergessen

>>:  Detaillierte Diskussion der Unterschiede zwischen Schleifen in JavaScript

Artikel empfehlen

Über Tomcat kombiniert mit Atomikos zur Implementierung von JTA

Vor Kurzem hat das Projekt die Umgebung gewechsel...

So erstellen Sie ein neues Image basierend auf einem vorhandenen Image in Docker

Das Erstellen neuer Images aus vorhandenen Images...

JavaScript, um das Bild mit der Maus zu bewegen

In diesem Artikel wird der spezifische JavaScript...

Beispiele für die Verwendung von HTML-Metadaten

Beispielverwendung Code kopieren Der Code lautet w...

Mehrere Möglichkeiten zum Berechnen des Alters anhand des Geburtstags in MySQL

Ich habe MySQL vorher nicht sehr oft verwendet un...

So richten Sie den PostgreSQL-Start unter Ubuntu 16.04 ein

Da PostgreSQL kompiliert und installiert ist, müs...

So entschlüsseln Sie Linux-Versionsinformationen

Das Anzeigen und Interpretieren von Informationen...