TL;DR — Resumen Rápido
Despliega Redis Sentinel para failover automático y alta disponibilidad. Configura quórum, topología master-réplica, clientes y seguridad en producción.
Redis Sentinel es la solución de alta disponibilidad integrada en Redis, que proporciona failover automático, monitoreo de topología y descubrimiento de servicios sin la complejidad de Redis Cluster. Esta guía cubre la arquitectura completa, un despliegue de tres nodos listo para producción, la configuración de clientes compatibles con Sentinel, los conceptos de quórum y los controles de seguridad necesarios antes de pasar a producción.
Requisitos Previos
- Tres servidores Linux (físicos o virtuales) con conectividad entre sí en los puertos 6379 (Redis) y 26379 (Sentinel).
- Redis 7.0 o superior instalado en todos los nodos.
- Acceso root o sudo en cada servidor.
- Familiaridad básica con archivos de configuración de Redis y
redis-cli.
Arquitectura de Sentinel
Redis Sentinel se ejecuta como un proceso separado junto a las instancias de Redis. Cada Sentinel cumple cuatro funciones:
- Monitoreo: Comprueba la salud del master y las réplicas cada segundo mediante
PING/INFO. - Notificación: Publica alertas en canales como
+switch-mastery+slavemediante pub/sub. - Failover automático: Al alcanzar el quórum, Sentinel elige un líder, promueve la mejor réplica y reconfigura las demás.
- Proveedor de configuración: Los clientes consultan Sentinel con
SENTINEL get-master-addr-by-namepara descubrir la dirección del master actual.
¿Por Qué Tres Sentinels?
Un único Sentinel es un punto único de fallo. Con dos Sentinels puede producirse un empate en la votación. Tres Sentinels con quórum 2 garantizan:
- Un Sentinel puede fallar y el failover sigue funcionando.
- Dos Sentinels cualesquiera pueden acordar promover un nuevo master.
- La minoría no puede desencadenar una promoción que provoque split-brain.
Siempre despliegue un número impar de Sentinels (3, 5 o 7).
Paso 1 — Configurar el Master de Redis
En el Servidor 1 (192.168.1.101), edite /etc/redis/redis.conf:
bind 0.0.0.0
port 6379
protected-mode no
requirepass "ContraseñaFuerteRedis123"
masterauth "ContraseñaFuerteRedis123"
# Persistencia (AOF recomendado para despliegues con Sentinel)
appendonly yes
appendfsync everysec
# Protección split-brain: rechaza escrituras si ninguna réplica ha sincronizado en 10s
min-replicas-to-write 1
min-replicas-max-lag 10
Inicie y habilite Redis:
sudo systemctl start redis-server
sudo systemctl enable redis-server
Paso 2 — Configurar las Réplicas de Redis
En el Servidor 2 (192.168.1.102) y el Servidor 3 (192.168.1.103), edite /etc/redis/redis.conf:
bind 0.0.0.0
port 6379
protected-mode no
requirepass "ContraseñaFuerteRedis123"
masterauth "ContraseñaFuerteRedis123"
# Apuntar al master inicial
replicaof 192.168.1.101 6379
# Las réplicas rechazan comandos de escritura de clientes (predeterminado seguro)
replica-read-only yes
# Persistencia
appendonly yes
appendfsync everysec
# Prioridad de promoción de réplica (menor = preferida; 0 = nunca promover)
replica-priority 100
Verifique la replicación desde el master:
redis-cli -a "ContraseñaFuerteRedis123" INFO replication
Debería ver role:master y dos entradas slave con state:online.
Paso 3 — Configurar Redis Sentinel
Cree /etc/redis/sentinel.conf en los tres servidores:
port 26379
daemonize yes
logfile "/var/log/redis/sentinel.log"
dir /var/lib/redis
# Monitorear el master llamado "mymaster" con quórum 2
sentinel monitor mymaster 192.168.1.101 6379 2
# Contraseña para autenticarse con el master (y réplicas tras el failover)
sentinel auth-pass mymaster ContraseñaFuerteRedis123
# Marcar el master como SDOWN tras 5 segundos sin respuesta
sentinel down-after-milliseconds mymaster 5000
# Tiempo máximo para el proceso completo de failover (ms)
sentinel failover-timeout mymaster 60000
# Solo una réplica sincroniza del nuevo master a la vez
sentinel parallel-syncs mymaster 1
Inicie Sentinel en los tres servidores:
sudo redis-sentinel /etc/redis/sentinel.conf
Verifique el descubrimiento de topología:
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
El Proceso de Failover Paso a Paso
- SDOWN (Subjetivamente Caído): Un Sentinel deja de recibir
PONGdel master dentro del tiempodown-after-millisecondsy lo marca como SDOWN. - ODOWN (Objetivamente Caído): El Sentinel difunde
SENTINEL is-master-down-by-addra sus pares. Cuando el número de quórum responde afirmativamente, el estado pasa a ODOWN. - Elección de líder: Los Sentinels que están de acuerdo sobre ODOWN votan por un líder usando el algoritmo similar a Raft integrado en Sentinel.
- Selección de réplica: El líder clasifica las réplicas por: tiempo de desconexión del master →
replica-priority(menor gana) → offset de replicación (más datos gana) → run ID léxico. - Promoción: El líder envía
REPLICAOF NO ONEa la réplica elegida, convirtiéndola en el nuevo master. - Reconfiguración: Las demás réplicas reciben
REPLICAOF <nueva-ip-master> 6379. Los Sentinels actualizan sus archivossentinel.conf. Los clientes que consulten Sentinel recibirán la nueva dirección del master.
El proceso completo suele terminar en 10–30 segundos con la configuración predeterminada.
Conexión de Clientes a Través de Sentinel
Nunca codifique en duro la IP del master de Redis en su aplicación. Use un cliente compatible con Sentinel que consulte Sentinel para obtener el master actual.
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="ContraseñaFuerteRedis123",
)
master = sentinel.master_for("mymaster", socket_timeout=0.5)
replica = sentinel.slave_for("mymaster", socket_timeout=0.5)
master.set("sesion:abc", "datos-usuario")
valor = replica.get("sesion: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: "ContraseñaFuerteRedis123",
sentinelPassword: "ContraseñaFuerteRedis123",
});
await redis.set("clave", "valor");
Seguridad en Producción
Proteger Sentinel
Añada requirepass a Sentinel para que solo los clientes autorizados puedan emitir comandos de Sentinel:
requirepass "ContraseñaAdminSentinel"
sentinel sentinel-pass ContraseñaAdminSentinel
Habilitar TLS
Redis 6.0+ admite TLS para conexiones de Redis y 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
Usar ACLs (Redis 6.0+)
# En redis.conf
aclfile /etc/redis/users.acl
# users.acl
user default off
user sentinel on >SentinelPass ~* &* +@all
user app on >AppPass ~sesion:* ~cache:* +GET +SET +DEL +EXPIRE
Comparativa: Sentinel vs Alternativas
| Característica | Sentinel | Redis Cluster | KeyDB | Dragonfly | Redis Gestionado |
|---|---|---|---|---|---|
| Failover automático | Sí | Sí | Sí | Sí | Sí |
| Particionamiento | No | Sí | Sí | No | Varía |
| Complejidad de configuración | Media | Alta | Baja | Baja | Ninguna |
| Requisito de cliente | Compatible Sentinel | Compatible Cluster | Estándar | Estándar | Estándar |
| Tamaño máximo del dataset | RAM de un nodo | RAM × shards | RAM de un nodo | RAM de un nodo | Limitado por plan |
| Coste | Gratis | Gratis | Gratis | Gratis | $$/mes |
| Ideal para | HA sin fragmentación | Datasets grandes | HA drop-in de Redis | Alto rendimiento | Sin gestión de infra |
Problemas Comunes y Advertencias
Sentinel reescribe su archivo de configuración. Nunca edite sentinel.conf manualmente mientras Sentinel está en ejecución — Sentinel actualiza continuamente el archivo con la topología descubierta.
DNS vs direcciones IP. Sentinel almacena las direcciones de master y réplica por IP en el momento del descubrimiento. Si cambia la IP de un servidor, Sentinel no seguirá los cambios de DNS — debe actualizar sentinel.conf manualmente y reiniciar Sentinel.
Lecturas obsoletas durante el failover. En los 10–30 segundos entre el fallo del master y la promoción de la réplica, las lecturas pueden devolver datos obsoletos. Diseñe la aplicación para tolerar lecturas brevemente obsoletas o para reintentar con un tiempo de espera.
requirepass sin masterauth. Si establece requirepass en el master pero olvida masterauth en las réplicas, la autenticación de replicación falla y las réplicas se desconectan silenciosamente.
Resumen
- Redis Sentinel proporciona monitoreo, failover automático y descubrimiento de servicios para Redis sin requerir Cluster.
- Despliegue al menos 3 instancias de Sentinel en hosts separados; configure quórum en 2 para un setup de 3 nodos.
- La secuencia de failover avanza de SDOWN → ODOWN → elección de líder → promoción de réplica → reconfiguración.
- Use
min-replicas-to-writeymin-replicas-max-lagen el master para prevenir la pérdida de datos por split-brain. - Siempre use un cliente compatible con Sentinel — nunca codifique en duro la IP del master.
- Proteja Sentinel con
requirepass, ACLs y TLS en entornos de producción.