Redis Cluster ist eine eingebaute Redis-Funktion, die automatisches Sharding, Replikation und hohe Verfügbarkeit unterstützt, was zuvor mit Sentinels implementiert wurde. Sie ist für zwei Hauptzwecke konzipiert: zum einen, um Ihre Datenmenge automatisch auf mehrere Instanzen aufzuteilen und zum anderen, um ein gewisses Maß an Verfügbarkeit während Partitionen zu bieten, um den Betrieb fortzusetzen, wenn einige Instanzen (insbesondere Master) ausfallen oder nicht mit der Mehrheit der Knoten im Cluster kommunizieren können.
Jedoch stellt der Cluster den Betrieb ein, im Falle größerer Ausfälle (z.B. wenn die Mehrheit der Master-Instanzen nicht verfügbar ist). Auch wenn ein Master und ein Slave gleichzeitig ausfallen, kann der Cluster den normalen Betrieb nicht fortsetzen (obwohl der Workaround darin besteht, mehr Knoten hinzuzufügen oder eine Asymmetrie im Cluster zu erzeugen, um das Cluster-Layout automatisch zu ändern).
Laut der Redis-Clusterdokumentation erfordert der „minimale Cluster“, der wie erwartet funktioniert, dass er mindestens 3 Master-Knoten enthält. Aber die am besten geeignete Einrichtung für hohe Verfügbarkeit sollte mindestens 6 Knoten mit drei Mastern und drei Slaves haben, wobei jeder Master einen Slave hat.
Wichtig: Redis Cluster hat auch einige Einschränkungen, wie die fehlende Unterstützung für NATted-Umgebungen sowie solche, bei denen IP-Adressen oder TCP-Ports beispielsweise unter Docker neu zugeordnet werden. Zusätzlich unterstützt nicht jede Client-Bibliothek es.
Dieser Artikel zeigt, wie man ein Redis-Cluster (mit Cluster-Modus deaktiviert) in CentOS 8 einrichtet. Es umfasst die Installation von Redis, die Konfiguration der Cluster-Knoten, das Erstellen eines Clusters und das Testen des Cluster-Failovers.
Hinweis: Für diese Anleitung werden wir frische/leere Redis-Instanzen verwenden, um den Cluster-Modus auszuführen. Der Cluster-Modus funktioniert nicht mit einigen Konfigurationen, die in den ersten beiden Anleitungen unserer Redis-Serie durchgeführt wurden, insbesondere funktioniert er nicht, wenn der Replikationsparameter verwendet wird.
Voraussetzungen:
Testumgebung einrichten
Redis Master1: 10.42.0.247 Redis Master2: 10.42.0.197 Redis Master3: 10.42.0.132 Redis Slave1: 10.42.0.200 Redis Slave2: 10.42.0.21 Redis Slave3: 10.42.0.34

Unsere Einrichtung hat 3 Lese-/Schreib-Masterknoten und 3 schreibgeschützte Replikaknoten, jeder Master hat eine Replika, so dass drei Shards alle Daten des Clusters in jedem Knoten enthalten. Ein Anwendungs-API oder CLI-Client kann nur auf die Masterknoten schreiben, aber von jedem Knoten im Cluster lesen.
Schritt 1: Redis auf allen Knoten installieren
1. Melden Sie sich über SSH bei allen Instanzen an, und führen Sie dann den folgenden Befehl aus, um das Modul Redis mit dem DNF-Paketmanager zu installieren, wie gezeigt.
# dnf module install redis
2. Starten Sie anschließend den Redis-Dienst, aktivieren Sie ihn, um beim Systemstart automatisch zu starten, und überprüfen Sie seinen Status, um zu verifizieren, dass er läuft (überprüfen Sie den Dienst auf allen 6 Instanzen):
# systemctl start redis # systemctl enable redis # systemctl status redis
Schritt 2: Konfigurieren der Redis-Instanzen auf allen Knoten
3. Dieser Abschnitt beschreibt, wie Sie die Knoten des Redis-Clusters konfigurieren. Denken Sie daran, die Konfigurationen hier auf allen Knoten durchzuführen.
Verwenden Sie die Konfigurationsdatei /etc/redis.conf, um den Redis-Server zu konfigurieren. Als empfohlene Praxis erstellen Sie eine Sicherungskopie der Originaldatei, bevor Sie sie mit einem Texteditor Ihrer Wahl für die Kommandozeile bearbeiten.
# cp /etc/redis.conf /etc/redis.conf.orig # vi /etc/redis.conf
4. Finden Sie anschließend die folgenden Konfigurationsparameter und bearbeiten Sie ihre Werte wie gezeigt. Der Parameter bind legt die Schnittstelle fest, auf der der Redis-Server hören wird, setzen Sie seinen Wert auf die LAN-IP der Instanz. Entfernen Sie 127.0.0.1, da wir festgestellt haben, dass das Belassen dieser Adresse den Prozess der Clustererstellung verlangsamt, insbesondere die Phase des Beitritts zum Cluster.
bind 10.42.0.247
Stellen Sie dann den protected-mode auf nein
, um Verbindungen von anderen Instanzen im Cluster zu erlauben.
protected-mode no
Der Port-Parameter definiert den Port, auf dem der Redis-Server auf Verbindungen hört, standardmäßig ist dies 6379. Dies ist der Datenport für die Kommunikation mit den Clients.
port 6379

