DBAtlas · Atlas für Datenbankbetrieb

Hochverfügbarkeit mit Redis Sentinel + Cluster

Symptom

Ziel: eine Master-Replica-Umgebung mit automatischem Failover für Redis per Sentinel einrichten; bei Bedarf an horizontaler Skalierung in den Redis-Cluster-Modus wechseln.

1. Master und Replicas konfigurieren

Betreibe einen Master und mindestens zwei Replicas. Replicas folgen dem Master mit REPLICAOF ('replicaof <host> <port>' kann auch in redis.conf stehen). Aktiviere AOF oder RDB für Persistenz; Authentifizierung mit requirepass/masterauth wird empfohlen.

Redis

# at runtime on the replica nodes:
REPLICAOF 10.0.0.10 6379
# to make it persistent, redis.conf:
# replicaof 10.0.0.10 6379
# masterauth secret
INFO replication

2. Sentinel mit monitor und quorum konfigurieren

Definiere in der sentinel.conf jedes Sentinel-Knotens den zu überwachenden Master und das Quorum. quorum ist die Mindestanzahl an Sentinels, die nötig ist, um den Master als 'down' zu betrachten. In Produktion werden 3 Sentinels auf 3 separaten Servern empfohlen (gegen Split-Brain).

Redis

# sentinel.conf:
sentinel monitor mymaster 10.0.0.10 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1

3. Sentinel-Prozesse starten

Starte Sentinel auf jedem Knoten. Sentinels erkennen sich gegenseitig und die Replicas automatisch; sie schreiben die Konfiguration zur Laufzeit in die Datei. Daher muss sentinel.conf beschreibbar sein.

Redis

redis-sentinel /etc/redis/sentinel.conf
# or:
redis-server /etc/redis/sentinel.conf --sentinel

4. Status über Sentinel abfragen und Failover testen

Frage den aktuellen Master und die Replicas mit SENTINEL-Befehlen ab. Anwendungen sollten den aktuellen Master erfahren, indem sie Sentinel mit 'get-master-addr-by-name' fragen. Prüfe das automatische Umschalten mit einem geplanten Failover.

Redis

SENTINEL master mymaster
SENTINEL get-master-addr-by-name mymaster
SENTINEL replicas mymaster
# planned switchover:
SENTINEL failover mymaster

5. Alternative: Daten mit Redis Cluster partitionieren

Reichen Speicher/Durchsatz eines einzelnen Masters nicht aus, nutze Redis Cluster: Die Daten werden in 16384 Hash Slots aufgeteilt und auf mehrere Master verteilt; jeder Master hat eine eigene Replica. Die Anwendung muss einen clusterfähigen Client verwenden. Richte ihn mit redis-cli --cluster create ein.

Redis

redis-cli --cluster create \
  10.0.0.11:6379 10.0.0.12:6379 10.0.0.13:6379 \
  10.0.0.21:6379 10.0.0.22:6379 10.0.0.23:6379 \
  --cluster-replicas 1

6. Cluster-Zustand prüfen

Prüfe nach dem Erstellen des Clusters, dass alle Slots zugewiesen und die Knoten verbunden sind. cluster_state sollte 'ok' sein, und alle 16384 Slots sollten als zugewiesen erscheinen. Überwache die Verteilung von Knoten und Slots mit CLUSTER-Befehlen.

Redis

redis-cli --cluster check 10.0.0.11:6379
redis-cli -c -h 10.0.0.11 CLUSTER INFO
redis-cli -c -h 10.0.0.11 CLUSTER NODES
In DBAtlas öffnen →