2012-03-05 8 views
6

Ogni tanto Elastic Load Balancer (ELB) elimina uno dei miei server perché non è disponibile. Il che è buono, quasi nessuna interruzione.Come far riavviare automaticamente un'istanza EC2 quando ELB dice che non è disponibile?

In genere, il solo riavvio dell'istanza tramite la Console AWS risolve il problema.

Mi piacerebbe riavviare automaticamente la mia istanza EC2 quando diventa non disponibile.

Qual è il modo migliore per farlo? (capita di essere un'istanza di Windows, ma idealmente non dovrebbe avere importanza)

risposta

5

Ho ottenuto un'eccellente istanza EC2 micro e ho scritto un semplice script che elenca tutti i miei server su EC2 e fa un GET su ciascuno per assicurarsi che funzioni correttamente. Se un server non funziona correttamente, il mio script lo riavvia. Ho lo script in esecuzione una volta ogni 10 minuti.

Sarebbe stato un po 'più facile se ci fosse un servizio là fuori a fare questo per me, ma il sistema è stato facile da configurare e l'istanza micro è economica.

+4

Cosa succede se la tua istanza micro si arresta in modo anomalo? –

+1

che è successo. adesso ricevo un allarme Pingdom. tuttavia, idealmente, dovrei avere i server di produzione che controllano il micro e il micro che controlla la produzione. sospiro. – pk1557

+1

Cura di condividere questo script? – Mike

3

In generale, è necessario configurare i bilanciatori di carico con un gruppo di ridimensionamento automatico. Il gruppo di ridimensionamento automatico avrà informazioni su come è configurato il tuo server. Ad esempio, avrà un ami e un possibile file di dati utente che consentirà di configurarlo senza alcuna interazione da parte dell'utente. Quando i due servizi funzionano insieme, il servizio di bilanciamento del carico interromperà l'istanza non riuscita e avvierà immediatamente una nuova istanza.

Visto che si utilizza un'istanza di Windows, è possibile scrivere uno script PowerShell per configurare il server e utilizzare CloudInit.NET per eseguire lo script all'avvio del server. L'ultima parte dello script dovrebbe abilitare il controllo sul bilanciamento del carico.

+0

Questa è una buona informazione, ma per vari motivi mi sarebbe ancora preferirei che un semplice riavvio accadere, vs un Terminazione> nuova istanza. – pk1557

+1

È possibile provare a utilizzare il nuovo comando ec2-describe-instance-status e scrivere uno script che riavvierà l'istanza quando è inattivo. Questo script dovrebbe anche aggiungere nuovamente l'istanza al servizio di bilanciamento del carico. Script abbastanza facile da scrivere.Una volta che lo script è completo, inseriscilo in un crontab e funzionerà fino a quando la macchina su cui funziona è in esecuzione. http://aws.typepad.com/aws/2012/01/ec2-instance-status-checks.html – bwight

6

Utilizzare il gruppo di scalabilità automatica e impostarlo per mantenere 1 istanza dal vivo. Se l'istanza si arresta, ne verrà generata una nuova dall'immagine di istanza predefinita. È facile e conveniente

+0

Mentre questo è vero, spesso il riavvio dell'istanza in questione risolve il problema, e il riavvio è * molto * più veloce rispetto all'avvio di una nuova istanza ... –

1

Scrivere una funzione lambda!

È più economico che eseguire un'istanza micro e puoi impostarlo per l'esecuzione all'intervallo che desideri. Inoltre, ricevi il monitoraggio di Cloud Watch con esso in modo da non doverti preoccupare di controllare separatamente lo stato della tua microistanza.

Sto utilizzando un ElasticBeanstalk, che offre l'endpoint describeInstancesHealth. In alternativa è possibile utilizzare l'endpoint describeInstanceStatus di ec2.

Quindi se si rileva una cattiva istanza, ec2 rebootInstances consente di riavviare una o più istanze.

2

D'accordo con @agmin che una funzione lambda è un ottimo modo per farlo. È possibile configurare un allarme CloudWatch per attivare la funzione lambda tramite un argomento SNS.

Ho messo insieme questa implementazione e sembra funzionare bene. Può essere impostato e configurato completamente tramite la riga di comando:

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

Problemi correlati