Consensus Raft en mode swarm
Lorsque Docker Engine fonctionne en mode Swarm, les nœuds gestionnaires implémentent l' Algorithme de Consensus Raft pour gérer l'état global du cluster.
La raison pour laquelle le mode Swarm utilise un algorithme de consensus est de s'assurer que tous les nœuds gestionnaires qui sont en charge de gérer et planifier les tâches dans le cluster stockent le même état cohérent.
Avoir le même état cohérent à travers le cluster signifie qu'en cas de panne, n'importe quel nœud Gestionnaire peut reprendre les tâches et restaurer les services à un état stable. Par exemple, si le Gestionnaire Leader qui est responsable de la planification des tâches dans le cluster meurt de façon inattendue, n'importe quel autre Gestionnaire peut reprendre la tâche de planification et rééquilibrer les tâches pour correspondre à l'état désiré.
Les systèmes utilisant des algorithmes de consensus pour répliquer les logs dans des systèmes distribués nécessitent des soins particuliers. Ils assurent que l'état du cluster reste cohérent en présence de pannes en exigeant qu'une majorité de nœuds soient d'accord sur les valeurs.
Raft tolère jusqu'à (N-1)/2
pannes et nécessite une majorité ou quorum de
(N/2)+1
membres pour être d'accord sur les valeurs proposées au cluster. Cela signifie que dans
un cluster de 5 Gestionnaires exécutant Raft, si 3 nœuds sont indisponibles, le système
ne peut plus traiter de demandes pour planifier des tâches supplémentaires. Les tâches
existantes continuent à s'exécuter mais le planificateur ne peut pas rééquilibrer les tâches pour
faire face aux pannes si l'ensemble des gestionnaires n'est pas sain.
L'implémentation de l'algorithme de consensus en mode Swarm signifie qu'il présente les propriétés inhérentes aux systèmes distribués :
- Accord sur les valeurs dans un système tolérant aux pannes. (Référez-vous au théorème d'impossibilité FLP et au papier de l'Algorithme de Consensus Raft)
- Exclusion mutuelle par le processus d'élection du leader
- Gestion de l'adhésion au cluster
- Séquençage d'objets globalement cohérent et primitives CAS (compare-and-swap)