DBAtlas · Atlas d'exploitation des bases de données

Haute disponibilité avec Redis Sentinel + Cluster

Symptôme

Objectif : mettre en place un déploiement master-réplica avec failover automatique pour Redis à l'aide de Sentinel ; passer en mode Redis Cluster si une mise à l'échelle horizontale est nécessaire.

1. Configurez le master et les réplicas

Exécutez un master et au moins deux réplicas. Les réplicas suivent le master avec REPLICAOF ('replicaof <host> <port>' peut aussi être écrit dans redis.conf). Activez AOF ou RDB pour la persistance ; l'authentification avec requirepass/masterauth est recommandée.

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. Configurez Sentinel avec monitor et quorum

Définissez le master à surveiller et le quorum dans le sentinel.conf de chaque nœud Sentinel. quorum est le nombre minimal de Sentinels requis pour considérer le master 'down'. En production, 3 Sentinels sur 3 serveurs distincts sont recommandés (contre le 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. Démarrez les processus Sentinel

Démarrez Sentinel sur chaque nœud. Les Sentinels se découvrent automatiquement entre eux ainsi que les réplicas ; ils écrivent la configuration dans le fichier à l'exécution. sentinel.conf doit donc être accessible en écriture.

Redis

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

4. Interrogez l'état via Sentinel et testez le failover

Interrogez le master courant et les réplicas avec les commandes SENTINEL. Les applications doivent connaître le master courant en interrogeant Sentinel avec 'get-master-addr-by-name'. Vérifiez la bascule automatique avec un failover planifié.

Redis

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

5. Alternative : partitionnez les données avec Redis Cluster

Si la mémoire/le débit d'un seul master ne suffit pas, utilisez Redis Cluster : les données sont découpées en 16384 hash slots répartis sur plusieurs masters ; chaque master a son propre réplica. L'application doit utiliser un client compatible cluster. Mettez-le en place avec redis-cli --cluster create.

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. Vérifiez l'état du cluster

Une fois le cluster créé, vérifiez que tous les slots sont assignés et que les nœuds sont connectés. cluster_state doit valoir 'ok' et les 16384 slots doivent apparaître assignés. Surveillez la répartition des nœuds et des slots avec les commandes CLUSTER.

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
Ouvrir dans DBAtlas →