5. Der nächste Satz von Parametern wird den Cluster-Modus aktivieren und einige seiner nützlichen Funktionen einstellen. Der Parameter cluster-enabled, wenn auf ja
gesetzt, aktiviert den Cluster-Modus.
cluster-enabled yes
Als Nächstes legt der Parameter cluster-config-file den Namen der Cluster-Konfigurationsdatei eines Cluster-Knotens fest (z.B. nodes-6379.conf). Die Datei wird im Arbeitsverzeichnis erstellt (Standard ist /var/lib/redis, definiert über den Parameter dir) und ist nicht benutzereditierbar.
cluster-config-file nodes-6379.conf
Die nächste nützliche Cluster-Option ist cluster-node-timeout, sie wird verwendet, um die maximale Zeit in Millisekunden festzulegen, die eine Instanz nicht verfügbar sein kann, bevor sie als ausgefallen betrachtet wird. Ein Wert von 15000 entspricht 15 Sekunden.
cluster-node-timeout 15000

6. Wir müssen auch die Redis-Persistenz auf der Festplatte aktivieren. Wir können einen der Persistenzmodi verwenden, das ist die Append Only File (AOF): Sie protokolliert (in der Datei appendonly.aof, die unter dem Arbeitsverzeichnis erstellt wird) jeden Schreibvorgang, der vom Server erfolgreich empfangen wurde. Die Daten werden beim Serverstart abgespielt, um das ursprüngliche Datenset zu rekonstruieren.
Um es zu aktivieren, setzen Sie den Parameter appendonly auf ja
.
appendonly yes

7. Nachdem Sie alle Änderungen vorgenommen haben, starten Sie den Redis-Dienst auf allen Knoten neu, um die kürzlich vorgenommenen Änderungen anzuwenden.
# systemctl restart redis
8. Zu diesem Zeitpunkt sollte nun jeder Clusterknoten eine ID haben. Sie können dies in der Protokolldatei überprüfen, die sich unter /var/log/redis/redis.log befindet.
# cat /var/log/redis/redis.log

9. Öffnen Sie als Nächstes die Ports 6397 und 16379 auf allen Instanzen. Der spätere Port wird für den Clusterbus verwendet (ein Knoten-zu-Knoten-Kommunikationskanal, der ein binäres Protokoll verwendet). Dies ist eine grundlegende Anforderung für die TCP-Verbindungen des Redis-Clusters.
# firewall-cmd --zone=public --permanent --add-port=6379/tcp # firewall-cmd --zone=public --permanent --add-port=16379/tcp # firewall-cmd --reload
Schritt 3: Erstellen des Redis-Clusters
10. Um den Cluster zu erstellen, verwenden Sie den redis-cli-Befehlszeilen-Client wie folgt. Der Befehl --cluster create
ermöglicht die Clustererstellung und --cluster-replicas 1
bedeutet, dass pro Master eine Replik erstellt wird.
Für unsere Einrichtung, die 6 Knoten hat, werden wir 3 Master und 3 Sklaven haben.
Beachten Sie, dass die ersten 6 Knoten als Master (M)
und die nächsten drei als Sklaven (S)
betrachtet werden. Der erste Sklave, d.h. 10.42.0.200:6379, repliziert den ersten Master, d.h. 10.42.0.247:6379, der zweite Sklave repliziert den zweiten Master, in dieser Reihenfolge.
Der folgende Befehl ist so formatiert, dass das Ergebnis unsere logische Einrichtung oben widerspiegelt.
# redis-cli --cluster create 10.42.0.247:6379 10.42.0.197:6379 10.42.0.132:6379 10.42.0.200:6379 10.42.0.21:6379 10.42.0.34:6379 --cluster-replicas 1

