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/www
todos 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 git
podrí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.
rsync
deployment
git
Justin
fuente
fuente
Respuestas:
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.
fuente
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:
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.
fuente
rdist puede funcionar para usted.
fuente
[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.
fuente