2011-10-09 19 views
6

He estado trabajando en una aplicación web PHP basada en la nube (AWS EC2), y estoy luchando con un problema cuando se trata de trabajar con varios servidores (todo bajo una AWS Elastic Load Balancer). En un servidor, cuando cargo los archivos más recientes, se producen de forma instantánea en toda la aplicación. Pero esto no es cierto cuando se utilizan varios servidores: tiene que cargar archivos a cada uno de ellos, cada vez que confirma un cambio. Esto podría funcionar bien si no actualiza nada muy a menudo, o si solo tiene uno o dos servidores. Pero, ¿qué sucede si actualiza el sistema varias veces en una semana, en diez servidores?Implementar contenido en múltiples servidores (EC2)

Lo que estoy buscando es una forma de 'comprometer' los cambios de nuestro servidor de prueba o desarrollo y hacer que se 'envíen' a todos nuestros servidores de producción inmediatamente. Lo ideal sería que la actualización se aplicara solo a un servidor a la vez (aunque solo llevara uno o dos por servidor) para que el ELB no le envíe tráfico mientras los archivos están cambiando para no interrumpir el tráfico de producción que pueda haber. fluyendo al ELB. ¿Cuál es la mejor manera de hacer esto? Uno de mis pensamientos sería usar SVN en el servidor de desarrollo, pero eso realmente no 'empuja' a los servidores. Estoy buscando un proceso que lleva solo unos segundos para confirmar una actualización y luego comenzar a aplicarlo a los servidores. Además, para aquellos que están familiarizados con AWS, ¿cuál es la mejor manera de actualizar un AMI con las últimas actualizaciones para que el autoescalador siempre inicie instancias nuevas con la última versión del software?

Tiene que haber buenas maneras de hacerlo ... no se puede imaginar sitios como Facebook, Google, Apple, Amazon, Twitter, etc. pasando y actualizando cientos o miles de servidores manualmente y uno por uno cuando hacer un cambio.

Gracias de antemano por su ayuda. Espero que podamos encontrar alguna solución a este problema ... lo que tiene que ser al menos 100 búsquedas de Google realizadas por mí y mi socio comercial durante el último día han resultado infructuosas en su mayor parte en la solución de este problema.

Alex

+0

Esta es la misma pregunta que aquí: http://stackoverflow.com/questions/6730360/best-way-to-load-php-classes-in-ec2-instancestore-ebs-or-s3 – andig

Respuesta

0

Tener un buen vistazo a KwateeSDCM. Le permite implementar archivos y software en cualquier cantidad de servidores y, si es necesario, personalizar los parámetros específicos del servidor a lo largo del camino. Hay una publicación sobre deploying a web application en varias instancias de tomcat pero es independiente del idioma y funcionará para PHP siempre y cuando tenga habilitado ssh en sus servidores AWS.

1

Utilizamos scalr.net para administrar nuestros servidores web y las instancias de equilibrador de carga. Funcionó bastante bien hasta ahora. tenemos una granja de servidores para cada uno de nuestros entornos (2 granjas de producción, puesta en escena, caja de arena). Tenemos funciones preconfiguradas para servidores web, por lo que es muy fácil abrir nuevas instancias y escalar cuando sea necesario. el código de extracción del servidor web de github cuando se inicia.

No hemos completado todos los cambios de implementación que queremos hacer, pero básicamente así es como hacemos uso de las nuevas versiones en nuestro entorno de producción:

  1. que utilizamos Phing para actualizar el código fuente y el despliegue en cada Web Servicio. creamos una tarea que ejecuta un git pull y ejecuta cambios en la base de datos (tarea dbdeploy phing). http://www.phing.info/trac/
  2. escribimos un script de shell que ejecuta phing y lo agregamos a scalr como un script. Scalr tiene una buena interfaz para administrar scripts.

    #!/bin/sh 
    
    cd /var/www 
    phing -f /var/www/build.xml -Denvironment=production deploy 
    
  3. Scalr tiene una opción para ejecutar secuencias de comandos en todos los casos en una granja específica, por lo que cada versión que acaba de empujar a la rama principal en GitHub y ejecutar la secuencia de comandos Scalr.

Queremos crear un gancho github que se despliegue automáticamente cuando empujemos a la rama principal. Scalr tiene api que puede ejecutar scripts, por lo que es posible.

Cuestiones relacionadas