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.

82 Aufrufe

Skalierung von Redis: Leitfaden zur Einrichtung eines Redis Clusters

Redis, ein leistungsstarker In-Memory-Datenspeicher, wird häufig als Datenbank, Cache und Message Broker eingesetzt. Während eine einzelne Redis-Instanz eine erhebliche Last bewältigen kann, benötigen viele Anwendungen letztendlich eine höhere Verfügbarkeit und die Möglichkeit, horizontal zu skalieren, um wachsende Datenmengen und Traffic zu bewältigen. Redis Cluster bietet eine native Lösung, um beide Ziele zu erreichen.

Dieser Leitfaden führt Sie durch den Prozess der Einrichtung, Konfiguration und Verwaltung eines Redis Clusters. Wir behandeln die grundlegenden Konzepte, stellen Schritt-für-Schritt-Anleitungen für Installation und Konfiguration bereit und besprechen wesentliche Verwaltungsaufgaben, um sicherzustellen, dass Ihr Cluster robust und leistungsfähig bleibt.

Redis Cluster Konzepte verstehen

Bevor Sie sich in die Einrichtung stürzen, ist es entscheidend, die Kernkonzepte zu verstehen, die dem Redis Cluster zugrunde liegen:

  • Sharding (Partitionierung): Redis Cluster partitioniert Ihren Datensatz über mehrere Redis-Knoten hinweg. Jeder Knoten ist für eine Teilmenge der Hash-Slots (insgesamt 16384) verantwortlich. Wenn ein Client auf einen Schlüssel zugreifen muss, berechnet die Client-Bibliothek, zu welchem Hash-Slot der Schlüssel gehört, und leitet die Anfrage an den entsprechenden Knoten weiter.
  • Replikation: Für hohe Verfügbarkeit kann jeder primäre Knoten im Cluster einen oder mehrere Replika-Knoten haben. Wenn ein primärer Knoten ausfällt, kann eine seiner Replikas befördert werden, um seinen Platz einzunehmen, wodurch Ausfallzeiten minimiert werden.
  • Gossip-Protokoll: Redis Cluster-Knoten kommunizieren miteinander über ein Gossip-Protokoll. Dies ermöglicht es den Knoten, sich gegenseitig zu entdecken, Informationen über ihren Zustand auszutauschen und Fehler zu erkennen.
  • Konsens: Wenn ein primärer Knoten ausfällt, muss der Cluster unter den verbleibenden primären Knoten einen Konsens erzielen, um einen neuen primären Knoten aus seinen Replikas zu wählen. Dieser Prozess stellt sicher, dass der Cluster betriebsbereit bleibt.

Voraussetzungen

Um einen Redis Cluster einzurichten, benötigen Sie:

  • Mehrere Server oder virtuelle Maschinen (mindestens 6 Knoten werden für eine produktionsreife Einrichtung empfohlen: 3 primäre und 3 Replikas).
  • Redis auf jedem Server installiert. Stellen Sie sicher, dass Sie Redis Version 3.0 oder höher verwenden.
  • Netzwerkkonnektivität zwischen allen Knoten. Knoten müssen in der Lage sein, miteinander über ihren Client-Port und ihren Cluster-Bus-Port (Client-Port + 10000) zu kommunizieren.
  • redis-cli, die Redis-Befehlszeilenschnittstelle, die das Skript redis-trib.rb zur Cluster-Erstellung enthält.

Einrichten eines Redis Clusters: Schritt für Schritt

Dieser Abschnitt bietet eine praktische Schritt-für-Schritt-Anleitung zur Erstellung eines grundlegenden Redis Clusters. Der Einfachheit halber gehen wir davon aus, dass Sie einen Cluster auf einer einzelnen Maschine einrichten und dabei verschiedene Ports für jeden Knoten verwenden. In einer Produktionsumgebung würden Sie diese Knoten typischerweise auf verschiedene physische oder virtuelle Maschinen verteilen.

1. Redis installieren

Wenn Redis noch nicht installiert ist, folgen Sie der offiziellen Redis-Installationsanleitung für Ihr Betriebssystem. Zum Beispiel unter Debian/Ubuntu:

sudo apt update
sudo apt install redis-server

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

Für jeden Knoten in Ihrem Cluster benötigen Sie eine separate Redis-Konfigurationsdatei. Erstellen Sie Verzeichnisse für jeden Knoten und kopieren Sie die Standarddatei redis.conf.

Nehmen wir an, wir richten für diese Ersteinrichtung einen primären 3-Knoten-Cluster ohne Replikas ein. Wir verwenden die Ports 7000, 7001 und 7002.

# Verzeichnisse für jeden Knoten erstellen
mkdir cluster
cd cluster
mkdir 7000 7001 7002

