Skip to content

fsebbah/docker-swarm-infrastructure-docs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Service de redémarrage automatique Docker Swarm

Description

Ce package contient une solution pour redémarrer automatiquement les services Docker Swarm après un reboot du serveur. Il résout le problème où les services tentent de démarrer avant que le cluster Swarm ne soit complètement stable.

Services concernés

  • celery_stack_celery_flower
  • celery_stack_celery_worker
  • chat_studio_postgres_chat_studio

Architecture du cluster

  • 4 nœuds managers : databases, host2, host3, host4
  • Leader actuel : host3
  • Contraintes : Tous les services problématiques sont actuellement contraints au nœud "databases"

Contenu du package

  1. restart-swarm-services.sh : Script qui attend la stabilisation du Swarm et redémarre les services
  2. restart-swarm-services.service : Service systemd qui lance le script au boot
  3. deploy-to-all-nodes.sh : Script pour déployer sur tous les nœuds managers
  4. verify-deployment.sh : Script pour vérifier l'installation sur tous les nœuds

Installation

Option 1 : Déploiement sur tous les nœuds managers (recommandé)

Cette option est recommandée pour :

  • Gérer de futurs services sans contraintes de placement
  • Maintenir une cohérence de configuration sur tout le cluster
  • Éviter les problèmes si les contraintes changent
cd /home/fsebb/data_proces/swarm-restart-service
./deploy-to-all-nodes.sh

Prérequis : Accès SSH configuré avec clés SSH vers tous les nœuds (host2, host3, host4)

Option 2 : Installation manuelle sur un seul nœud

Si vous voulez installer uniquement sur le nœud "databases" (suffisant pour les services actuels) :

cd /home/fsebb/data_proces/swarm-restart-service

# Copier le script
sudo cp restart-swarm-services.sh /usr/local/bin/
sudo chmod +x /usr/local/bin/restart-swarm-services.sh

# Installer le service systemd
sudo cp restart-swarm-services.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable restart-swarm-services.service

Pour installer sur d'autres nœuds, connectez-vous via SSH et répétez les commandes ci-dessus.

Vérification

Vérifier sur tous les nœuds

./verify-deployment.sh

Vérifier sur le nœud actuel

# Vérifier que le service est activé
systemctl status restart-swarm-services.service

# Vérifier que le script existe
ls -l /usr/local/bin/restart-swarm-services.sh

Tester manuellement

# Tester le script (redémarre les services si nécessaire)
sudo /usr/local/bin/restart-swarm-services.sh

# Voir les logs
sudo cat /var/log/restart-swarm-services.log

Après un reboot

Le service s'exécutera automatiquement. Pour vérifier :

# Voir les logs systemd
sudo journalctl -u restart-swarm-services.service

# Voir les logs détaillés du script
sudo cat /var/log/restart-swarm-services.log

# Vérifier l'état des services
docker service ls | grep -E "(celery_stack|chat_studio)"

Comment ça fonctionne

  1. Au démarrage du serveur, systemd attend que Docker soit actif
  2. Le script vérifie que Docker est complètement démarré
  3. Le script attend que Swarm soit actif
  4. Le script attend que les nœuds du cluster soient connectés
  5. Le script attend 30 secondes supplémentaires pour la stabilisation
  6. Le script vérifie chaque service et force un redémarrage si nécessaire (replicas à 0)
  7. Tous les logs sont enregistrés dans /var/log/restart-swarm-services.log

Configuration SSH (pour le déploiement automatique)

Si vous n'avez pas encore configuré l'accès SSH par clés :

# Sur le nœud databases, générer une clé si nécessaire
ssh-keygen -t ed25519 -C "databases-swarm"

# Copier la clé vers les autres nœuds
ssh-copy-id host2
ssh-copy-id host3
ssh-copy-id host4

# Tester
ssh host2 "echo test"
ssh host3 "echo test"
ssh host4 "echo test"

Désinstallation

Pour désinstaller sur un nœud :

sudo systemctl disable restart-swarm-services.service
sudo rm /etc/systemd/system/restart-swarm-services.service
sudo rm /usr/local/bin/restart-swarm-services.sh
sudo rm /var/log/restart-swarm-services.log
sudo systemctl daemon-reload

Troubleshooting

Les services ne redémarrent toujours pas après un reboot

  1. Vérifier que le service systemd s'est bien exécuté :

    sudo journalctl -u restart-swarm-services.service
  2. Vérifier les logs du script :

    sudo cat /var/log/restart-swarm-services.log
  3. Tester manuellement :

    sudo /usr/local/bin/restart-swarm-services.sh

Le script ne trouve pas les services

Vérifier que les noms des services sont corrects :

docker service ls

Si les noms ont changé, modifier le tableau SERVICES dans le script /usr/local/bin/restart-swarm-services.sh

Le délai de 30 secondes n'est pas suffisant

Augmenter le délai dans le script :

sudo nano /usr/local/bin/restart-swarm-services.sh
# Modifier la ligne : sleep 30
# Par exemple : sleep 60

Notes importantes

  • Le script ne redémarre que les services qui ont 0 réplicas actifs
  • Les services déjà actifs ne sont pas touchés
  • Le script attend jusqu'à 2 minutes que le cluster soit stable
  • Les logs sont conservés et ne sont pas effacés automatiquement

About

Docker Swarm cluster infrastructure automation: service restart, hot backups, and private registry setup

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages