TL;DR — Résumé Rapide

Déployez Redis Sentinel pour le basculement automatique et la haute disponibilité. Configurez le quorum, la topologie master-réplique et la sécurité.

Redis Sentinel est la solution de haute disponibilité intégrée à Redis, offrant un basculement automatique, la surveillance de la topologie et la découverte de services sans la complexité de Redis Cluster. Ce guide couvre l’architecture complète, un déploiement à trois nœuds prêt pour la production, la configuration des clients compatibles Sentinel, les concepts de quorum et les contrôles de sécurité nécessaires avant la mise en production.

Prérequis

  • Trois serveurs Linux (physiques ou virtuels) joignables les uns des autres sur les ports 6379 (Redis) et 26379 (Sentinel).
  • Redis 7.0 ou supérieur installé sur tous les nœuds.
  • Accès root ou sudo sur chaque serveur.
  • Familiarité de base avec les fichiers de configuration Redis et redis-cli.

Architecture de Sentinel

Redis Sentinel s’exécute comme un processus séparé aux côtés de vos instances Redis. Chaque Sentinel remplit quatre rôles :

  • Surveillance : Vérifie la santé du master et des répliques chaque seconde via PING/INFO.
  • Notification : Publie des alertes sur les canaux +switch-master, +slave et d’autres via pub/sub.
  • Basculement automatique : Lorsque le quorum est atteint, Sentinel élit un leader, promeut la meilleure réplique et reconfigure les autres.
  • Fournisseur de configuration : Les clients interrogent Sentinel avec SENTINEL get-master-addr-by-name pour découvrir l’adresse actuelle du master.

Pourquoi Trois Sentinels ?

Un seul Sentinel est un point unique de défaillance. Deux Sentinels peuvent créer une égalité lors du vote. Trois Sentinels avec quorum 2 garantissent :

  • Un Sentinel peut échouer et le basculement fonctionne encore.
  • Deux Sentinels quelconques peuvent s’entendre pour promouvoir un nouveau master.
  • La minorité ne peut pas déclencher une promotion qui provoquerait un split-brain.

Déployez toujours un nombre impair de Sentinels (3, 5 ou 7).


Étape 1 — Configurer le Master Redis

Sur le Serveur 1 (192.168.1.101), éditez /etc/redis/redis.conf :

bind 0.0.0.0
port 6379
protected-mode no

requirepass "MotDePasseRedisForte123"
masterauth "MotDePasseRedisForte123"

# Persistance (AOF recommandé pour les déploiements Sentinel)
appendonly yes
appendfsync everysec

# Protection split-brain : rejette les écritures si aucune réplique n'a synchronisé en 10s
min-replicas-to-write 1
min-replicas-max-lag 10

Démarrez et activez Redis :

sudo systemctl start redis-server
sudo systemctl enable redis-server

Étape 2 — Configurer les Répliques Redis

Sur le Serveur 2 (192.168.1.102) et le Serveur 3 (192.168.1.103), éditez /etc/redis/redis.conf :

bind 0.0.0.0
port 6379
protected-mode no

requirepass "MotDePasseRedisForte123"
masterauth "MotDePasseRedisForte123"

# Pointer vers le master initial
replicaof 192.168.1.101 6379

# Les répliques refusent les commandes d'écriture des clients (sécurisé par défaut)
replica-read-only yes

# Persistance
appendonly yes
appendfsync everysec

# Priorité de promotion de la réplique (plus faible = préféré ; 0 = ne jamais promouvoir)
replica-priority 100

Vérifiez la réplication depuis le master :

redis-cli -a "MotDePasseRedisForte123" INFO replication

Vous devriez voir role:master et deux entrées slave avec state:online.


Étape 3 — Configurer Redis Sentinel

Créez /etc/redis/sentinel.conf sur les trois serveurs :

port 26379
daemonize yes
logfile "/var/log/redis/sentinel.log"
dir /var/lib/redis

# Surveiller le master nommé "mymaster" avec quorum 2
sentinel monitor mymaster 192.168.1.101 6379 2

# Mot de passe pour s'authentifier auprès du master (et des répliques après le basculement)
sentinel auth-pass mymaster MotDePasseRedisForte123

# Marquer le master comme SDOWN après 5 secondes sans réponse
sentinel down-after-milliseconds mymaster 5000

# Délai maximum pour l'ensemble du processus de basculement (ms)
sentinel failover-timeout mymaster 60000

# Une seule réplique se synchronise depuis le nouveau master à la fois
sentinel parallel-syncs mymaster 1

Démarrez Sentinel sur les trois serveurs :

sudo redis-sentinel /etc/redis/sentinel.conf

Vérifiez la découverte de topologie :

redis-cli -p 26379 SENTINEL masters
redis-cli -p 26379 SENTINEL replicas mymaster
redis-cli -p 26379 SENTINEL sentinels mymaster
redis-cli -p 26379 SENTINEL ckquorum mymaster

