Implementación de archivos en múltiples servidores


11

Tenemos un repositorio central de archivos en say server-1 at /srv/www. Luego tenemos N número de servidores también. Queremos que el servidor 1 pueda desplegar sus archivos en /srv/wwwtodos los servidores de la manera más rápida y eficiente posible.

¿Hay algo como rsync, pero en lugar de especificar un solo objetivo, especificando un clúster (N servidores) de objetivos?

Estaba pensando que gitpodría funcionar, pero ¿podemos especificar múltiples controles remotos para empujar también?

Cuál es la mejor solución, suponiendo que N servidores eventualmente lleguen a cientos.


2
¿Asumo que un sistema de archivos de red no es posible?
cjc

stackoverflow.com/questions/849308/… para un truco genial para empujar a múltiples controles remotos. Sin embargo, no estoy seguro de cientos.
cjc

Respuestas:


14

Bueno, tanto Twitter como Facebook han comenzado a usar bittorrent en sus clústeres para distribuir nuevas revoluciones de código. Al hacer esto, pueden enviar código a decenas de miles de servidores en muy poco tiempo en comparación con los métodos de implementación centralizados de la vieja escuela.

No parece que esté en esa escala todavía, pero no hay ningún daño en diseñar su sistema de implementación de modo que no se convierta en un cuello de botella en el corto plazo.


1
¿Cómo están usando bittorrent?
Dragos

3
Vea los artículos a los que me vinculé.
EEAA

@EEAA enlace de Twitter está roto
gprasant

@gprasant arreglado.
EEAA

7

No recomiendo git para las escalas con las que estás hablando. Puede funcionar, pero personalmente veo algunos déficits con el uso de ese modelo para buscar.

Hay un par de cosas que determinan la mejor manera de hacer esto:

  1. Qué tan grande de un repositorio debe ser compartido.
  2. Qué tan rápido necesita converger.

Para una convergencia perfecta y la velocidad máxima, deberá utilizar un sistema de archivos de red, como NFSv4. Los sistemas de archivos agrupados que conozco no se escalan a 'cientos múltiples' de nodos, por lo que tiene que ser un sistema de archivos de red. Esto presenta sus propios desafíos, pero significa que alcanzará la convergencia en el momento en que los archivos se actualicen en el cabezal NFS.

Para una convergencia rápida, puede usar algunos trucos rsync. Si el demonio rsync termina vinculado a la CPU, ciertamente puede poner un par de tres servidores rsync detrás de un equilibrador de carga como haproxy. Combine eso con los trabajos cron para extraer datos (o algún otro método para activar actualizaciones de código) y puede alcanzar la convergencia bastante rápido.

Para los dos anteriores, probablemente sea una buena idea colocar el repositorio central en enlaces de 10 GbE para obtener el máximo rendimiento.

Una alternativa es un push-rsync, donde se ejecuta desde el repositorio central para enviar actualizaciones a sus servidores. No convergerá tan rápido como cualquiera de los anteriores, pero será más amigable con su ancho de banda interno. Use múltiples hosts presionando a rangos divididos para una mejor velocidad.



-1

[afiliado] Usando Kwatee ( http://www.kwatee.net ) puede implementar en tantos servidores como desee. Las implementaciones son incrementales (solo se transmiten los archivos modificados) y se pueden paralelizar, por lo que es muy rápido. También puede configurar Kwatee para que tenga en cuenta el equilibrador de carga para que los servidores se eliminen del LB durante las actualizaciones y luego se vuelvan a insertar. Hay una interfaz gráfica para configurar los parámetros de implementación y luego las implementaciones pueden ser activadas manualmente a través de GUI o automatizadas mediante comandos de Python.


¿Quieres explicar el voto negativo?
mac

1
Unirse al sitio solo para proxenetizar el propio producto a menudo genera votos negativos por aquí.
ceejayoz

De todos modos, muchas respuestas honestas y transparentes
mac
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.