Website-Suche

So richten Sie einen Redis-Cluster in CentOS 8 ein – Teil 3


Redis Cluster ist eine integrierte Redis-Funktion, die automatisches Sharding, Replikation und Hochverfügbarkeit unterstützt und zuvor mit Sentinels implementiert wurde. Es ist für zwei Hauptzwecke konzipiert: Erstens dient es der automatischen Aufteilung Ihres Datensatzes auf mehrere Instanzen und zweitens der Bereitstellung eines gewissen Maßes an Verfügbarkeit während der Partitionierung, um den Betrieb fortzusetzen, wenn einige Instanzen (insbesondere Master) ausfallen oder nicht in der Lage sind, mit den meisten Instanzen zu kommunizieren Knoten im Cluster.

Bei größeren Ausfällen (z. B. wenn die Mehrheit der Master-Instanzen nicht verfügbar ist) stellt der Cluster jedoch seinen Betrieb ein. Auch wenn ein Master und ein Slave gleichzeitig ausfallen, kann der Cluster seinen normalen Betrieb nicht fortsetzen (obwohl die Problemumgehung darin besteht, weitere Knoten hinzuzufügen oder eine Asymmetrie im Cluster zu erzeugen, um das Cluster-Layout automatisch zu ändern).

Laut der Redis-Clusterdokumentation muss der „Minimalcluster“, der wie erwartet funktioniert, mindestens 3 Masterknoten enthalten. Das am besten geeignete Setup für Hochverfügbarkeit sollte jedoch mindestens sechs Knoten mit drei Mastern und drei Slaves haben, wobei jeder Master einen Slave hat.

Wichtig: Redis Cluster weist auch einige Einschränkungen auf, z. B. mangelnde Unterstützung für NATted-Umgebungen sowie solche, für die IP-Adressen oder TCP-Ports neu zugeordnet werden Instanz unter Docker. Darüber hinaus wird es nicht von jeder Clientbibliothek unterstützt.

Dieser Artikel zeigt, wie man einen Redis-Cluster (mit deaktiviertem Cluster-Modus) in CentOS 8 einrichtet. Es umfasst die Installation von Redis, die Konfiguration der Clusterknoten, die Erstellung eines Clusters und das Testen des Cluster-Failovers.

Hinweis: Für diese Anleitung verwenden wir frische/leere Redis-Instanzen, um den Cluster-Modus auszuführen. Der Cluster-Modus funktioniert bei einigen Konfigurationen, die in den ersten beiden Anleitungen unserer Redis-Reihe durchgeführt wurden, nicht, insbesondere nicht, wenn die Replik des Parameters verwendet wird.

Voraussetzungen:

  1. Server mit CentOS 8-Installation

Einrichtung der Testumgebung

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

Unser Setup verfügt über drei Lese-/Schreib-Master-Knoten und drei schreibgeschützte Replika-Knoten, wobei jeder Master über eine Replik verfügt, sodass drei Shards alle Daten des Clusters in jedem Knoten enthalten. Ein API- oder CLI-Client einer Anwendung 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 Redis-Modul mithilfe des DNF-Paketmanagers wie gezeigt zu installieren.

dnf module install redis

2. Starten Sie als Nächstes den Redis-Dienst, aktivieren Sie ihn für den automatischen Start beim Systemstart und überprüfen Sie seinen Status, um sicherzustellen, dass er ausgeführt wird (überprüfen Sie den Dienst auf allen 6 Instanzen). ):

systemctl start redis
systemctl enable redis
systemctl status redis

Schritt 2: Redis-Instanzen auf allen Knoten konfigurieren

3. In diesem Abschnitt wird beschrieben, wie Sie die Redis-Clusterknoten 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 Vorgehensweise erstellen Sie eine Sicherungskopie der Originaldatei, bevor Sie sie mit einem Befehlszeilen-Texteditor Ihrer Wahl bearbeiten.

cp /etc/redis.conf /etc/redis.conf.orig
vi /etc/redis.conf

4. Suchen Sie als Nächstes die folgenden Konfigurationsparameter und bearbeiten Sie deren Werte wie gezeigt. Der bind-Parameter legt die Schnittstelle fest, die der Redis-Server abhört, und legt seinen Wert auf die LAN-IP der Instanz fest. Entfernen Sie 127.0.0.1, da wir festgestellt haben, dass das Belassen dort den Prozess der Clustererstellung verlangsamt, insbesondere die Phase des Beitritts zum Cluster.

bind  10.42.0.247

Setzen Sie dann den protected-mode auf no, um Verbindungen von den anderen Instanzen im Cluster zuzulassen.

protected-mode no

Der Port-Parameter definiert den Port, den der Redis-Server auf Verbindungen überwacht. Der Standardwert ist 6379. Dies ist der Datenport für die Kommunikation mit Clients.