# redis.conf in jedes Verzeichnis kopieren
cp /etc/redis/redis.conf ./7000/
cp /etc/redis/redis.conf ./7001/
cp /etc/redis/redis.conf ./7002/

Bearbeiten Sie nun die Konfigurationsdatei für jeden Knoten. Nehmen Sie für 7000/redis.conf, 7001/redis.conf und 7002/redis.conf die folgenden Änderungen vor:

  • port 700X (wobei X 0, 1 oder 2 ist)
  • cluster-enabled yes
  • cluster-config-file nodes-700X.conf (Diese Datei wird von Redis selbst verwaltet und sollte nicht manuell bearbeitet werden. Sie speichert den Cluster-Zustand.)
  • cluster-node-timeout 5000 (Empfohlenes Timeout in Millisekunden, bis ein Knoten als ausgefallen gilt.)
  • appendonly yes (Empfohlen für Datenbeständigkeit, insbesondere in der Produktion)

Beispiel für 7000/redis.conf:

port 7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes
# Stellen Sie sicher, dass bind auf 0.0.0.0 oder die korrekte IP eingestellt ist, wenn Sie auf einer Remote-Maschine laufen
bind 0.0.0.0

Wiederholen Sie diese Änderungen für 7001/redis.conf (Port 7001) und 7002/redis.conf (Port 7002).

3. Redis-Instanzen starten

Starten Sie jede Redis-Instanz mit ihrer spezifischen Konfigurationsdatei:

redis-server ./7000/redis.conf
redis-server ./7001/redis.conf
redis-server ./7002/redis.conf

Wenn Redis als Dienst ausgeführt wird, müssen Sie möglicherweise die Standardinstanz (sudo systemctl stop redis-server) beenden und die Instanzen wie oben gezeigt manuell starten, oder mehrere Dienstdateien konfigurieren.

4. Cluster mit redis-trib.rb erstellen

Das Skript redis-trib.rb ist ein Ruby-Gem, das die automatisierte Erstellung eines Redis Clusters unterstützt. Es ist in den Redis-Distributionen enthalten.

Navigieren Sie zu dem Verzeichnis, in dem sich redis-trib.rb befindet (oft in /usr/share/redis/, oder Sie müssen es in Ihrer Redis-Installation finden). Möglicherweise müssen Sie Ruby installieren, falls es nicht vorhanden ist (sudo apt install ruby-full).

Führen Sie das Skript aus, um einen Cluster mit 3 Master-Knoten zu erstellen:

# Stellen Sie sicher, dass Sie sich im Cluster-Verzeichnis befinden oder geben Sie die vollständigen Pfade an
# ruby /path/to/redis/src/redis-trib.rb create --replicas 0 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002

# Oder wenn redis-trib.rb in Ihrem PATH ist
redis-trib.rb create --replicas 0 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002

Dieser Befehl:
* create: Weist redis-trib.rb an, einen neuen Cluster zu erstellen.
* --replicas 0: Gibt an, dass wir 0 Replikas pro Master wünschen. Für eine Produktionsumgebung würden Sie --replicas 1 (oder mehr) verwenden.
* 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002: Listet die Knoten auf, die am Cluster teilnehmen werden.

Das Skript wird um Bestätigung bitten. Geben Sie yes ein, um fortzufahren. Es wird dann jedem Master-Knoten Hash-Slots zuweisen und den Cluster konfigurieren.

5. Cluster überprüfen

Nachdem redis-trib.rb abgeschlossen ist, können Sie sich mit einem beliebigen Knoten verbinden und den Cluster-Status überprüfen:

redis-cli -c -p 7000
CLUSTER INFO
CLUSTER NODES

Der Befehl CLUSTER INFO sollte cluster_state:ok anzeigen. Der Befehl CLUSTER NODES listet alle Knoten im Cluster, ihre Rollen und ihre zugewiesenen Slots auf.

Tipp: Verwenden Sie das Flag -c mit redis-cli (redis-cli -c), um den Cluster-Modus zu aktivieren. Dies ermöglicht es redis-cli, Befehle automatisch an den richtigen Knoten umzuleiten, wenn eine Hash-Slot-Migration oder Umleitung erforderlich ist.

Replikas zu einem bestehenden Cluster hinzufügen

