Actualmente en pruebas: el código de GitHub se abrirá al finalizar.

Parámetros de Raft

ElementoValor
Intervalo de heartbeat500 ms (cluster_heartbeat_ms)
Tiempo para declarar falta de respuesta2000 ms (cluster_election_timeout_ms) — si el heartbeat falta durante ese tiempo, se da al líder por muerto
Ventana real de inicio de la elección1750-2000 ms — se sortea al azar en cada nodo para evitar candidatos simultáneos (split vote). El peor caso es exactamente el tiempo de falta de respuesta configurado
Parada del cliente ante el fallo del lídermedido: tiempo de falta de respuesta + 0,3-0,5 s (unos 2,3-2,5 s con los valores por defecto) — detección más una redirección
Número de nodos3 o 5 (impuesto al cargar la configuración — cualquier otro valor rechaza el arranque)
ID de nodosu posición (cluster_self) en la lista cluster_peers — por eso el orden de la lista debe ser idéntico en todos los nodos
Bootstrap500 ms tras el arranque, todos los nodos se inicializan con la misma membresía — se ignora si se une a un clúster ya inicializado
Almacenamiento del logen memoria (volátil) — un nodo reiniciado se recupera vía replicación/snapshot
Detección de expiración de leaseel líder comprueba cada 100 ms y confirma Expire mediante consenso
Granularidad del timeout de waitel timeout de espera (T) también se decide en el mismo tick de 100 ms — puede llegar hasta 100 ms tarde
Aviso de cambio de lídercuando el líder cambia, se envía de inmediato una L a todos los clientes conectados

Cómo elegir el heartbeat y el tiempo de falta de respuesta

Ambos valores se ajustan en la configuración mediante cluster_heartbeat_ms y cluster_election_timeout_ms. El tiempo de falta de respuesta (T) es exactamente el tiempo que el servicio queda parado cuando falla el líder; a la inversa, un valor demasiado corto hace que un líder vivo se juzgue muerto y provoca elecciones innecesarias.

heartbeat / TVentana de detecciónPeor retraso al matar al líder (medido)Entorno recomendado
100 ms / 600 ms450-600 msunos 0,9 smismo rack / misma AZ, latencia muy estable
100 ms / 1000 ms750-1000 msunos 1,2 smisma AZ
250 ms / 2500 ms1875-2500 msunos 2,8 svarias AZ
500 ms / 2000 ms1750-2000 msunos 2,4 spor defecto — equilibrio para varias AZ
500 ms / 5000 ms3750-5000 msunos 5,3 sentre regiones, latencia con grandes variaciones
  • La latencia en operación normal no se ve afectada por estos valores (la p50 medida no cambia) — solo determinan el tiempo de recuperación ante un fallo.
  • La caída de un seguidor no afecta a los clientes con ninguno de los valores. Los retrasos anteriores solo ocurren cuando cae el líder.
  • Restricciones: cluster_election_timeout_ms debe ser de al menos 600 ms y como mínimo 4× el heartbeat. (Se ha medido que un solo retraso de planificación bajo carga puede engullir dos heartbeats enteros.)

Por qué 3 o 5 nodos

Un commit necesita una mayoría. Una configuración con un número par de nodos solo añade coste sin añadir tolerancia a fallos, así que el servidor la rechaza.

Número de nodosMayoríaFallos simultáneos tolerados
220 — un solo fallo detiene el clúster. No mejor que el modo único
321
431 — igual que con 3 nodos, solo que cuesta más
532

Resumen del comportamiento ante fallos

SituaciónComportamiento
Solicitud de cliente a un nodo que no es el líderM (dirección del líder), o E no_leader si el líder se desconoce
Fallo del lídernuevo líder elegido dentro del tiempo de falta de respuesta configurado (1750-2000 ms por defecto). Las solicitudes durante esa ventana reciben E no_leader → el cliente reintenta
Durante el cambio de líderlas solicitudes de adquisición pendientes se resuelven con M/E no_leader, y el cliente reintenta contra el nuevo líder
Reinicio de nodoarranca con estado vacío → se pone al día vía la replicación del log/snapshot de un par
Pérdida de la mayoríalos commits se vuelven imposibles → las escrituras se detienen (seguridad ante todo), y se reanudan automáticamente en cuanto se restaura la mayoría

Terminología

  • Quorum — más de la mitad de todos los nodos (2 de 3, o 3 de 5). Como cualquier decisión requiere el acuerdo del quorum, dos grupos separados por una partición nunca pueden confirmar decisiones contradictorias a la vez.
  • Timeout de elección — cuánto espera un seguidor sin heartbeat antes de concluir que el líder ha muerto e iniciar una elección. Se aleatoriza por nodo para reducir candidaturas simultáneas.