Me preguntaba si es posible duplicar dos servidores, como si pudieras subir archivos a un servidor y empujarían al otro servidor, etc. Tengo más curiosidad por duplicar archivos, no tiene que duplicar la administración de paquetes y configuración (¡Pero eso también sería genial!)
8
Respuestas:
Depende mucho del trabajo en cuestión.
¿Por qué necesitas duplicar archivos? ¿Desea actualizar algo como un sitio web o un repositorio de contenido donde generalmente está bien actualizar periódicamente? ¿O necesita sincronización de datos en tiempo real?
Para la duplicación asíncrona periódica de archivos, generalmente es suficiente tener un Área de ensayo en la que cargue todos sus datos. Y desde donde lo distribuyes a los Servidores. En su caso, con dos servidores, puede crear un recurso compartido de archivos provisional en srv1 a donde transfiere los datos (a través de FTP, NFS, DAV, SFTP, etc.) y luego hacer que un cronjob rsync los archivos a los directorios "en vivo" de srv1 y srv2. La forma más fácil de usar rsync en ese caso es generar un par de claves ssh que usará para las transferencias de datos y que está autorizado en todos los servidores de su clúster.
Ejemplo:
Esto debería darte una idea básica. Por supuesto, desearía ajustar las llamadas rsync en algunos scripts e implementar un bloqueo adecuado para que no se ejecute dos veces en caso de que la sincronización tarde más de 5 minutos, etc. Además, no hace falta decir que un área de preparación no es obligatoria. También podría sincronizar srv1: producción a srv2: producción directamente. Solo que srv2 podría mostrar datos que son hasta 5 minutos más antiguos que los de srv1. Lo que podría ser un problema, dependiendo de cómo se equilibre entre los dos.
Otra forma de distribuir archivos asincrónicamente es empaquetarlos como rpm o, en su caso, archivos deb. Póngalos en un repositorio central y haga que se instalen / actualicen a través de algo como cfengine, monkey o alguna solución basada en el bus de mensajes de bricolaje. Esto tiene el agradable efecto secundario de versionar los datos desplegados, pero solo es adecuado para pequeñas cantidades de datos que usted produce y despliega (como las versiones de su propio software). No querría distribuir TB de datos con esto y tampoco es adecuado para reflejar el contenido que cambia con una frecuencia alta, como cada dos minutos más o menos.
Si necesita replicar datos casi en tiempo real pero no necesariamente sincrónico en lugar de llamar a un cron de vez en cuando, puede usar algún método basado en inotify como el incron ya mencionado para llamar a sus scripts de sincronización. Otra posibilidad es usar Gamin (que también usa inotify si está presente en el Kernel) y escribir su propio pequeño demonio de sincronización. Por último, pero no menos importante, si todos los archivos se cargan en un servidor a través de, por ejemplo, SFTP, puede verificar si su servidor SFTP le permite definir enlaces que se invocan después de ciertos eventos, como la carga de archivos. De esa manera, podría decirle a su servidor que active su script de sincronización cada vez que se carguen nuevos datos.
Si necesita un reflejo síncrono de datos en tiempo real, un sistema de archivos del clúster podría estar en orden. DRDB ya ha sido nombrado. Es muy bueno para la replicación en el nivel de bloque y a menudo se usa para configuraciones de MySQL de alta disponibilidad. También es posible que desee echar un vistazo a GFS2, OCFS2, Lustre y GlusterFS. Aunque Luster y GlusterFS no son realmente adecuados para una configuración de dos servidores.
fuente
Básicamente tienes 3 posibilidades:
fuente
cron + rsync = directorios / archivos reflejados
fuente
Dependiendo de su caso de uso específico: podría usar algo similar a DRBD http://www.drbd.org/
fuente
Si está tratando de construir una solución de respaldo aquí (lo que he hecho personalmente en la misma configuración) tenga cuidado. Hay muchos aspectos diferentes de los que debe hacer una copia de seguridad, uno de los cuales (posiblemente el más grande) es la eliminación accesoria: cualquier sistema de replicación en vivo simplemente replicará la eliminación y no proporcionará seguridad. Para esta replicación diaria funciona, pero es una respuesta bastante débil. Prueba RSnapshot.
Unison bien puede funcionar para usted, pero no tengo experiencia personal.
Ejecutar Rsync en ambas direcciones con los indicadores apropiados puede funcionar, pero tiene el problema bastante complicado de cómo manejar archivos eliminados, sin manipulación especial, simplemente restaura los archivos, lo cual está bien si nunca eliminas algo como yo, pero un poco pobre de lo contrario. También hace cosas extrañas si se mueve un archivo.
Independientemente de lo que esté haciendo, si puede surgir una situación en la que los archivos se puedan editar simultáneamente en ambos extremos, tiene un problema. Al unísono es la única solución que conozco que puede manejar esto incluso de manera satisfactoria.
fuente
Si es unidireccional (quiero decir, siempre de un servidor a otro servidor, pero no al revés) podría usar
incron
. Es como cron pero basado en eventos del sistema de archivos.Cada vez que se crea o cambia un archivo, activará un scp o rsync en el otro servidor.
Bidireccional tiene el problema de los bucles :).
fuente
depende de sus necesidades ... tengo una configuración muy "barata y fácil" para servidores web agrupados.
Simplemente tengo un "servidor de archivos" (NFS) donde todos los servidores web montan los siguientes directorios:
muerto simple y trabajando
fuente
clonezilla también puede ver qué usa rsync
fuente