port 6379

5. Der nächste Parametersatz aktiviert den Cluster-Modus und legt einige seiner nützlichen Funktionen fest. Wenn der Parameter cluster-enabled auf yes gesetzt ist, wird der Clustermodus aktiviert.

cluster-enabled yes

Als nächstes legt der Parameter cluster-config-file den Namen der Cluster-Konfigurationsdatei eines Clusterknotens fest (z. B. nodes-6379.conf). Die Datei wird im Arbeitsverzeichnis erstellt (Standard ist /var/lib/redis, definiert mit dem Parameter dir) und kann nicht vom Benutzer bearbeitet werden.

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 darf, damit sie als fehlerhaft 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, nämlich das Append Only File (AOF): Es protokolliert (in der erstellten Datei appendonly.aof). (unter dem Arbeitsverzeichnis) jeden Schreibvorgang, der vom Server erfolgreich empfangen wurde. Die Daten werden während des Serverstarts abgespielt, um den Originaldatensatz zu rekonstruieren.

Um es zu aktivieren, setzen Sie den Parameter appendonly auf yes.

appendonly yes

7. Nachdem Sie alle Änderungen vorgenommen haben, starten Sie den Redis-Dienst auf allen Knoten neu, um die letzten Änderungen zu übernehmen.

systemctl restart redis

8. Zu diesem Zeitpunkt sollte jeder Clusterknoten nun eine ID haben. Sie können dies in der Protokolldatei unter /var/log/redis/redis.log überprüfen.

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 Cluster-Bus verwendet (ein Knoten-zu-Knoten-Kommunikationskanal unter Verwendung eines Binärprotokolls). Dies ist eine Grundvoraussetzung 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-Befehlszeilenclient wie folgt. --cluster create ermöglicht die Clustererstellung und --cluster-replicas 1 bedeutet, dass pro Master ein Replikat erstellt wird.

Für unser Setup mit 6 Knoten haben wir 3 Master und 3 Slaves.

Beachten Sie, dass die ersten 6 Knoten als Master (M) und die nächsten drei als Slaves (S) betrachtet werden. . Der erste Slave, also 10.42.0.200:6379, repliziert den ersten Master, also 10.42.0.247:6379, der zweite Slave repliziert den zweiten Master, in dieser Reihenfolge.

Der folgende Befehl ist so formatiert, dass das Ergebnis unseren obigen logischen Aufbau darstellt.

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 ist, führen Sie den folgenden Befehl auf einem beliebigen Host aus (geben Sie dessen IP-Adresse mit dem Flag -h an), um alle Clusterknoten aufzulisten.

redis-cli -h 10.42.0.247 -p 6379 cluster nodes

Sie sollten alle Clusterknoten sehen können, wobei die Slaves ihre Master angeben, wie im folgenden Screenshot gezeigt.

Die verschiedenen Felder sind in dieser Reihenfolge: Knoten-ID, IP-Adresse:Port, Flags, letzter gesendeter Pong, letzter empfangener Pong, Konfigurationsepoche, Verbindungsstatus, Slots (für Master).

Schritt 4: Redis-Cluster-Failover testen

12. In diesem Abschnitt zeigen wir, wie ein Cluster-Failover getestet wird. Nehmen wir zunächst die Meister zur Kenntnis.

redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep master

Beachten Sie auch die Redis-Slaves.

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 sich der Knoten 10.42.0.197:6367 im Fehlerzustand befindet und sein Slave 10.42.0.21:6379 zum Master-Status befördert wurde.

14. Nun 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

Überprüfen Sie außerdem die Cluster-Slaves, um sicherzustellen, 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. In diesem letzten Abschnitt wird erläutert, wie Sie die Cluster-Datenreplikation überprüfen. Wir erstellen einen Schlüssel und einen Wert auf einem der Master und versuchen dann, ihn wie folgt von allen Clusterknoten zu lesen. Verwenden Sie den Schalter -c, um die Clusterunterstützung im Dienstprogramm redis-cli zu aktivieren und im Clustermodus auf Daten 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

Unterm Strich ist der Redis-Cluster die bevorzugte Methode für automatisches Sharding, Replikation und hohe Verfügbarkeit. Der Rest der Datei /etc/redis.conf enthält viele weitere gut dokumentierte Konfigurationsparameter. Weitere Informationen finden Sie in der offiziellen Dokumentation: Redis-Cluster-Tutorial und Redis-Cluster-Spezifikation.

Damit sind wir am Ende der dreiteiligen Redis-Tutorialreihe angelangt. Das unten stehende Feedback-Formular kann zum Posten von Fragen oder Kommentaren verwendet werden.