Mantenga dos directorios remotos sincronizados en ubuntu en tiempo real

Mantenga dos directorios remotos sincronizados en ubuntu en tiempo real

Mi intención es mantener dos directorios remotos (digamos dir1 y dir2) sincronizados. De modo que siempre que haya un cambio en el contenido del directorio 1 (puede ser la adición o eliminación de un nuevo archivo o directorio o la modificación del contenido de un archivo en el directorio), el cambio debe propagarse al directorio 2 y viceversa.

La forma ingenua en que se me ocurre hacer esto es ejecutar rsync periódicamente a través de cron en ambas máquinas. Pero hay falacias en este enfoque:

  1. Puede suceder que el rsysnc anterior no esté completo y el cron ejecute rsync una vez más mientras el rysnc anterior aún continúa.
  2. Se agrega un nuevo archivo en dir1 y antes de que rsync se ejecutara en dir2 se ejecutara rsync en dir1, el archivo recién agregado podría eliminarse de dir1 ya que no está presente en dir2
  3. Además, esto no es en tiempo real.

¿Pueden algunos sugerir alguna forma mejor de hacer esto? Estoy buscando un código abierto que sea más fácil de configurar y comenzar.

Respuesta1

La única forma de proporcionar una garantía "dura en tiempo real" sin una ventana de carrera es asegurarse de que una escritura se reconozca solo después de que haya llegado a ambos lados. La forma habitual de lograr esto es con un sistema de archivos de clúster (como OCFS2 o GFS2) en un dispositivo de bloque compartido. Un dispositivo de bloque compartido de este tipo se puede construir de forma fácil y económica utilizando DRBD.

Al igual que con cualquier mecanismo de sincronización, su red dentro del clúster debe poder soportar la tasa de cambio con una latencia aceptable.

La hoja de trucos está alrededor de las líneas de

  • Reserve un dispositivo de bloque (disco, partición, LV, ..) en ambos lados
  • instale y configure DRBD (apt-get install drbd-utils), utilice la excelente documentación ensu página web
  • Instale una pila de clúster de su elección: Red Hat completo (si necesita algo más que un sistema de archivos compartido) o el minimalista pero muy sencillo O2DLM (incluido en OCFS2).
  • Formatee el dispositivo DRBD con GFS2 (solo pila Red Hat) u OCFS2 (posible con ambas pilas) y móntelo en ambos lados

Ahora NO tiene un par de directorios sincronizados: tiene un único directorio, que está disponible en ambos nodos. Funcionalmente es lo mismo, pero sin las ventanas de carrera.

Respuesta2

Si está en la misma máquina, considere usar un enlace del sistema de archivos. Significaría que dir2 "apunta" a dir1 o viceversa, mientras que sería transparente. Para hacer esto, utilice, lnpor ejemplo ln -s /path/to/dir1 /path/to/dir2, o, alternativamente, utilice rutas relativas. Significa -sque es un enlace simbólico, por lo que solo se refiere a la ruta y no al inodo de dir1.

Editar: Lo siento, me perdí la parte de "ambas máquinas".

Tal vez considere usar una red compartida, sincronizar dos ubicaciones en tiempo (casi) real siempre es difícil.

información relacionada