Redis skalieren: Leitfaden zur Einrichtung eines Redis Clusters

Erfahren Sie, wie Sie einen Redis Cluster für Hochverfügbarkeit und horizontale Skalierung einrichten und verwalten. Dieser Schritt-für-Schritt-Leitfaden behandelt die Installation, die Konfiguration mehrerer Redis-Knoten, die Erstellung des Clusters mit redis-trib.rb, das Hinzufügen von Replikaten zur Fehlertoleranz und wichtige Verwaltungsbefehle. Unverzichtbare Lektüre für die Skalierung Ihrer Redis-Bereitstellung.

Redis skalieren: Leitfaden zur Einrichtung eines Redis-Clusters

Ein Redis-Cluster hilft, wenn eine einzelne Redis-Instanz für Ihre Datenmenge, Ihren Datenverkehr oder Ihr Verfügbarkeitsziel nicht mehr ausreicht. Er verteilt Schlüssel auf mehrere primäre Knoten und kann Replikate hochstufen, wenn ein primärer Knoten ausfällt.

Diese Anleitung zeigt den aktuellen Workflow redis-cli --cluster, ein lokales Beispiel mit sechs Knoten und die Verwaltungsbefehle, die Sie nach dem Start des Clusters benötigen.

Grundlegendes zu Redis-Cluster-Konzepten

Redis-Cluster basiert auf einigen praktischen Ideen:

  • Sharding: Redis-Cluster unterteilt den Schlüsselraum in 16.384 Hash-Slots. Jeder primäre Knoten besitzt einen Bereich von Slots, und clusterfähige Clients leiten Befehle an den Knoten weiter, der den Slot des Schlüssels besitzt.
  • Replikation: Jeder primäre Knoten kann ein oder mehrere Replikate haben. Wenn ein primärer Knoten ausfällt und der Cluster noch ein Quorum erreichen kann, kann ein Replikat hochgestuft werden.
  • Cluster-Bus: Knoten kommunizieren miteinander über den Client-Port und einen Cluster-Bus-Port, normalerweise der Client-Port plus 10000. Für Port 7000 bedeutet das Bus-Port 17000.
  • Client-Unterstützung: Ihre Anwendungs-Clients müssen Redis-Cluster-Umleitungen wie MOVED und ASK unterstützen. Ein nicht clusterfähiger Client verhält sich schlecht, sobald Schlüssel auf verschiedenen Knoten leben.

Voraussetzungen

Planen Sie für einen produktionsreifen Cluster mindestens sechs Redis-Knoten: drei primäre Knoten und ein Replikat für jeden primären Knoten. Sie können das folgende Beispiel auf einem einzigen Rechner zu Übungszwecken ausführen, aber Produktionsknoten sollten auf mehrere Hosts oder Verfügbarkeitszonen verteilt sein.

Sie benötigen außerdem eine installierte Redis-Instanz, redis-cli und Netzwerkzugriff zwischen allen Knoten sowohl auf den Redis-Client-Ports als auch auf den Cluster-Bus-Ports. Verwenden Sie nach Möglichkeit eine aktuell unterstützte Redis-Version.

Einrichten eines Redis-Clusters Schritt für Schritt

Dieses Beispiel verwendet sechs lokale Redis-Prozesse auf den Ports 7000 bis 7005.

1. Redis installieren

Auf Debian oder Ubuntu sieht die Paketinstallation wie folgt aus:

sudo apt update
sudo apt install redis-server

Die Paketversionen variieren je nach Distribution. Wenn Sie eine neuere Redis-Version benötigen, verwenden Sie die offiziellen Redis-Pakete oder den verwalteten Redis-Dienst Ihrer Plattform.

2. Redis-Instanzen für den Cluster-Modus konfigurieren

Erstellen Sie ein Verzeichnis und eine Konfigurationsdatei pro Redis-Prozess:

mkdir cluster
cd cluster

for port in 7000 7001 7002 7003 7004 7005; do
  mkdir "$port"
  cp /etc/redis/redis.conf "$port/redis.conf"
done

Bearbeiten Sie jede redis.conf und setzen Sie die portspezifischen Werte. Für 7000/redis.conf verwenden Sie:

port 7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes
bind 127.0.0.1

Wiederholen Sie das gleiche Muster für 7001 bis 7005, indem Sie sowohl port als auch cluster-config-file ändern. Die Datei nodes-7000.conf wird von Redis verwaltet. Bearbeiten Sie sie nicht von Hand.

Binden Sie bei entfernten Servern an das private Netzwerkinterface anstelle von 127.0.0.1 und sichern Sie den Zugriff mit Firewalls, Authentifizierung und TLS, sofern von Ihrem Redis-Build oder -Dienst unterstützt.

3. Redis-Instanzen starten

Starten Sie jede Instanz mit ihrer eigenen Konfiguration:

for port in 7000 7001 7002 7003 7004 7005; do
  redis-server "$port/redis.conf"
done

