Capsule Avancée

Adaptable

L'art de l'orchestration dynamique : donner un cerveau et des règles à l'essaim.

Swarm · Haute Disponibilité
Adaptable - Le Concept

L'intelligence du Swarm

Un système distribué n'est pas "magiquement" intelligent. Pour qu'une flotte de serveurs s'adapte aux pannes et aux pics de charge de manière autonome, l'orchestrateur a besoin de deux choses : un cerveau sain et des règles claires.

Le Cerveau (Quorum)

Le système doit pouvoir survivre à la mort de l'un de ses dirigeants sans sombrer dans la folie (le "split-brain"). C'est le rôle du Quorum, qui assure le consensus et la résilience décisionnelle.

Le Corps (Contraintes)

Le système doit savoir quel travail assigner à quel travailleur en fonction de son physique (disque SSD, GPU, etc.). C'est le rôle des Contraintes de placement, qui orientent le déploiement.

Capsule Avancée

Le Quorum

La loi de la majorité et la survie de l'essaim

Swarm · Architecture Distribuée
Adaptable - Quorum

Pourquoi 3 gestionnaires ?

Dans un cluster Swarm, le Manager (gestionnaire) prend toutes les décisions. Si on n'a qu'un seul Manager et qu'il meurt, l'essaim devient aveugle. On veut donc plusieurs Managers.

Adaptable - Quorum

La règle des nombres impairs

3 Managers

Majorité = 2. Tolérance = 1 perte. Si 1 Manager tombe, les 2 autres forment toujours une majorité. L'essaim survit.

4 Managers

Majorité = 3. Tolérance = 1 perte. (C'est pire que 3, car on a plus de chances qu'un serveur tombe, sans gagner de tolérance).

5 Managers

Majorité = 3. Tolérance = 2 pertes. La configuration idéale pour la haute disponibilité en production.

Leçon : On déploie toujours 1, 3, 5 ou 7 Managers. Jamais un nombre pair.

Capsule Avancée

Contraintes de placement

Ordonner au chaos : comment dompter le déploiement

Swarm · Orchestration Avancée
Adaptable - Contraintes

L'orchestrateur aveugle

Par défaut, Swarm répartit les conteneurs au hasard pour équilibrer la charge. Mais parfois, certains serveurs ont des spécificités physiques.

Adaptable - Contraintes

Les Labels et les Contraintes

# 1. On étiquette physiquement un serveur (le Label)
docker node update --label-add type=stockage noeud-1

# 2. On ajoute une contrainte dans le fichier Compose
services:
basededonnees:
image: postgres
deploy:
placement:
constraints:
- node.labels.type == stockage

Ainsi, la base de données ne naîtra que sur les nœuds disposant du label 'stockage'. Vous venez de dompter l'essaim.