Alta disponibilidad de nivel empresarial en Redis: Sentinel y Cluster con WRedis
Día 08 de la serie técnica Wisrovi Open Source Architecture.
Cuando tu capa de caché o de estado distribuido falla, toda tu infraestructura de microservicios colapsa. Las configuraciones de un solo nodo de Redis son bombas de tiempo en entornos de producción críticos.
wredis ofrece abstracciones de Alta Disponibilidad (HA) listas para producción mediante SentinelRedisManager y ClusterRedisManager.
🛡️ La Arquitectura: Conmutación por Error y Sharding Automático
-
Redis Sentinel (
SentinelRedisManager): Monitoreo continuo de salud y failover automatizado del nodo maestro. Cuando el nodo maestro cae, Sentinel elige una nueva réplica ywredisenruta las escrituras de forma transparente sin necesidad de reiniciar tu aplicación. -
Redis Cluster (
ClusterRedisManager): Distribución horizontal a lo largo de 16.384 slots hash con replicación multinodo, redireccionamientos automáticos (MOVED/ASK) y enrutamiento sub-milisegundo.
💻 Configuración de Sentinel: Conmutación sin Interrupciones
from wredis.ha.sentinel import SentinelRedisManager
sentinel_manager = SentinelRedisManager(
sentinel_nodes=[
("sentinel-1.prod.internal", 26379),
("sentinel-2.prod.internal", 26379),
("sentinel-3.prod.internal", 26379),
],
service_name="mymaster",
socket_timeout=3.0,
verbose=True
)
# Conecta directamente al nodo maestro elegido dinámicamente
client = sentinel_manager.get_master()
client.set("cluster:state", "healthy", ex=300)
# Obtiene una réplica de solo lectura para descarga de consultas
slave_client = sentinel_manager.get_slave()
print("Estado réplica:", slave_client.get("cluster:state"))
🚀 Gestión de Clúster Distribuido
from wredis.ha.cluster import ClusterRedisManager
cluster_manager = ClusterRedisManager(
startup_nodes=[
("redis-node-1.internal", 7000),
("redis-node-2.internal", 7001),
("redis-node-3.internal", 7002),
],
password="token-seguro-de-cluster",
decode_responses=True,
max_redirects=3
)
cluster = cluster_manager.get_client()
cluster.set("user:session:98421", "payload_activo")
print("Sesión de usuario:", cluster.get("user:session:98421"))
💡 Por qué los equipos de ingeniería eligen WRedis
- Reconexiones Resilientes: Políticas transparentes de reintentos con backoff exponencial ante cambios de topología.
-
Soporte Dual Async y Sync: Interfaces idénticas y limpias tanto para pipelines asíncronos de alto rendimiento (
asyncio) como para microservicios síncronos. Cero Lock-In: Wrapper en Python puro sobre los drivers canónicos de Redis, verificado con suites completas de pruebas de estrés e integración.
Top comments (0)