Etiquetas

, , , , , ,


Recientemente me surgió un proyecto nuevo donde necesitaba sincronizar de forma bidireccional 2 directorios remotos, al ser bidireccional mi gran amigo rsync presentaba limitaciones para lograr el objetivo, por lo que fue necesario investigar un poco y aunque existen múltiples aplicaciones para tal fin me encanto syncthing, por la simplicidad de configuración y por la versatilidad de la aplicación.

Syncthing según su pagina oficial «es un programa open-source para sincronización continua de archivos. Sincroniza archivos entre dos o más ordenadores en tiempo real, dentro de una red local o remota.»

La instalacion es bastante sencilla y es multiplataforma (Linux, Mac, Windows), en nuestro caso lo instale en un CentOS 7 y solo basta con descargar la api desde el repositorio oficial en github o desde los repositorios de la Distribuicion que estes usando en mi caso.

[root@Cluster01 /]# yum install syncthing
[root@Cluster01 /]#curl -s https://api.github.com/repos/syncthing/syncthing/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi –

Desempaquetamos el archivo .tar

[root@Cluster01 /]# tar xvf syncthing-linux-amd64*.tar.gz

Copiamos el contenido de la carpeta al directorio /usr/local/bin/

[root@Cluster01 /]# cp syncthing-linux-amd64-*/syncthing  /usr/local/bin/

Luego debemos iniciar la aplicación ejecutando el comando:

[root@Cluster01 /]# /usr/local/bin/syncthing -no-browser -gui-address="0.0.0.0:8384" -no-restart –logflags=0

Esto lo que hace es levantar la aplicación en servicio web donde procederemos a configurar nuestras carpetas a sincronizar, en la sección –gui-address podemos indicar solo el localhost o colocar 0.0.0.0 para que podamos conectarnos vía web desde cualquier dispositivo en la red, colocando la ip del servidor y el puerto que se especifica en la sección –gui-address en nuestro caso 8384 ustedes pueden utilizar cualquier otro que esté disponible en el rango de los 1024-65535

Es necesario crear un script de arranque para que el servicio inicie siempre que se encienda el servidor, yo cree un .sh con el siguiente contenido se debe ejecutar el script con un usuario sin privilegios y agregarlo en los rc.local en ambos servidores.

# -*- ENCODING: UTF-8 -*-
#!/bin/bash
#script para iniciar servicio de sincronizacion by Javier Paredes 24/05/2022
su - jparedes -c "/usr/local/bin/syncthing -no-browser -gui-address="0.0.0.0:8384" -no-restart -logflags=0"

Se debe ejecutar el comando en ambos servidores o en los servidores que deseen sincronizar directorios, ya que es posible sincronizar varios servidores.

Una vez que ingresemos desde el navegador http//:ipservidor:8384 para que nos muestre la interfaz de configuración.

Debemos en primera instancia agregar los servidores con los que deseamos compartir.

Esto desplegara un qr con el ID del servidor al que estamos conectándonos
Con este ID debemos dirigirnos al otro servidor vía web tambien y ubicaremos el apartado de agregar dispositivo en la esquina inferior derecha
En el campo ID agregaremos el ID del servidor que deseamos conectar el que nos mostro en el qr.

y en el otro servidor nos aparecera este mensaje.

Agregamos el nuevo dispositivo
Deberia aparecer conectado, ya hasta aquí tenemos ambos servidores conectados solo falta crear la carpeta compartida.

En el apartado carpeta agregaremos la nueva carpeta a compartir

Nos aparecera esta alerta en el otro servidor, le damos agregar y en ambos servidores deberia aparecer así.

La aplicación por defecto crea las carpetas en el directorio del usuario que esta corriendo la aplicación, pero es posible compartir cualquier carpeta en el SO, siempre y cuando tenga los permisos necesarios, por lo que si desean compartir otra carpeta cuando la esten compartiendo deben cambiar la ruta por defecto por la ruta que ustedes quieran.

Otra cosa que es importante tener presente, es que el tiempo de sincronización por defecto entre ambos directorios es de 3600 Segundos, esta cantidad de tiempo no es tan en tiempo real, por lo que es necesario ajustar el parámetro a un valor que resulte para tu instalación, en mi caso lo coloque a 1 segundo y realmente me funciona muy bien y se puede decir que es en tiempo real.

Nos vamos al apartado carpeta editar, luego avanzado y modificamos el valor de intervalo de rescaneo completo.
Guardamos los cambios y debemos hacer lo mismo en el otro servidor.

Ya con esto tendremos sincronizados ambos directorios de manera bidireccional y en tiempo real.

Para el proximo post montare syncthing como un servicio para un clúster HA de pacemaker+corosync.