Le Processus de Basculement Étape par Étape

  1. SDOWN (Subjectivement Hors Service) : Un Sentinel cesse de recevoir PONG du master dans le délai down-after-milliseconds et le marque comme SDOWN.
  2. ODOWN (Objectivement Hors Service) : Le Sentinel diffuse SENTINEL is-master-down-by-addr à ses pairs. Lorsque le nombre de quorum répond positivement, l’état passe à ODOWN.
  3. Élection du leader : Les Sentinels qui s’accordent sur ODOWN votent pour un leader en utilisant l’algorithme de type Raft intégré à Sentinel.
  4. Sélection de la réplique : Le leader classe les répliques selon : le temps de déconnexion du master → replica-priority (plus faible gagne) → le décalage de réplication (plus de données gagne) → l’ID de processus lexicographique.
  5. Promotion : Le leader envoie REPLICAOF NO ONE à la réplique choisie, en faisant le nouveau master.
  6. Reconfiguration : Les autres répliques reçoivent REPLICAOF <nouvel-ip-master> 6379. Les Sentinels mettent à jour leurs fichiers sentinel.conf. Les clients qui interrogent Sentinel reçoivent la nouvelle adresse du master.

L’ensemble du processus se termine généralement en 10–30 secondes avec les paramètres par défaut.


Connexion des Clients via Sentinel

Ne codez jamais en dur l’IP du master Redis dans votre application. Utilisez un client compatible Sentinel qui interroge Sentinel pour le master actuel.

Python (redis-py)

from redis.sentinel import Sentinel

sentinel = Sentinel(
    [
        ("192.168.1.101", 26379),
        ("192.168.1.102", 26379),
        ("192.168.1.103", 26379),
    ],
    socket_timeout=0.5,
    password="MotDePasseRedisForte123",
)

master = sentinel.master_for("mymaster", socket_timeout=0.5)
replica = sentinel.slave_for("mymaster", socket_timeout=0.5)

master.set("session:abc", "donnees-utilisateur")
valeur = replica.get("session:abc")

Node.js (ioredis)

const Redis = require("ioredis");

const redis = new Redis({
  sentinels: [
    { host: "192.168.1.101", port: 26379 },
    { host: "192.168.1.102", port: 26379 },
    { host: "192.168.1.103", port: 26379 },
  ],
  name: "mymaster",
  password: "MotDePasseRedisForte123",
  sentinelPassword: "MotDePasseRedisForte123",
});

await redis.set("cle", "valeur");

Sécurité en Production

Protéger Sentinel

Ajoutez requirepass à Sentinel pour que seuls les clients autorisés puissent émettre des commandes Sentinel :

requirepass "MotDePasseAdminSentinel"
sentinel sentinel-pass MotDePasseAdminSentinel

Activer TLS

Redis 6.0+ prend en charge TLS pour les connexions Redis et Sentinel :

tls-port 26380
port 0
tls-cert-file /etc/redis/tls/sentinel.crt
tls-key-file /etc/redis/tls/sentinel.key
tls-ca-cert-file /etc/redis/tls/ca.crt
tls-replication yes

Utiliser les ACL (Redis 6.0+)

# Dans redis.conf
aclfile /etc/redis/users.acl
# users.acl
user default off
user sentinel on >SentinelPass ~* &* +@all
user app on >AppPass ~session:* ~cache:* +GET +SET +DEL +EXPIRE

Comparaison : Sentinel vs Alternatives

FonctionnalitéSentinelRedis ClusterKeyDBDragonflyRedis Géré
Basculement automatiqueOuiOuiOuiOuiOui
Fragmentation des donnéesNonOuiOuiNonVariable
Complexité de configurationMoyenneÉlevéeFaibleFaibleAucune
Exigence clientCompatible SentinelCompatible ClusterStandardStandardStandard
Taille max du datasetRAM d’un nœudRAM × shardsRAM d’un nœudRAM d’un nœudLimité par le plan
CoûtGratuitGratuitGratuitGratuit$$/mois
Idéal pourHA sans fragmentationGrands datasetsHA drop-in RedisHaut débitSans gestion d’infra

Problèmes Courants et Mises en Garde

Sentinel réécrit son fichier de configuration. Ne modifiez jamais sentinel.conf manuellement pendant l’exécution de Sentinel — Sentinel met continuellement à jour le fichier avec la topologie découverte.

DNS vs adresses IP. Sentinel stocke les adresses du master et des répliques par IP au moment de la découverte. Si vous changez l’IP d’un serveur, Sentinel ne suivra pas les changements DNS.

Lectures obsolètes pendant le basculement. Dans les 10–30 secondes entre la défaillance du master et la promotion de la réplique, les lectures peuvent retourner des données obsolètes. Concevez votre application pour tolérer de brèves lectures obsolètes.

requirepass sans masterauth. Si vous définissez requirepass sur le master mais oubliez masterauth sur les répliques, l’authentification de réplication échoue et les répliques se déconnectent silencieusement.

Résumé

  • Redis Sentinel fournit la surveillance, le basculement automatique et la découverte de services pour Redis sans nécessiter Cluster.
  • Déployez au moins 3 instances Sentinel sur des hôtes séparés ; définissez le quorum à 2 pour une configuration à 3 nœuds.
  • La séquence de basculement progresse de SDOWN → ODOWN → élection du leader → promotion de la réplique → reconfiguration.
  • Utilisez min-replicas-to-write et min-replicas-max-lag sur le master pour éviter la perte de données par split-brain.
  • Utilisez toujours un client compatible Sentinel — ne codez jamais l’IP du master en dur.
  • Sécurisez Sentinel avec requirepass, ACL et TLS dans les environnements de production.

Articles Connexes