Exploración de herramientas de sincronización

Necesitamos una herramienta para sincronizar archivos grandes en varias instancias de una red de carpetas de almacenamiento.

Podríamos tener dos carpetas:

  • una que sólo se pueda modificar en el servidor, pelis.cineclub.uy, y que se replique, de manera a mantener una colección perenne,
  • otra que se pueda modificar en cualquier instancia del la red, de manera a que, desde cualquier sede, se puedan proponer películas,

También tenemos que pensar en la facilidad para que una nueva sede se pueda unir: la primer carpeta puede estar en acceso anónimo, sin necesiad de autenticar al nuevo nodo.

Tenemos varias soluciones técnicas identificadas, con diferentes carácterísticas, ventajas y desventajas.

Conviene analizar cuales son las características, y si tomamos una o varias, y para qué.

Características de rsync

rsync es un programa de transferencia de archivos para sistemas Unix.
Este programa viene por defecto en algunos sistemas operativos de Linux, de lo contrario se puede instalar mediante algún gestor de paquete(ej:apt-get).

Algunas de las ventajas que presenta el algoritmo son:

  • Sólo copia las modificaciones realizadas.
  • Las modificaciones son comprimidas, generando así una demora menor y reduce la carga de la red.
  • En caso de desearlo, se utiliza ssh para encriptar la sesión, proporcionando mayor seguridad a la transferencia.
    Estas ventajas llevan a una actualización más rápida.

Otras características son:

  • No requiere privilegios de root
  • Soporte para servidores rsync anónimos o autenticados.
  • Receptor y transmisor deben tener instalado rsync.
  • Las máquinas con rsync instalado pueden realizar copias de forma local, a otro host remoto, o se sincronizan con una máquina remota que contenga el demonio de rsync instalado.
  • Dos formas para transferir archivos, usando un programa remote-shell para el transporte (como ssh) o contactando a un demonio rsync directamente via TCP

Algunas de las utilidades son:

  • Backups
  • Espejo de archivos de sistema.
  • Distribuir archivos.
  • Y con el algoritmo de rsync se transfieren las diferencias entre archivos.

Ejemplos de uso:

  1.     rsync -t *.c foo:src/ 

    Este comando transferirá todos los archivos que coincidan con el patrón *.c al directorio src de la máquina foo.
  2. Para este ejemplo se toma al usuario como directamente conectado al demonio rsync remoto, típicamente para esto se usa el puerto TCP 873.
     rsync -av host::src /dest 

    En el ejemplo se copia todo los archivos de un host remoto con un módulo llamado "src".
  3. En este último ejemplo se visualiza el caso de la conexión del tipo remote-shell
     rsync -av --rsh=ssh host::module /dest 

    Donde se debe especificar el programa para el remote-shell en la línea --rsh=COMMAND.

Características de BTSync

Para instalar BitTorrentSync es necesario descargar el archivo correspondiente al sistema, descomprimir el archivo y desde la ubicación del archivo binario ejecutar mediante terminal el comando

./btsync 

Para luego configurarlo se utiliza una interfaz web a la que se accede como:
http://IP|host:8888/gui

debiendo indicar dirección IP del dispositivo o hostname.

Características:

  • Sincroniza solamente lo que haya cambiado, no archivos enteros.
  • No tiene límite del tamaño de carpeta.
  • Sincroniza y comparte absolutamente todo. Comparte todo desde carpetas existentes, sin subir archivos muy grandes a la nube.
  • Los archivos e identidad del usuario se guardan localmente en dispositivos autorizados.
  • Utiliza seguridad criptográfica distribuida.
  • Es multi-plataforma.
  • Las actualizaciones son incrementales, después de editado un archivo existente, btsync sabe cómo actualizar solo las partes que han sido modificadas en lugar de todo el archivo.
  • Se pueden establecer plazos de vencimiento para el vínculo establecido con otro enlace.
  • Existe un control de permisos de acceso a carpetas.
  • Existe una versión de descarga de tipo ARM.

Características de Syncthing

Para la instalación es necesario descargar la versión correspondiente al sistema que lo va a utilizar, luego de descomprimido el archivo es necesario desde una terminal ejecutar el archivo binario en la forma:

./syncthing

Y la configuración se realiza mediante una interfaz web a la que se accede mediante un navegador escribiendo:
http://IP/host:8384/

donde se debe especificar la dirección IP o hostname del dispositivo.

Algunas características:

  • Los datos de los usuarios son guardados sólo en su dispositivo, brindando más seguridad de esta forma.
  • La información es encriptada, para esto Syncthing usa TLS.
  • Cada nodo (dispositivo) es identificado por un certificado criptográfico. Sólo los nodos que son explícitamente habilitados son los que se pueden conectar con el usuario.
  • Es de desarrollo abierto:
    • El desarrollo y el uso siempre están abiertos para discusiones acerca de los mismos.
    • Es Open Source, el código se encuentra disponible en GitHub.
    • El protocolo es abierto, es un estándar documentado.
    • Como parte del desarrollo abierto no esconden los errores que se encuentran, estos se vuelven inmediatamente visibles a cualquier usuario.
  • Todavía se encuentra en desarrollo.
  • Tiene una interfaz web para configuración y monitoreo, accesible vía navegador.
  • Funciona en varias plataformas, teniendo una versión ARM.
  • Los dispositivos son identificados por una ID.
  • Se pueden sincronizar la cantidad de carpetas que se deseen, es una herramienta robusta en este sentido.

Para el proyecto de Cineclub es conveniente utilizar BTSync o Syncthing, debido a que son las tecnologías que más se adecuan a lo que se necesita para el mismo. Por ejemplo, ambas tecnologías se pueden implementar en los dos tipos de arquitectura propuestos, esto es gracias a que tienen tanto versiones para sistemas Linux, como una versión ARM la cual se puede usar en los Raspberry Pi.
En primera instancia este año se utilizará Syncthing para explorar el funcionamiento de la misma.

Sincronizacion_carpetas.dia - Diagrama sincro de carpetas (1.99 KB) Daniel Viñar Ulriksen, 07/02/2015 12:05 PM

Sincronizacion_carpetas.png (20.8 KB) Daniel Viñar Ulriksen, 07/02/2015 12:05 PM