Wenn Ihr Paketmanager bereits einen standardmäßigen Redis-Dienst auf Port 6379 ausführt, halten Sie ihn von diesem Testcluster getrennt oder stoppen Sie ihn während Ihrer Experimente.

4. Cluster mit redis-cli --cluster erstellen

Verwenden Sie redis-cli --cluster create, um Slots und Replikate zuzuweisen:

redis-cli --cluster create \
  127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 \
  127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \
  --cluster-replicas 1

Redis zeigt das vorgeschlagene Slot-Layout an und fragt nach Bestätigung. Geben Sie yes ein, wenn die Platzierung von primären Knoten und Replikaten richtig aussieht.

5. Cluster überprüfen

Überprüfen Sie den Cluster von einem beliebigen Knoten aus:

redis-cli -c -p 7000 CLUSTER INFO
redis-cli -c -p 7000 CLUSTER NODES
redis-cli --cluster check 127.0.0.1:7000

CLUSTER INFO sollte cluster_state:ok anzeigen. Das Flag -c teilt redis-cli mit, Cluster-Umleitungen zu folgen, was nützlich ist, wenn Sie Befehle gegen Schlüssel testen, die zu einem anderen Knoten gehören.

Versuchen Sie einen einfachen Schreib- und Lesevorgang:

redis-cli -c -p 7000 SET user:1 "Ada"
redis-cli -c -p 7001 GET user:1

Selbst wenn der Schlüssel zu einem Slot gehört, der von einem anderen Knoten bedient wird, kann ein clusterfähiger Client der Umleitung folgen.

Hinzufügen von Replikaten zu einem bestehenden Cluster

Wenn Sie bereits einen Cluster haben und ein neues Replikat hinzufügen möchten, starten Sie eine neue Redis-Instanz mit aktiviertem Cluster-Modus. Ermitteln Sie dann die ID des primären Knotens:

redis-cli -p 7000 CLUSTER NODES

Fügen Sie den neuen Knoten als Replikat dieses primären Knotens hinzu:

redis-cli --cluster add-node \
  127.0.0.1:7006 127.0.0.1:7000 \
  --cluster-slave \
  --cluster-master-id <master_node_id>

Die erste Adresse ist der neue Knoten. Die zweite Adresse ist ein beliebiger erreichbarer Knoten im bestehenden Cluster. Ersetzen Sie <master_node_id> durch die ID aus CLUSTER NODES.

Verwalten des Clusters

Zu den allgemeinen Verwaltungsaufgaben gehören:

  • Gesundheitscheck: redis-cli --cluster check 127.0.0.1:7000
  • Primären Knoten hinzufügen: redis-cli --cluster add-node <new_host:port> <existing_host:port>
  • Slots neu verteilen: redis-cli --cluster reshard <existing_host:port>
  • Knoten entfernen: Verschieben Sie zuerst die Slots vom Knoten weg, wenn es sich um einen primären Knoten handelt, und führen Sie dann redis-cli --cluster del-node <existing_host:port> <node_id> aus
  • Manueller Failover-Test: Führen Sie CLUSTER FAILOVER von einem Replikat aus, nicht vom primären Knoten

Vermeiden Sie es, Slots manuell mit Low-Level-Befehlen zu verschieben, es sei denn, Sie kennen die vollständige Migrationssequenz. Die Helfer von redis-cli --cluster verringern die Wahrscheinlichkeit, Slots in einem inkonsistenten Zustand zu hinterlassen.

Best Practices für Redis-Cluster

  • Verwenden Sie mindestens sechs Knoten: Drei primäre Knoten und drei Replikate geben dem Cluster Spielraum, um einen primären Ausfall zu tolerieren.
  • Verteilen Sie Replikate auf Ausfalldomänen: Platzieren Sie einen primären Knoten und sein Replikat nach Möglichkeit nicht auf demselben Host oder in derselben Verfügbarkeitszone.
  • Redis sichern: Setzen Sie Redis nicht direkt ungeschützten Netzwerken aus. Verwenden Sie private Netzwerke, Firewall-Regeln, Authentifizierung und TLS, wo verfügbar.
  • Speicher pro primärem Knoten planen: Redis-Cluster verteilt Schlüssel, aber jeder primäre Knoten benötigt dennoch genügend Speicher für seine zugewiesenen Daten, Overhead und Wachstum.
  • Clusterfähige Clients verwenden: Stellen Sie sicher, dass Ihre Client-Bibliothek Redis-Cluster unterstützt, bevor Sie den Datenverkehr umleiten.
  • Failover und Slot-Balance überwachen: Verfolgen Sie Speicher, Latenz, abgelehnte Verbindungen, Replikationsverzögerung und Clusterzustand.

Fazit

Für einen praktischen Redis-Cluster beginnen Sie mit mindestens drei primären Knoten und einem Replikat pro primärem Knoten, erstellen Sie den Cluster mit redis-cli --cluster create und überprüfen Sie ihn mit CLUSTER INFO plus redis-cli --cluster check. Danach besteht Ihre tägliche Arbeit in der Überwachung von Speicher, Slot-Balance, Failover-Verhalten und Client-Kompatibilität.