Für hohe Verfügbarkeit sollten Sie Replikas hinzufügen. Fügen wir eine Replika für den Knoten an Port 7000 (Master) an Port 7003 hinzu.

  1. Neuen Knoten konfigurieren: Erstellen Sie ein neues Verzeichnis (z.B. cluster/7003), kopieren Sie redis.conf und aktualisieren Sie es für Port 7003, aktivieren Sie den Cluster-Modus und legen Sie die cluster-config-file fest.
    ini port 7003 cluster-enabled yes cluster-config-file nodes-7003.conf cluster-node-timeout 5000 appendonly yes bind 0.0.0.0
  2. Neuen Knoten starten: redis-server ./7003/redis.conf
  3. Replika mit redis-trib.rb hinzufügen: Verbinden Sie sich mit Ihrem bestehenden Cluster über redis-cli -c -p 7000 und verwenden Sie den Befehl CLUSTER REPLICATE oder redis-trib.rb erneut. Die Verwendung von redis-trib.rb ist für die Ersteinrichtung im Allgemeinen einfacher.

    ```bash

    Beispiel für die Verwendung von redis-trib.rb zum Hinzufügen einer Replika für Knoten 7000

    Sie benötigen die Knoten-ID des Masters, den Sie replizieren möchten.

    Rufen Sie zuerst die Knoten-ID ab: redis-cli -p 7000 CLUSTER NODES

    Nehmen wir an, die Master-Knoten-ID ist 'your_master_node_id'

    redis-trib.rb --cluster-add-node 127.0.0.1:7003 --cluster-slave --cluster-master-id 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002
    `` *Hinweis*: Der Befehlredis-trib.rbzum Hinzufügen von Knoten kann etwas komplex sein. Ein einfacherer Ansatz zum Hinzufügen von Replikas besteht darin, zuerst die neue Replika-Instanz hochzufahren, sich dann überredis-climit dem Master-Knoten zu verbinden und den BefehlCLUSTER REPLICATE ` auszuführen.

    Alternativ können Sie redis-trib.rb verwenden, um einen bestehenden Cluster mit Replikas neu zu konfigurieren:

    ```bash

    Beispiel zum Hinzufügen von Replikas zu einem bestehenden 3-Master-Cluster

    redis-trib.rb replace-node-master --replicas 1 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
    ```
    Dieser Befehl ist komplexer und setzt voraus, dass Sie zusätzliche Knoten (7003, 7004, 7005) als Replikas konfiguriert haben.

6. Cluster verwalten

  • Knoten hinzufügen/entfernen: Sie können neue Master-Knoten und Replikas hinzufügen, um den Cluster zu skalieren. redis-trib.rb oder manuelle Befehle können verwendet werden. Das Entfernen von Knoten erfordert zuerst die Migration von Slots von diesem Knoten.
  • Failover: Redis Cluster behandelt Failover automatisch. Wenn ein Master-Knoten unerreichbar wird, versuchen seine Replikas, befördert zu werden. Sie können Fehler mit CLUSTER FAILOVER (auf einer Replika) oder durch Stoppen eines Knotens simulieren.
  • Slots verschieben: Sie können Hash-Slots manuell zwischen Master-Knoten verschieben, indem Sie die Befehle CLUSTER SETSLOT <slot> IMPORTING/NODE und MIGRATE verwenden. Dies ist nützlich, um den Cluster neu auszugleichen oder einen Knoten zur Entfernung vorzubereiten.

Bewährte Praktiken für Redis Cluster

  • Mindestens 6 Knoten verwenden: Ein produktionsreifer Cluster sollte für Fehlertoleranz mindestens 3 Master und 3 Replikas (eine Replika pro Master) haben.
  • Knoten über Verfügbarkeitszonen verteilen: Bei Cloud-Bereitstellungen sollten Knoten in verschiedenen Verfügbarkeitszonen platziert werden, um sich vor Zonen-weiten Ausfällen zu schützen.
  • Cluster überwachen: Verwenden Sie die Überwachungstools von Redis und externe Überwachungssysteme, um Leistung, Speichernutzung und Knotenzustand zu verfolgen.
  • protected-mode no konfigurieren: Wenn Sie Redis Cluster in einem Netzwerk betreiben, stellen Sie sicher, dass protected-mode no in Ihrer redis.conf eingestellt ist und verwenden Sie eine Firewall, um den Zugriff zu beschränken.
  • appendonly yes verwenden: Für Datenbeständigkeit stellen Sie sicher, dass die Append-Only-Datei-Persistenz aktiviert ist.
  • Unterstützung der Client-Bibliothek: Stellen Sie sicher, dass Ihre Redis-Client-Bibliothek Redis Cluster unterstützt und Umleitungen korrekt verarbeitet.

Fazit

Die Einrichtung eines Redis Clusters ist ein entscheidender Schritt für Anwendungen, die hohe Verfügbarkeit und horizontale Skalierbarkeit erfordern. Indem Sie die Kernkonzepte von Sharding, Replikation und Cluster-Kommunikation verstehen, können Sie einen robusten Redis Cluster erfolgreich bereitstellen und verwalten. Denken Sie daran, Ihre Cluster-Topologie zu planen, deren Zustand zu überwachen und bewährte Praktiken zu befolgen, um optimale Leistung und Zuverlässigkeit zu gewährleisten.