¿Hay alguna manera de duplicar dos servidores en Ubuntu?


8

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!)


Duplicación de archivos: Gluster o DRDB; Duplicación de sitios web: barniz o HAProxy; Duplicación de DB: replicación circular MySQL o replicación de Postgres .; - La mayoría de los paquetes de servidor tienen un modo de operación de clúster, o hay proxys inversos que le permiten hacer eso.
Tom O'Connor

Respuestas:


6

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:

srv1:/data/staging/  <= is where you upload your data
srv1:/data/production/ <= is where your servers get their production data from
srv2:/data/production/

srv1$ cat /etc/cron.d/syncdata.cron
=====
*/5 * * * * syncuser rsync -a --delete /data/staging/ /data/production/
*/5 * * * * syncuser rsync -az --delete -e ssh /data/staging/ srv2:/data/production/
=====

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.


DRBD se ve bien. ¿Es malo usar esto con un servidor en vivo? ¿Cómo afectaría al servidor en vivo?
Kyle

Depende: ¿qué está haciendo el servidor en vivo? ¿Es un servidor web, servidor de bases de datos, servidor de archivos, etc.? DRBD realiza una replicación sincrónica, con todas las implicaciones que conlleva. Dependiendo de si planea ir a Primaria simple o Primaria dual, se aplicarán ciertas restricciones de almacenamiento en caché de E / S (y sistema de archivos) que a su vez afectarán sus aplicaciones. Para más detalles, sugiero leer la Guía del usuario de DRBD drbd.org/users-guide-emb, que está muy bien escrita y explica todas las implicaciones con gran detalle.
Lukas Loesche

5

Básicamente tienes 3 posibilidades:

  1. Deje que su aplicación envíe los archivos a ambos servidores.
  2. Replicación asincrónica, por ejemplo, rsync cada 15 minutos (o menos) con un trabajo cron
  3. Replicación sincrónica en el sistema de archivos (p. Ej. GlusterFS ) o nivel de dispositivo de bloque (p . Ej. DRBD ). Si usa la replicación en el nivel de dispositivo de bloque, necesita un sistema de archivos que admita el bloqueo distribuido (por ejemplo, OCFS2 o GFS2 ) si desea tener acceso r / w a los archivos desde ambos servidores al mismo tiempo.



1

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.


Tenga en cuenta que los bucles mencionados a continuación no serán un problema con Rsync, ya que mantiene las fechas de modificación de los archivos que transfiere si se configuran correctamente.
Thingomy

0

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 :).


0

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:

/etc/apache/sites-enabled
/etc/apache2/sites-avaliable
/var/www

muerto simple y trabajando


0

clonezilla también puede ver qué usa rsync


No estoy seguro de que clonezilla sea aplicable aquí ... sin embargo, es una buena utilidad.
HopelessN00b
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.