BookinglyTech News
Infraestructura

El failover de Redis Sentinel tarda lo que marca down-after más unos dos segundos

Quince caídas provocadas del primario, tres configuraciones de down-after y tres motores distintos dan una regla simple: el corte de escrituras es down-after más un coste fijo de unos dos segundos.

2 min de lecturaDev.to0 vistas

Matar el primario de Redis a propósito quince veces y cronometrar cuánto tiempo fallan las escrituras hasta que una réplica toma el relevo. Ese es el experimento: tres valores de down-after-milliseconds, tres motores (Redis 8, Valkey 8 y Dragonfly) y una conclusión que cabe en una línea. La ventana de indisponibilidad equivale a down-after más unos dos segundos de votación de quórum, elección de líder y promoción de la réplica.

Los números, medidos como el hueco entre el kill del primario y la primera escritura que funciona en la réplica promocionada, con media de tres ejecuciones:

  • down-after 1.000 ms → 2,5 s de corte
  • down-after 5.000 ms, el valor por defecto habitual → 7,3 s
  • down-after 10.000 ms → 12,1 s

La relación es casi lineal: outage ≈ down-after + ~2 s. Ese sobrecoste es fijo y corresponde al mecanismo de Sentinel; down-after es la única palanca que se controla, y es justo la que casi nadie toca. Quien deja el valor por defecto está regalando siete segundos de escrituras perdidas sin haberlo decidido nunca.

El motor no cambia nada

Con down-after en 5 s, Redis 8, Valkey 8 y Dragonfly volvieron en 7,3–7,4 s bajo los mismos centinelas. La interrupción pertenece a Sentinel, no al motor que se muere. Cambiar de implementación no compra milisegundos en el failover.

El montaje es un primario, dos réplicas y tres centinelas en Docker, sin puertos expuestos al host y con limpieza completa al terminar. El kill, el script y el barrido que produce la tabla están en el repositorio del laboratorio: un docker compose up y se puede reproducir.

Por qué importa

El escenario típico es una aplicación escalada en varias instancias detrás de un balanceador, todas hablando a un único Redis donde viven caché, sesiones y colas de trabajo. Cuando ese nodo cae, no se cae una instancia: se cae el estado compartido de todas a la vez. La caché se enfría y las peticiones van a la base de datos en tromba, las sesiones desaparecen y el procesamiento en segundo plano se para. Añadir servidores de aplicación no arregla nada de eso; lo que lo arregla es que Redis sobreviva a la pérdida de un nodo, que es para lo que está Sentinel.

Hay una condición que se olvida con frecuencia: el cliente tiene que ser consciente de Sentinel y preguntar quién es el maestro en cada momento. Si apunta a una IP fija, el failover no sirve de nada. En el caso de Laravel, eso pasa por un cliente preparado, como laravel-redis-sentinel para las conexiones de la aplicación.

Queda por ver cómo se ajusta down-after en producción. Bajarlo recorta el corte pero multiplica los falsos positivos ante un hipo de red; subirlo da margen a la detección a cambio de segundos de escrituras rechazadas. Los dos segundos de promoción no se negocian; el dial sí, y ahora hay medidas para elegir con criterio en lugar de heredar el valor por defecto.