Chahine AzegrarBTS SIO · SISR
← Tous les projets

Système

Sauvegarde automatique en temps réel

Une copie à jour des données d'un serveur principal sur un serveur de secours, avec rsync sur SSH, d'abord par timer systemd puis déclenchée par inotify à chaque modification.

Problème

Avoir en permanence une copie à jour des données d'un serveur principal sur un serveur de secours, sans intervention humaine.

Architecture

Serveur A (principal)                 Serveur B (secours)
/data  --rsync sur SSH (clé ed25519)-->  /backup
  ^
  inotify surveille les changements

Les scripts tournent sans surveillance : impossible de saisir un mot de passe. Les serveurs s'authentifient par clés SSH ed25519, et un utilisateur dédié à la sauvegarde reçoit les fichiers côté secours.

Mise en œuvre

Version 1 : timer systemd

# transfert.sh
rsync -avz --delete /data/ userbackup@serveur-b:/backup/
# transfert.timer
[Timer]
OnUnitActiveSec=10s

Simple, mais rsync s'exécute toutes les 10 secondes même quand rien n'a changé.

Version 2 : déclenchement par inotify

inotifywait -m -r -e modify,create,delete,move /data/ |
while read path action file; do
    echo "$action sur $file, synchronisation"
    /usr/local/bin/transfert.sh
done

Le script tourne comme service systemd avec Restart=always. La synchronisation ne se lance que lorsqu'un fichier change : moins de ressources consommées, et une copie à jour en quelques secondes.

Validation

Un fichier créé sur A apparaît immédiatement sur B, et une suppression sur A est répliquée grâce à --delete.

Limites et pistes d'amélioration

  • Un miroir n'est pas une vraie sauvegarde : une suppression faite par erreur est aussitôt copiée sur le serveur de secours. Il faudrait des copies versionnées pour pouvoir revenir en arrière.
  • Chaque événement inotify relance un rsync complet ; sur un dossier très actif, les transferts peuvent s'enchaîner.

Compétences du référentiel mobilisées

  • Garantir la disponibilité des données
  • Automatiser des tâches d'administration
  • Exploiter des services