Por árbol de archivos grande me refiero a unos 200k archivos, y creciendo todo el tiempo. Sin embargo, se cambia un número relativamente pequeño de archivos en una hora determinada.
Por bidireccional quiero decir que los cambios pueden ocurrir en cualquiera de los servidores y necesitan ser empujados al otro, por lo que rsync no parece apropiado.
Por distante quiero decir que los servidores están en centros de datos, pero geográficamente remotos entre sí. Actualmente solo hay 2 servidores, pero eso puede expandirse con el tiempo.
En tiempo real, está bien que haya una pequeña latencia entre la sincronización, pero ejecutar un cron cada 1-2 minutos no parece correcto, ya que una fracción muy pequeña de archivos puede cambiar en una hora determinada, y mucho menos minutos.
EDITAR : Esto se ejecuta en VPS, por lo que podría estar limitado en los tipos de cosas a nivel de kernel que puedo hacer. Además, los VPS no son ricos en recursos, por lo que evitaría las soluciones que requieren mucha memoria RAM (como Gluster?).
¿Cuál es el enfoque mejor / más "aceptado" para hacer esto? Parece que sería una necesidad común, pero todavía no he podido encontrar un enfoque generalmente aceptado, lo cual fue sorprendente. (Estoy buscando la seguridad de las masas. :)
Me he encontrado con lsyncd para activar una sincronización en el nivel de cambio del sistema de archivos. Eso parece inteligente, aunque no es muy común, y estoy un poco confundido por los diversos enfoques de lsyncd. Solo está usando lsyncd con rsync, pero parece que esto podría ser frágil para la bidireccionalidad ya que rsync no tiene una noción de memoria (por ejemplo, para saber si un archivo eliminado en A debe eliminarse en B o si es un archivo nuevo en B eso debería copiarse a A). lipsync parece ser solo una implementación lsyncd + rsync, ¿verdad?
Luego está usando lsyncd con csync2 , así: https://icicimov.github.io/blog/devops/File-system-sync-with-Csync2-and-Lsyncd/ ... Me estoy inclinando hacia este enfoque, pero csync2 es un poco peculiar, aunque hice una prueba exitosa. Me preocupa sobre todo que no haya podido encontrar mucha confirmación comunitaria de este método.
A la gente aquí parece gustarle mucho Unison, pero parece que ya no está en desarrollo activo y no está claro que tenga un activador automático como lsyncd.
He visto mencionar a Gluster , pero ¿quizás exagere para lo que necesito?
ACTUALIZACIÓN: fyi- Terminé yendo con la solución original que mencioné: lsyncd + csync2. Parece que funciona bastante bien, y me gusta el enfoque arquitectónico de tener los servidores unidos de manera muy flexible, de modo que cada servidor pueda funcionar de manera indefinida por sí mismo, independientemente de la calidad del enlace entre ellos.
Respuestas:
DRBD en modo Dual-primario con un Proxy es una opción.
fuente
En lugar de sincronizar, ¿por qué no compartir el mismo sistema de archivos a través de NFS?
fuente
La implementación de un sistema de archivos distribuido probablemente sea mejor que piratear esto junto con herramientas y scripts, especialmente si el grupo de servidores crecerá. También podrá manejar mejor un nodo caído.
No creo que Gluster (o AFS) sea excesivo en absoluto.
fuente
En su caso, recomendaría una combinación de DRBD en modo dual-primario y gfs u ocfs.
El inconveniente de DRBD en dual-primary es que se ejecutará en modo sincrónico. Pero la velocidad de escritura no parece ser importante aquí, ¿verdad?
Una alternativa a DRBD podría ser un Soft-Raid1 que usa muchos (2+) objetivos iSCSI, pero preferiría DRBD con dos nodos.
fuente
Como se demostró anteriormente, hay muchas soluciones disponibles, cada una con sus ventajas y desventajas.
Creo que consideraría colocar todo el árbol bajo control de versiones ( Subversion , por ejemplo) y registrar / actualizar periódicamente desde ambos servidores en trabajos cron.
fuente
Habiendo terminado una búsqueda con respecto a lo mismo, voy con el brillo. Sin embargo, no he hecho ni encontrado pruebas de rendimiento.
fuente