11. Sobald die Clustererstellung erfolgreich war, führen Sie den folgenden Befehl auf einem beliebigen Host aus (geben Sie dessen IP-Adresse mit dem -h
Flag an), um alle Clusterknoten aufzulisten.
# redis-cli -h 10.42.0.247 -p 6379 cluster nodes
Sie sollten in der Lage sein, alle Clusterknoten zu sehen, wobei die Slaves ihre Master angeben, wie im folgenden Screenshot gezeigt.

Die verschiedenen Felder sind in dieser Reihenfolge: Knoten-ID, IP-Adresse:Port, Flags, letztes Ping gesendet, letztes Pong erhalten, Konfigurationsepoche, Verbindungsstatus, Slots (für Master).
Schritt 4: Testen des Redis Cluster Failover
12. In diesem Abschnitt werden wir demonstrieren, wie ein Cluster-Failover getestet wird. Zuerst notieren wir uns die Master.
# redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep master

Auch die Redis-Slaves sollten notiert werden.
# redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep slave

13. Als Nächstes stoppen wir den Redis-Dienst auf einem der Masterknoten, z.B. 10.42.0.197, und überprüfen alle Masterknoten im Cluster.
# systemctl stop redis # redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep master
Auf dem folgenden Screenshot können Sie sehen, dass der Knoten 10.42.0.197:6367 im Fehlerzustand ist und sein Slave 10.42.0.21:6379 zum Masterstatus befördert wurde.

14. Jetzt starten wir den Redis-Dienst erneut auf dem ausgefallenen Knoten und überprüfen alle Master im Cluster.
# systemctl start redis # redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep master

Auch die Cluster-Slaves sollten überprüft werden, um zu bestätigen, dass der ausgefallene Master jetzt ein Slave ist.
# redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep slave

Schritt 5: Testen der Datenreplikation im gesamten Redis-Cluster
15. Dieser letzte Abschnitt erklärt, wie man die Replikation von Clusterdaten überprüft. Wir werden einen Schlüssel und einen Wert auf einem der Master erstellen und dann versuchen, ihn von allen Clusterknoten wie folgt zu lesen. Verwenden Sie den -c
Schalter, um die Clusterunterstützung unter dem Redis-CLI-Dienstprogramm zu aktivieren und auf Daten im Clustermodus zuzugreifen.
# redis-cli -c -h 10.42.0.247 -p 6379 set name 'TecMint.com' # redis-cli -c -h 10.42.0.247 -p 6379 get name # redis-cli -c -h 10.42.0.21 -p 6379 get name # redis-cli -c -h 10.42.0.132 -p 6379 get name # redis-cli -c -h 10.42.0.200 -p 6379 get name # redis-cli -c -h 10.42.0.197 -p 6379 get name # redis-cli -c -h 10.42.0.34 -p 6379 get name

Das Fazit ist, dass der Redis Cluster der bevorzugte Weg ist, um automatisches Sharding, Replikation und hohe Verfügbarkeit zu erhalten. Es gibt viele andere gut dokumentierte Konfigurationsparameter in der restlichen /etc/redis.conf Datei, weitere Informationen finden Sie in der offiziellen Dokumentation: Redis-Cluster-Tutorial und Redis-Cluster-Spezifikation.
Damit kommen wir zum Ende der dreiteiligen Redis-Tutorialserie. Das untenstehende Feedback-Formular kann verwendet werden, um Fragen oder Kommentare zu posten.
Source:
https://www.tecmint.com/setup-redis-cluster-in-centos-8/