2012-03-05 22 views
6

Cada tanto, Elastic Load Balancer (ELB) pone en marcha uno de mis servidores para que no esté disponible. Lo cual es bueno, casi ninguna interrupción.¿Cómo hacer que una instancia de EC2 se reinicie automáticamente cuando ELB dice que no está disponible?

Normalmente, el reinicio de la instancia a través de AWS Console soluciona el problema.

Me gustaría que mi instancia de EC2 se reinicie automáticamente cuando no esté disponible.

¿Cuál es la mejor manera de hacerlo? (sucede que es una instancia de Windows, pero idealmente eso no debería importar)

Respuesta

5

Obtuve una microinstancia EC2 barata y escribí una secuencia de comandos simple que enumera todos mis servidores en EC2, y hace un GET en cada uno para asegurarse de que está funcionando correctamente. Si un servidor no funciona correctamente, mi script lo reinicia. Tengo el script ejecutándose una vez cada 10 minutos.

Hubiera sido un poco más fácil si hubiera un servicio para hacer esto por mí, pero el sistema era fácil de configurar y la microinstancia es barata.

+4

¿Qué sucede si su microinstancia se bloquea? –

+1

que ha sucedido. ahora mismo recibo una alerta de Pingdom. sin embargo, lo ideal sería que los servidores de producción verificaran el micro y el micro verificando la producción. suspiro. – pk1557

+1

¿Te importa compartir este script? – Mike

3

En general, debe tener sus balanceadores de carga configurados con un grupo de escala automática. El grupo de escala automática tendrá información sobre cómo se configura su servidor. Por ejemplo, tendrá un ami y un posible archivo de datos de usuario que permitirá que se configure sin ninguna interacción del usuario. Cuando tenga estos dos servicios trabajando juntos, el equilibrador de carga terminará su instancia fallida y comenzará una nueva instancia inmediatamente.

Como utiliza una instancia de Windows, puede escribir un script de PowerShell para configurar su servidor y utilizar CloudInit.NET para ejecutar el script cuando se inicie el servidor. La última parte de la secuencia de comandos debería permitir la verificación en el equilibrador de carga.

+0

Esta es una buena información, pero por diversas razones por las que todavía prefieren que un simple reinicio ocurra, frente a un termination-> nueva instancia. – pk1557

+1

Puede intentar usar el nuevo comando ec2-describe-instance-status y escribir un script que reiniciará la instancia cuando esté inactivo. Esta secuencia de comandos también necesitaría volver a agregar la instancia al equilibrador de carga. Escritura bastante fácil de escribir.Una vez que el script está completo, colóquelo en un crontab y funcionará mientras la máquina funcione. http://aws.typepad.com/aws/2012/01/ec2-instance-status-checks.html – bwight

6

Use el grupo de autoescalado y configúrelo para mantener 1 instancia activa. Si su instancia falla, generará una nueva a partir de una imagen de instancia predefinida. Es fácil y conveniente.

+0

Si bien esto es cierto, a menudo reiniciar la instancia en cuestión corrige el problema, y ​​el reinicio es * mucho * más rápido que el lanzamiento de una nueva instancia ... –

1

¡Escriba una función lambda!

Es más económico que ejecutar una microinstancia, y puede configurarlo para que funcione al intervalo que desee. También obtienes monitoreo de CloudWatch con él, por lo que no tienes que preocuparte por verificar el estado de tu microinstancia por separado.

Estoy usando un ElasticBeanstalk, que ofrece el punto final describeInstancesHealth. Alternativamente, puede usar el punto final describeInstanceStatus de ec2.

Luego, si detecta una instancia incorrecta, ec2 rebootInstances le permite reiniciar una o más instancias.

2

De acuerdo con @agmin que una función lambda es una gran manera de hacer esto. Puede configurar una alarma de CloudWatch para activar la función lambda a través de un tema SNS.

Conjunté esta implementación y parece funcionar bien. Puede ser instalado y configurado en su totalidad a través de la línea de comandos:

https://github.com/jcowley/elb-instance-reboot

Cuestiones relacionadas