2 votes

Synchronize automatiquement les répertoires sur deux machines Linux via SSH

J'ai un dossier racine sur deux ordinateurs (sur lesquels j'exécute des programmes de manière alternative). Disons :

serveur0:
  -mon_dossier
    --sous_dossier0
    --sous_dossier1
serveur1:
  -mon_dossier
    --sous_dossier0
    --sous_dossier1

J'ai donc des tâches groupées sur serveur0 qui mettront à jour certains fichiers dans ces dossiers. Et j'ai des tâches interactives sur serveur1 qui mettront également à jour ces fichiers. Il est garanti que je ne mettrai jamais à jour le même fichier en même temps.

J'ai accès de serveur1 à serveur0 via SSH.

J'ai vérifié des solutions censées faire cela. osync et unison semblent tous deux le faire. Mais ils sont tous déclenchés uniquement à partir d'une machine. Ainsi, les mises à jour de fichiers sur serveur0, par exemple, ne déclencheront pas de mise à jour. Seules les mises à jour sur serveur1 le feront.

Le même problème existe avec rsync. Si rsync s'exécute sur les deux serveurs, il est très possible d'avoir des conditions de course où les 2 serveurs se renvoient les mêmes fichiers d'un côté à l'autre.

Quelqu'un connaît-il une solution pour cela ?

1voto

Reda Salih Points 756

Une solution consiste à exécuter inotifywait sur chaque serveur, ce qui détectera les fichiers nouvellement créés dans mon_dossier, puis une fois qu'un nouveau fichier est créé, il utilisera rsync pour copier le fichier sur l'autre serveur en l'ignorant si le fichier existe déjà à la destination, voici une idée de base :

De point de vue du serveur0 :

inotifywait -m -r -e create --format '%w%f' "{mon_dossier}" | while read NOUVEAU_FICHIER
faire    
rsync --ignore-existing "$NOUVEAU_FICHIER" "$serveur1":"$mon_dossier"
done

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X