LINUX

Cómo instalar «espejo» para sincronización bidireccional y en tiempo real

espejo de sincronización bidireccionalComo programador de computadoras, debe haber sucedido muchas veces que necesita un sistema o herramienta que sincronice dos directorios en tiempo real y de dos vías. Examinaremos uno de estos espejos de herramientas en este artículo. Está construido para admitir sincronización bidireccional en tiempo real entre directorios que existen en la máquina diferente. Es ideal para un flujo de trabajo de desarrollo de dos máquinas (por ejemplo, computadora de escritorio + computadora portátil) donde desea ejecutar un proceso de compilación / compilación de línea de comandos en una computadora de escritorio potente / dedicada, pero aún así editar archivos de forma remota en una computadora portátil.

Hay muchas herramientas disponibles para sincronizar directorios como lsyncd, pero lo que hace que Mirror sea único es que es bidireccional: sincroniza simultáneamente tanto la computadora portátil a la computadora de escritorio como la computadora de escritorio a la computadora portátil, en tiempo real. A continuación se muestra su comparación con herramientas similares existentes disponibles en el mercado.

Comparación con las opciones existentes

  • el unísono es bidireccional, pero no en tiempo real
  • rsync no es bidireccional ni en tiempo real
  • lsyncd es en tiempo real, pero oficialmente no es compatible con bidireccional
  • sshfs es demasiado lento y no admite inotify
  • doppleganger (una herramienta interna) es en tiempo real, pero no bidireccional

Limitaciones sin goles

  • Sin fusión / soporte desconectado de larga duración
    Se volverá a conectar automáticamente y reiniciará la sincronización cuando detecte que el servidor está disponible nuevamente, pero si los archivos han cambiado en ambos lados mientras estaba desconectado, entonces el último cambio tendrá prioridad.
  • Mantener los permisos / propietario / grupo de Unix
    Cualquiera que sea el usuario de Unix que ejecute los comandos, será el propietario / grupo / etc. de los archivos
  • No es compatible con archivos grandes de más de 100 MB
  • Sin lógica de transmisión / diferencial súper eficiente como rsync

Si un archivo cambia, retransmite todo el archivo en lugar de intentar diferenciar solo lo que cambió.

Instalación de espejo

Paso 1: Instale Java 8 o superior. Para comprobar la versión de Java ya instalada, ejecute el comando «java -version». Si java no está instalado, ejecute el siguiente comando para instalar java 8.

1) En un sistema operativo basado en Debian (Ubuntu, Debian, etc.)

$ sudo apt-get update
$ sudo apt-get install openjdk-8-jre

2) En un sistema operativo basado en RPM (RHEL, CentOS, Fedora, etc.)

$ sudo yum update
$ sudo yum install java-1.8.0-openjdk

Paso 2 (opcional): Instalar en pc sereno. El espejo usará la API de Java WatchService incorporada si no tiene watchman instalado, y básicamente funcionará, pero las implementaciones de WatchService proporcionadas por JDK no son tan buenas: la implementación de Linux tiene errores.

Paso 3: Descargue el ejecutable del espejo más reciente en su directorio de inicio (o en algún otro directorio en su ruta, por ejemplo, ~ / bin)

$ wget http://repo.joist.ws/mirror-all.jar ~/
$ wget http://repo.joist.ws/mirror ~/

Paso 4: Hacer ejecutable el archivo espejo

 $ chmod u+x mirror

Paso 5: Copie ambos en su directorio de inicio remoto (o en algún otro directorio en su ruta, por ejemplo, ~ / syncwork)

$ scp mirror-all.jar your-server.com:~/
$ scp mirror your-server.com:~/

Paso 6: Inicie el lado del servidor desde el directorio de inicio del servidor

$ ./mirror server
2017-08-15 10:44:15 INFO  Listening on 49172, version unspecified

