# Consenso Raft en el modo Swarm


Cuando Docker Engine se ejecuta en modo Swarm, los nodos administradores (managers) implementan el [Algoritmo de Consenso Raft](http://thesecretlivesofdata.com/raft/) para gestionar el estado global del clúster.

La razón por la cual el modo Swarm utiliza un algoritmo de consenso es para asegurar que todos los nodos administradores encargados de gestionar y planificar las tareas en el clúster almacenen el mismo estado de manera consistente.

Tener el mismo estado consistente en todo el clúster significa que, en caso de fallo, cualquier nodo administrador puede asumir las tareas y restaurar los servicios a un estado estable. Por ejemplo, si el administrador líder (Leader Manager), responsable de planificar las tareas en el clúster, falla inesperadamente, cualquier otro administrador puede asumir la tarea de planificación y rebalancear las tareas para que coincidan con el estado deseado.

Los sistemas que utilizan algoritmos de consenso para replicar registros en sistemas distribuidos requieren un cuidado especial. Estos algoritmos garantizan que el estado del clúster se mantenga consistente en presencia de fallos al requerir que una mayoría de nodos esté de acuerdo con los valores propuestos.

Raft tolera hasta `(N-1)/2` fallos y requiere una mayoría o quórum de `(N/2)+1` miembros para acordar los valores propuestos al clúster. Esto significa que en un clúster de 5 administradores que ejecutan Raft, si 3 nodos no están disponibles, el sistema no podrá procesar más solicitudes para planificar tareas adicionales. Las tareas existentes continúan ejecutándose, pero el planificador no podrá rebalancear las tareas para hacer frente a los fallos si el conjunto de administradores no está saludable.

La implementación del algoritmo de consenso en el modo Swarm significa que presenta las propiedades inherentes a los sistemas distribuidos:

- Acuerdo sobre valores en un sistema tolerante a fallos. (Consulta el [Teorema de imposibilidad FLP](https://www.the-paper-trail.org/post/2008-08-13-a-brief-tour-of-flp-impossibility/) y el [artículo del Algoritmo de Consenso Raft](https://www.usenix.org/system/files/conference/atc14/atc14-paper-ongaro.pdf)).
- Exclusión mutua a través del proceso de elección de líder.
- Gestión de la pertenencia al clúster (membership).
- Secuenciación de objetos globalmente consistente y primitivas CAS (compare-and-swap).

