
Contexte
Dans un environnement Linux, il est fréquent de partager des fichiers via NFS entre plusieurs serveurs. Pour garantir la disponibilité et la résilience des données, on peut répliquer régulièrement le contenu d’un export NFS vers un serveur de secours. La combinaison rsync (synchronisation efficace) et systemd (planification fiable) permet d’automatiser cette tâche sans dépendre de cron.

Quand l’utiliser ?
- Vous avez deux serveurs RHEL 9 (serveur primary et serveur secondary) qui exportent le même répertoire NFS.
- Vous souhaitez que les changements du serveur primaire soient propagés toutes les 15 minutes vers le serveur secondaire.
- Vous avez besoin d’une solution simple, sans installer de logiciel de réplication dédié.
🔹 Étapes de mise en place
- Pré‑requis : les deux serveurs doivent disposer d’un accès réseau mutuel et d’un export NFS déjà configuré.
- Installer rsync sur les deux machines.
- Créer un compte de réplication dédié (optionnel mais recommandé).
- Configurer l’accès SSH sans mot de passe entre le serveur primaire et secondaire pour l’utilisateur
rsync-sync. - Créer le script de réplication sur le serveur primaire.
- Créer le service systemd qui exécutera le script.
- Vérifier le bon fonctionnement en consultant le journal.
sudo dnf install -y rsync
sudo useradd -r -s /sbin/nologin rsync-sync
sudo passwd -l rsync-sync
# Sur le serveur primaire
sudo -u rsync-sync ssh-keygen -t ed25519 -N "" -f /home/rsync-sync/.ssh/id_ed25519
sudo -u rsync-sync ssh-copy-id -i /home/rsync-sync/.ssh/id_ed25519.pub rsync-sync@secondary.example.com
sudo tee /usr/local/bin/rsync_nfs.sh > /dev/null <<'EOF'
#!/bin/bash
SRC="/export/shared"
DEST="rsync-sync@secondary.example.com:/export/shared"
LOG="/var/log/rsync_nfs.log"
rsync -az --delete -e "ssh -i /home/rsync-sync/.ssh/id_ed25519" "$SRC/" "$DEST/" >> "$LOG" 2>&1
EOF
sudo chmod +x /usr/local/bin/rsync_nfs.sh
sudo tee /etc/systemd/system/rsync-nfs.service > /dev/null <<'EOF'
[Unit]
Description=Synchronisation NFS vers serveur secondaire
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
User=rsync-sync
ExecStart=/usr/local/bin/rsync_nfs.sh
EOF
sudo tee /etc/systemd/system/rsync-nfs.timer > /dev/null <<'EOF'
[Unit]
Description=Timer pour rsync-nfs.service toutes les 15 minutes
[Timer]
OnBootSec=5min
OnUnitActiveSec=15min
Persistent=true
[Install]
WantedBy=timers.target
EOF
# Activer le timer
sudo systemctl daemon-reload
sudo systemctl enable --now rsync-nfs.timer
sudo systemctl status rsync-nfs.service
sudo journalctl -u rsync-nfs.service -n 20
⚠️ Méthode alternative
Si vous préférez éviter SSH, vous pouvez utiliser rsync en mode daemon (port 873) et sécuriser l’accès avec hosts.allow/hosts.deny ou un pare‑feu. Le principe reste le même, mais le script devra appeler rsync rsync://rsync-sync@secondary.example.com/export/shared/.
✅ Bonnes pratiques de sécurité
- Utilisez un compte système sans shell (
/sbin/nologin) pour la réplication. - Restreignez la clé SSH à l’exécution de
rsyncuniquement : ajoutezcommand="rsync --server ..."dans~/.ssh/authorized_keys. - Activez SELinux en mode enforcing et assurez‑vous que le contexte
rsync_var_run_test appliqué aux répertoires. - Surveillez les logs (
/var/log/rsync_nfs.log) et configurez une alerte en cas d’échec.
✅ Conclusion
Vous avez maintenant un mécanisme fiable et léger qui réplique automatiquement vos exports NFS toutes les 15 minutes. La solution repose uniquement sur des outils natifs de RHEL 9, garantit la cohérence des données grâce à --delete, et profite de la robustesse de systemd pour la planification. N’hésitez pas à ajuster la fréquence ou à ajouter des notifications par e‑mail en enrichissant le script.