Paso 7: Ahora cree un nuevo directorio en el directorio de inicio con el nombre que desee, estoy creando un nuevo directorio llamado ‘código’. Cree un archivo de texto con algo de contenido, colóquelo en el directorio de código para probar la herramienta.

$ cd code
$vi test.txt
this is test.

Paso 8: Inicie el lado del cliente desde el directorio de inicio del cliente

$ ./mirror client -h your-desktop.com -l ./code/ -r ./code/
2017-08-15 10:47:04 INFO  Connected, starting session, version unspecified
2017-08-15 10:47:04 ERROR Error creating watchman channel, skipping watchman
java.lang.RuntimeException: Couldn't find watchman in possible paths [., /usr/local/sbin, /usr/local/bin, /usr/sbin, /usr/bin, /sbin, /bin, /usr/local/sbin, /usr/local/bin, /usr/sbin, /usr/bin, /sbin, /bin] with extensions [, .sh, .bat, .exe]
	at joist.util.Execute.resolve(Execute.java:182)
	at joist.util.Execute.getCommandPlusArgsArray(Execute.java:162)
	:
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

2017-08-15 10:47:04 INFO  Watchman not found, using WatchService instead
2017-08-15 10:47:04 INFO    Note that WatchService is buggy on Linux, and uses polling on Mac.
2017-08-15 10:47:04 INFO    While It will work with WatchService, especially to test, you should eventually install watchman.
2017-08-15 10:47:04 INFO  Client has 2 paths
2017-08-15 10:47:04 INFO  Server has 1 paths
2017-08-15 10:47:04 INFO  Tree populated
2017-08-15 10:47:04 INFO  Sending test.txt

Como puede ver en la última línea del registro anterior, el espejo ha enviado el test.txt al servidor. Genial, hemos instalado y probado el espejo con éxito.

Nota: Tenga cuidado al usar la tilde (por ejemplo, ~ / código), ya que su shell lo resolverá, por ejemplo, a / Users / you / code, y esa ruta resuelta en el cliente podría no ser válida en el servidor. Esto sincronizará el directorio $ HOME / code en sus dos máquinas.

Configuración adicional en Mirror

De forma predeterminada, el espejo no sincronizará ningún archivo en su archivo .gitignore listado. Sin embargo, también puede configurarlo con inclusiones o exclusiones adicionales además del .gitignore. Los patrones de inclusión y exclusión adicionales se pueden pasar al iniciar el cliente y seguir el formato .gitignore, por ejemplo:

$ ./mirror client --exclude '.m2/` --include 'classpath' --include '.install' --exclude `build/`

Configurar límites de vigilancia del sistema

Tenga en cuenta que si tiene muchos directorios, es posible que deba aumentar los límites del sistema de archivos nativo. De forma predeterminada, el límite de max_user_watches es 8192, ejecute el siguiente comando para aumentarlo a 524288

$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

Uso del espejo para sincronizar más de dos máquinas

Mirror también admite la sincronización de más de dos máquinas. Por ejemplo, podrías tener:

El servidor ejecuta el proceso del servidor espejo (no es necesario iniciar varios procesos del servidor)

Ahora suponga que desea sincronizar una máquina más que no sea el servidor y la configuración del cliente en el proceso de instalación, luego en la nueva máquina (llamémosla cliente 2), realice el paso 8 de la sección de instalación para conectar el cliente 2 al servidor.
El cliente 1 y el cliente 2 se conectan al servidor y sincronizan su código ~ / con el código ~ / del servidor.

Ahora, las tres máquinas (servidor, cliente 1, cliente 2) se mantendrán sincronizadas. El directorio ~ / code de los tres estará sincronizado. Con el mismo enfoque, puede agregar la cantidad de máquinas que desee.

Hemos instalado, configurado y probado con éxito espejo en la máquina Linux. Siéntete libre de compartir cualquier duda o cualquier cosa nueva que el mundo deba saber.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar