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