¿Cómo actualizo el archivo de configuración de Nginx en muchos servidores idénticos al mismo tiempo?

12

Tenemos una flota de servidores Nginx en Amazon EC2 donde ocasionalmente necesitamos actualizar los archivos de configuración para implementar nuevas configuraciones.

Actualmente tenemos las configuraciones en un AMI personalizado y si necesitamos actualizar tenemos que reconstruir el AMI y luego las instancias EC2. Tenemos algunos scripts de ayuda, pero todavía es un gran esfuerzo hacerlo. ¿Hay alguna forma mejor?

Bububu
fuente
3
ansible, saltstack por nombrar algunos.
Poige

Respuestas:

26

Hay una serie de conceptos que puede aprovechar.

La clave del éxito es la automatización.

La primera opción es seguir haciendo lo que está haciendo ahora, es decir, reconstruir los EC2 con cada cambio de configuración . Solo de forma totalmente automatizada.

Como ahora está realizando actualizaciones de configuración a través de AMI, va un paso más allá y crea una tubería que, al cambiar un archivo de configuración en algún repositorio, hará lo siguiente:

  1. Cree automáticamente un nuevo AMI , una de las herramientas más populares para hacerlo es Packer
  2. Reconstruya automáticamente su flota de Nginx : ya debería tener todos los servidores Nginx en un grupo de Auto-Scaling con un Balanceador de carga de aplicaciones al frente. Si no lo hace, debería hacerlo , ya que hará que la actualización sea tan simple como actualizar la configuración de inicio de ASG y esperar a que las instancias se reconstruyan a partir de la nueva AMI.

La segunda opción es mantener las instancias en su lugar y solo implementar los archivos de configuración , sin reconstruirlos. En general, puede tratar los archivos de configuración como código e implementar los cambios de configuración de la misma manera que implementaría las versiones de código. AWS tiene muchas herramientas para ayudar con eso.

  • AWS Elastic Beanstalk que utiliza Chef internamente y puede realizar un script de sus actualizaciones de Nginx de esta manera.
  • AWS Code Deploy, que es una herramienta de implementación totalmente programable que se integra bien con otras partes de AWS Code Suite :
    • Code Commit donde puede mantener sus archivos de configuración de Nginx en Git.
    • Canalización de código que puede activar automáticamente la implementación cada vez que se actualiza un archivo de configuración en Code Commit.
  • Ansible o Puppet, que son herramientas populares que no son de AWS y pueden ayudarlo a mantener todos los servidores configurados de la misma manera.

Una vez que se sienta cómodo con la automatización de estas actualizaciones de configuración de Nginx, es posible que desee extender la automatización al resto de su infraestructura.


Hay una excelente descripción general de las Opciones de implementación en AWS que le brindará una buena descripción general.

Espero que eso ayude :)

MLu
fuente
Una alternativa a Ansible o Puppet es Salt, que está diseñada para una configuración de tipo maestro / minion y optimizada para implementaciones a gran escala.
Araho
5

Almacene sus configuraciones en EFS y monte EFS en la ubicación donde se esperan las configuraciones de Nginx. Alternativamente, póngalos en Amazon S3 y ejecute una sincronización de vez en cuando, o use s3fs (tenga en cuenta que s3fs puede no ser lo suficientemente bueno para el uso de producción).

Cuando necesite cambiar su configuración, aumente el tamaño deseado de su grupo de autoescalado para duplicar lo que necesita para activar nuevas instancias con la nueva configuración, y luego vuelva a lo que necesita, lo que eliminará las instancias anteriores. Alternativamente, solo haga un reinicio continuo de los servidores.

Otra opción es simplemente empujar las nuevas configuraciones a su servidor utilizando una herramienta de automatización básica, como la implementación de código de AWS.

Las opciones completamente automatizadas anteriores son técnicamente mejores y más limpias, pero si rara vez cambia las configuraciones y desea una solución fácil, esto podría ayudar.

Tim
fuente
1

Reconstruir las AMI o crear tuberías de implementación completas como las otras sugieren solo para un cambio en el archivo de configuración parece una exageración. Debe usar Ansible para eliminar los cambios y mantener todos sus nodos sincronizados. Hay muchos módulos Ansible que pueden ayudarlo a automatizar las tareas comunes.

IPX
fuente
Una ventaja de la infraestructura inmutable es que sabe que no tiene ningún servidor "mascota" que sea frágil y deba mantenerse. Eso le da la confianza de que puede crear más servidores en prod / DR / testing sin problemas.
Tim