Necesidad del Modo Centinela
En replicación maestro-esclavo de Redis, ya sea en topología de un maestro con múltiples esclavos o en cadenas jerárquicas, el fallo del nodo maestro requiere intervención manual para promover un esclavo. Este proceso implica ejecutar comandos como:
REPLICAOF NO ONE
La configuración manual es propensa a errores y causa tiempos de inactividad, reduciendo la disponibilidad. Para automatizar esta conmutación, se introduce el modo centinela, que supervisa los nodos y ejecuta la elección de un nuevo maestro cuando se detecta una falla.
El modo centinela es un sistema dedicado a monitorear instancias de Redis, implementar la detección de fallos y realizar la transferencia automática del rol de maestro para mantener la continuidad del servicio.
Configuración de un Clúster de Centinelas
Un clúster típico consta de tres nodos centinela y tres nodos de datos (un maestro y dos esclavos). Primero, se despliega la replicación maestro-esclavo. Luego, se configuran los centinelas mediante archivos de configuración dedicados.
Por ejemplo, crear tres archivos de configuración con parámetros similares pero puertos y rutas de log diferentes:
# Archivo: sentinel-node-6380.conf
port 6380
daemonize yes
dir "/var/lib/redis"
logfile "sentinel-6380.log"
# Supervisar el nodo maestro denominado "redis-primary" en la dirección 192.168.1.100, puerto 6379
# Se requiere el acuerdo de al menos 2 centinelas para iniciar una conmutación por error
sentinel monitor redis-primary 192.168.1.100 6379 2
# Tiempo en milisegundos para considerar un nodo como no disponible
sentinel down-after-milliseconds redis-primary 15000
sentinel parallel-syncs redis-primary 1
sentinel failover-timeout redis-primary 200000
Iniciar cada centinela con el comando correspondiente:
redis-server ./sentinel-node-6380.conf --sentinel
Para verificar el estado, conectarse a un centinela y consultar la información:
redis-cli -p 6380
SENTINEL MASTER redis-primary
Al detener el maestro original, el clúster elige automáticamente un nuevo maestro. Si el nodo original se reinicia, se reintegra como esclavo.
Comunicación entre Centinelas mediante Publicación/Suscripción
Los centinelas se descubren y coordinan usando el patrón publicación/suscripción en un canal predefinido. Cada 2 segundos, cada centinela publica un mensaje en el canal __sentinel__:hello a través de los nodos que supervisa.
Simultáneamente, cada centinela se suscribe al mismo canal para recibir mensajes de otros. Esto permite el intercambio de metadatos, como la dirección del centinela, su identificador único, la época actual (epoch), y detalles del nodo maestro supervisado.
El número de época se incermenta con cada cambio de estado en el clúster, ayudando a coordinar las elecciones y evitar conflictos.
Ventajas y Limitaciones
Ventajas:
- Hereda la escalabilidad y redundancia de la replicación maestro-esclavo.
- Automatiza la conmutación por error, mejorando significativamente la disponibilidad del sistema.
- Evita la intervención manual, haciendo el entorno más robusto ante fallos.
Limitaciones:
- La escalabilidad horizontal en caliente es compleja; añadir nodos requiere reconfiguración manual.
- La configuración inicial de los centinelas puede ser detallada y propensa a errores si no se gestiona adecuadamente.