Docker et Keepalived
📝 Introduction
Une architecture informatique est hautement disponible lorsqu'elle est conçue pour répondre à deux enjeux majeurs :
Tolérance aux pannes : Assurer la continuité des services en cas de défaillance d’un ou plusieurs composants (matériels ou logiciels).
Gestion des charges : Supporter un grand nombre de requêtes sans interruption.
Dans ce guide, nous explorons la mise en place d'une solution de haute disponibilité au niveau des services réseau à l'aide de Docker Swarm et Keepalived. Vous apprendrez à configurer un cluster Swarm et à gérer une adresse IP flottante avec Keepalived, garantissant une redondance efficace.
🚀 Pré-requis
Avant de commencer, assurez-vous d’avoir :
Trois machines virtuelles ou serveurs physiques configurés avec des adresses IP statiques.
Docker installé sur chaque nœud.
VMware comme driver pour Docker Machine.
Configuration des nœuds Docker
Exemple de commandes pour créer vos trois nœuds avec Docker Machine et VMware :
docker-machine create --driver vmware node1
docker-machine create --driver vmware node2
docker-machine create --driver vmware node3
Pour vérifier les machines créées :
docker-machine ls
Sortie attendue :
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
node1 - vmware Running tcp://192.168.253.145:2376 v19.03.12
node2 - vmware Running tcp://192.168.253.146:2376 v19.03.12
node3 - vmware Running tcp://192.168.253.147:2376 v19.03.12
📡 Initialisation du cluster Docker Swarm
🖥️ Connexion au nœud manager
Le cluster Docker Swarm est initialisé depuis le nœud manager. Connectez-vous à node1
:
docker-machine ssh node1
🚀 Initialisation du Swarm
Sur node1
, exécutez la commande suivante pour initialiser le Swarm. L’adresse utilisée doit être celle de node1
sur le réseau (vous pouvez la vérifier avec docker-machine ip node1
) :
docker swarm init --advertise-addr 192.168.253.145
Explication :
--advertise-addr
: Spécifie l’adresse IP utilisée pour communiquer avec les autres nœuds.
Résultat attendu :
Swarm initialized: current node (cu3vdhdtysaqzjuf20twcfhlv) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-58j0mfkvy70snrne6o5rqp6eldfxfijw4tpxljn2f01o4iy043-3sw50hj1qo06mjjuuw7g8pg8l 192.168.253.145:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
➕ Ajout des nœuds workers
🔗 Récupération du token
Le Swarm génère un token permettant aux autres nœuds de rejoindre le cluster. Pour l’obtenir, exécutez sur node1
:
docker swarm join-token worker
Cette commande affiche une autre commande à exécuter sur les workers (node2
et node3
).
🤝 Connexion des workers
Sur chaque worker, connectez-vous et exécutez la commande donnée par docker swarm join-token
:
Sur node2
:
docker-machine ssh node2
docker swarm join --token SWMTKN-1-58j0mfkvy70snrne6o5rqp6eldfxfijw4tpxljn2f01o4iy043-3sw50hj1qo06mjjuuw7g8pg8l 192.168.253.145:2377
Sur node3
:
docker-machine ssh node3
docker swarm join --token SWMTKN-1-58j0mfkvy70snrne6o5rqp6eldfxfijw4tpxljn2f01o4iy043-3sw50hj1qo06mjjuuw7g8pg8l 192.168.253.145:2377
✅ Vérification du cluster
Revenez sur node1
et exécutez la commande suivante pour vérifier l'état des nœuds du cluster :
docker node ls
Sortie attendue :
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
zkhmae4w3jaefwvyz49nzgyj1 * node1 Ready Active Leader 19.03.12
u1f30td61v99tlnecl1ntw7wz node2 Ready Active 19.03.12
u8rs95rby94dhccknyfbbqpxl node3 Ready Active 19.03.12
🛠️ Déploiement et gestion des services
🌐 Déploiement d’un service Nginx
Pour déployer un service Nginx
avec 2 réplicas, exécutez sur node1
:
docker service create --name mon-nginx --replicas 3 -p 80:80 nginx
🔄 Configuration de Keepalived
Installation et exécution de Keepalived sur chaque nœud : Lancez un conteneur Keepalived sur chacun des nœuds en utilisant les adresses IP de vos nœuds et une adresse IP virtuelle (VIP) pour la redondance.
docker run -d --name keepalived --restart=always \
--cap-add=NET_ADMIN --cap-add=NET_BROADCAST --cap-add=NET_RAW \
--net=host \
-e KEEPALIVED_UNICAST_PEERS="#PYTHON2BASH:['192.168.253.145', '192.168.253.146', '192.168.253.147']" \
-e KEEPALIVED_VIRTUAL_IPS=192.168.253.222 \
-e KEEPALIVED_PRIORITY=100 \
osixia/keepalived:2.0.20
🚦 Tester la haute disponibilité
Simulation de panne d’un nœud : Arrêtez le deuxième nœud (
node2
) :docker-machine stop node2
Vérifiez que le service est toujours accessible via l’adresse VIP.
Simulation de panne de plusieurs nœuds : Arrêtez le troisième nœud (
node3
) :docker-machine stop node3
Testez de nouveau l’accessibilité du service via l’adresse VIP.
🏁 Conclusion
En combinant Docker Swarm et Keepalived :
Vous garantissez une disponibilité réseau grâce à l’IP flottante gérée par Keepalived.
Vous assurez une haute disponibilité applicative avec le clustering de conteneurs Docker.
Ces deux niveaux de redondance permettent de minimiser les interruptions et d’optimiser la gestion des charges.
Last updated