DEV Community

William Rodriguez
William Rodriguez

Posted on

Alta disponibilidad de nivel empresarial en Redis: Sentinel y Cluster con WRedis

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

  1. Redis Sentinel (SentinelRedisManager): Monitoreo continuo de salud y failover automatizado del nodo maestro. Cuando el nodo maestro cae, Sentinel elige una nueva réplica y wredis enruta las escrituras de forma transparente sin necesidad de reiniciar tu aplicación.
  2. 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"))
Enter fullscreen mode Exit fullscreen mode

🚀 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"))
Enter fullscreen mode Exit fullscreen mode

💡 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.

  • GitHub: https://github.com/wisrovi/wredis

  • PyPI: https://pypi.org/project/wredis/

redis #python #spanish #devops #backend

Top comments (0)