Implementierung der Clusterkonstruktion im Docker Redis5.0-Cluster

Implementierung der Clusterkonstruktion im Docker Redis5.0-Cluster

Systemumgebung: Ubuntu 16.04LTS

In diesem Artikel werden 6 Docker-Container verwendet, um einen Clustertest für eine einzelne Maschine zu erstellen. Wenn die tatsächliche Umgebung mehrere Maschinen umfasst, können Sie die Anzahl der Container, Portnummern und Cluster-IP-Adressen entsprechend ändern. Für jede Maschine können die gleichen Schritte wie unten beschrieben ausgeführt werden.

Rufen Sie das offizielle Redis-Image ab

Docker-Pull Redis: 5.0

Erstellen von Konfigurationsdateien und Datenverzeichnissen

Erstellen Sie ein Verzeichnis

mkdir ~/redis_cluster
cd ~/redis_cluster

Erstellen Sie eine neue Vorlagendatei sudo vim redis_cluster.tmpl und füllen Sie den folgenden Inhalt aus:

# Redis-Port ${PORT}

# Schutzmodus deaktivieren protected-mode no

# Cluster aktivieren cluster-enabled yes

# Clusterknotenkonfiguration Clusterkonfigurationsdatei nodes.conf

#Timeout Cluster-Knoten-Timeout 5000

# Der IP-Hostmodus des Clusterknotens ist die IP des Hostcomputers
Cluster-Ankündigungs-IP 10.10.100.197

# Cluster-Knoten-Ports 7000 - 7005
Cluster-Ankündigungs-Port ${PORT}
Cluster-Ankündigungsbus-Port 1${PORT}

# Aktivieren Sie den Appendonly-Sicherungsmodus appendonly yes

# Backup jede Sekunde appendfsync everysec

#Ob beim Komprimieren von AOF-Dateien eine Synchronisierung durchgeführt werden soll no-appendfsync-on-rewrite no

# Wenn die aktuelle aof-Dateigröße 100 % der zuletzt umgeschriebenen aof-Dateigröße überschreitet, wird sie erneut umgeschrieben auto-aof-rewrite-percentage 100

# Die Mindestgröße der AOF-Datei vor dem Neuschreiben beträgt standardmäßig 64 MB
Auto-Aof-Rewrite – Mindestgröße 5120 MB

# Deaktivieren Sie das Speichern von Snapshot-Backups ""

Um Konfigurationsdateien und Datenverzeichnisse stapelweise zu erstellen, führen Sie den folgenden Befehl im Terminal aus:

für Port in `seq 7000 7005`; mache \
 mkdir -p ./${port}/conf \
 && PORT=${port} envsubst < ./redis_cluster.tmpl > ./${port}/conf/redis.conf \
 && mkdir -p ./${port}/data; \
Erledigt

Redis-Container stapelweise starten

Die IP-Adresse des Containers verwendet den Hostmodus:

für Port in `seq 7000 7005`; mache \
 docker run -d -it --memory=1G \
 -v ~/redis_cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
 -v ~/redis_cluster/${port}/data:/data \
 --restart immer --name redis-${port} --net host \
 --sysctl net.core.somaxconn=1024 redis:5.0 redis-server /usr/local/etc/redis/redis.conf; \
Erledigt

Dabei begrenzt --memeory=1G die Speichergröße eines einzelnen Docker-Containers auf 1 GB. Wenn diese Grenze überschritten wird, wird der Prozess beendet. Während der Laufzeit kann die Warnung „Speicher ohne Swap begrenzt …“ erscheinen, die ignoriert werden kann. Wenn Sie den Speicher nicht begrenzen müssen, können Sie den Parameter --memeory entfernen.

Erstellen eines Clusters

Geben Sie einen der Container ein:

Docker Exec -it Redis-7000 Bash

Führen Sie nach der Eingabe den folgenden Befehl aus, um einen Cluster zu erstellen:

redis-cli --cluster erstellen 10.10.100.197:7000 10.10.100.197:7001 10.10.100.197:7002 10.10.100.197:7003 10.10.100.197:7004 10.10.100.197:7005 --cluster-replicas 1

Installieren Sie den Befehl „redis-cli“ (überspringen Sie diesen Schritt, wenn Sie ihn bereits haben):

sudo apt installiere Redis-Tools

Nach der Eingabe von „yes“ wird der Cluster erstellt. Beenden Sie Docker und melden Sie sich bei einem der Knoten an, um die Verfügbarkeit des Clusters zu überprüfen:

redis-cli -c -p 7000

Geben Sie Clusterknoten ein, um den Clusterstatus anzuzeigen

127.0.0.1:7000> Clusterknoten
06851aa134d50096d82a434eced9194233b5204e 10.10.100.197:7003@17003 Slave 8b33f273386c9504ef8bd10b005e24825b3b9596 0 1567671901000 4 verbunden
a42297b65f7101fc9e4941ef8a0e65080d1b6338 10.10.100.197:7005@17005 Slave 0aa20378d14e3ef0859815196cbafa67e1001d0e 0 1567671901581 6 verbunden
e7b6a35b1e92f94c225c507ea19f7f0318f0d1c3 10.10.100.197:7002@17002 Master - 0 1567671902582 3 verbunden 10923-16383
0aa20378d14e3ef0859815196cbafa67e1001d0e 10.10.100.197:7000@17000 ich selbst, Meister - 0 1567671901000 1 verbunden 0-5460
8b33f273386c9504ef8bd10b005e24825b3b9596 10.10.100.197:7001@17001 Master - 0 1567671902383 2 verbunden 5461-10922
fe355eed99100197f43d1216d1de82643dd496a5 10.10.100.197:7004@17004 Slave e7b6a35b1e92f94c225c507ea19f7f0318f0d1c3 0 1567671901380 5 verbunden

