Synchroniser des dossiers entre deux serveurs Linux avec Unison

Dans le cadre de mon projet en licence pro, je cherchais le moyen de pouvoir synchroniser facilement des dossiers entre des machines Linux, en ligne de commande. Je voulais que ce soit le plus simple possible, au point d’avoir qu’un seul mot à taper pour exécuter cette synchronisation et j’ai trouvé ma solution ici. Ce tutoriel va vous expliquer comment mettre en place une synchronisation entre les dossiers de deux serveurs (Ubuntu ou Debian) distants avec Unison, un peu similaire à rsync.

Pour vérifier que ce tutoriel fonctionne totalement avec des distributions différentes, j’ai à ma disposition deux serveurs avec:

  • Serveur 1: Ubuntu 11.10 avec l’IP 192.168.0.12
  • Serveur 2: Debian 6.0.3 avec l’IP 192.168.0.13


(toutes les commandes sont exécutées avec les droits root)

Tout d’abord, installer le ssh et unison sur les deux serveurs:

apt-get install unison openssh-server ssh

Créer une clé publique/privée ssh sur le serveur 1

ssh-keygen -t dsa

Il vous sera posé 3 questions, vous pouvez directement valider en appuyant sur Entrée.

Copier la clé publique sur le serveur 2 (en étant toujours sur le serveur 1 bien sur):

ssh-copy-id -i /root/.ssh/id_dsa.pub root@192.168.0.13

Répondre « Yes » à la première question et entrer le mot de passe root du second serveur ensuite.

Il est temps de faire une première synchronisation avec un site nommé « sitetest » présent sur mon premier serveur, mais absent sur le second 🙂

unison /var/www/sitetest ssh://192.168.0.13//var/www/sitetest

Valider par Entrée quand il montre les dossiers à copier « —-> » et « y » à la question « Proceed with propagating updates? »

Je vérifie ensuite si les sites sont à l’identique sur les deux serveurs:

 

Et c’est bon! 🙂

Il me reste 2 étapes: simplifier la commande et automatiser la synchronisation!

Pour simplifier la commande « unison » et ne plus avoir de paramètres à écrire, éditer le fichier /root/.unison/default.prf de la façon suivante:

root = /var/www/sitetest
root = ssh://192.168.0.13//var/www/sitetest

#ignore = Path test ## ignorera le dossier /var/www/sitetest/test

auto=true

batch=true

confirmbigdel=true

group=true

owner=true

prefer=newer

silent=true

times=true

(les options utilisées ci-dessus sont visibles avec la commande « man unison »)

Et enfin pour automatiser la synchronisation, créer un cron job qui s’exécutera toutes les 10 minutes (par exemple):

crontab -e

Ajouter la ligne: */10 * * * * /usr/bin/unison &> /dev/null

A noter pour finir: il est bien sur possible de faire la synchronisation avec d’autres dossiers, dans un sens (serveur 1 => serveur 2) comme dans l’autre (serveur 2 => serveur 1)

Source: HowToForge

Laisser un commentaire