Festlegen des Clusterkennworts

Warum schreiben Sie das Kennwort nicht in die obigen Schritte, wenn Sie die Vorlagendatei zum stapelweisen Erstellen von Konfigurationsdateien verwenden?

Unabhängig davon, ob in Redis 5.x oder früheren Redis-Versionen Ruby zum Erstellen eines Clusters verwendet wird, gibt es im Prozess zum Erstellen eines Clusters „redis-cli --cluster create“ keine Konfiguration der Kennwortparameter. Daher müssen wir das Kennwort nach dem Erstellen des Clusters festlegen.

Wir verwenden die Config-Set-Methode, um für jeden Knoten dasselbe Kennwort festzulegen (Redis muss nicht neu gestartet werden, es ist nach dem Neustart weiterhin gültig). Fügen Sie vorher allen Redis-Konfigurationsdateien W-Berechtigungen hinzu, da das Kennwort sonst nicht in der Datei gespeichert werden kann.

Beachten Sie, dass der aktuelle Pfad immer noch ~/redis_cluster/ ist:

für Port in `seq 7000 7005`; mache \
 chmod a+w ./${port}/conf/redis.conf; \
Erledigt

Nehmen wir eines als Beispiel:

Melden Sie sich bei einem Knoten an:

redis-cli -c -p 7000

Passwort festlegen:

127.0.0.1:7000> Konfigurationssatz Masterauth 123456
OK
127.0.0.1:7000> Konfigurationssatz requirepass 123456
OK
127.0.0.1:7000>Auth. 123456
OK
127.0.0.1:7000> Konfiguration neu schreiben
OK

Führen Sie den gleichen Vorgang auf den folgenden Geräten durch.

Einfacher Test des Clusters beim Schreiben von Daten

Melden Sie sich bei einem beliebigen Clusterknoten an:

redis-cli -c -p 7003 -a 123456

Daten schreiben:

127.0.0.1:7003> setze va 1
-> Umgeleitet zum Steckplatz [7800] bei 10.10.100.197:7001
OK
10.10.100.197:7001> hol dir va
"1"
10.10.100.197:7001> weiterlesen
(Ganzzahl) 1

Es ist ersichtlich, dass Daten, die von jedem Knoten im Cluster geschrieben werden, von jedem anderen Knoten gelesen werden können.

An diesem Punkt ist der Redis-Cluster erstellt.

Weitere Überlegungen

  • Um vom externen Netzwerk auf Redis zuzugreifen, müssen Sie möglicherweise den entsprechenden Port in der Firewall öffnen.
  • Wenn Sie Container löschen müssen, können Sie dies stapelweise tun:
für Port in `seq 7000 7005`; mache \
 Docker stoppe Redis-${Port};
 Docker rm redis-${port};
Erledigt

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:
  • 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
  • Beispiel für den schnellen Aufbau eines Redis-Clusters mit Docker
  • 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

<<:  Acht gängige SQL-Verwendungsbeispiele in MySQL

>>:  Ajax löst domänenübergreifende Probleme durch Festlegen eines CORS-Antwortheaders, um eine domänenübergreifende Fallstudie zu erreichen

Artikel empfehlen

Detaillierte Erklärung zum dynamischen Festlegen des Browsertitels in Vue

Inhaltsverzeichnis Unsinn Text Der erste router/i...

Schritte zum Bereitstellen von Ingress-Nginx auf K8s

Inhaltsverzeichnis Vorwort 1. Bereitstellung und ...

Detaillierte Erläuterung der Vue-Formularbindung und -Komponenten

Inhaltsverzeichnis 1. Was ist bidirektionale Date...

Detaillierte Verwendung der MySQL-Funktionen row_number() und over()

Syntaxformat: row_number() über (Partition durch ...

Detaillierte Erläuterung der Deep Copy und Shallow Copy im JS-Variablenspeicher

Inhaltsverzeichnis Variabler Typ und Speicherplat...

Detaillierte Erläuterung der MySQL-Mehrtabellenabfrage

Die Zeit vergeht immer überraschend schnell, ohne...

Detaillierte Erläuterung des Shared-Memory-Mechanismus von Nginx

Der gemeinsam genutzte Speicher von Nginx ist ein...

Detaillierte Erklärung der MySQL-Berechtigungssteuerung

Inhaltsverzeichnis MySQL-Berechtigungskontrolle B...

Detaillierte Erläuterung der MySQL 8.0-Richtlinie zum Ablauf von Passwörtern

Ab MySQL 8.0.16 können Sie eine Richtlinie zum Ab...

Detaillierte Erklärung zur Verwendung von MySQL, wobei

Inhaltsverzeichnis 1. Einleitung 2. Haupttext 2.1...

Einführung in die Verwendung gängiger Dockerfile-Befehle

Inhaltsverzeichnis 01 CMD 02 EINSTIEGSPUNKT 03 AR...

Detaillierte Erklärung zum virtuellen Javascript-DOM

Inhaltsverzeichnis Was ist virtueller Dom? Warum ...