Elastic Load Balancing do Amazon EC2 - estratégia para reinicialização do servidor com tempo de inatividade zero

4

Eu tenho 5 servidores da web (Apache / mod_perl) por trás do Elastic Load Balancing do Amazon EC2, quando implantei códigos nos servidores da Web, estou fazendo isso ...

  1. Para cada máquina, desligue o Apache
  2. Atualize o código
  3. Comece pelo servidor e prossiga para o próximo servidor

Eu acho que quando meu servidor está desligado, o ELB não distribuirá a solicitação para o meu servidor, mas como a solicitação ainda está sendo veiculada?

Acho que uma abordagem melhor é

  1. Parar de aceitar novo pedido do ELB
  2. Sleep por vezes, encerre o servidor da web somente se todas as solicitações forem respondidas
  3. Atualize os códigos
  4. Inicie o servidor novamente

Mas como executar (1) e (2) do meu servidor local? Preciso usar a API da AWS? ou outra maneira fácil de fazer isso?

Obrigado.

    
por Ryan 15.05.2012 / 18:02

3 respostas

2

Eu executo o apache / mod_perl como instâncias do EC2 com balanceamento de carga, e faço atualizações de código regularmente como você diz. Meu processo é:

  1. tire uma ou duas instâncias de rotação
  2. encerre o apache nessa instância
  3. atualizar a (s) instância (s)
  4. retornar à rotação e remover os outros

A documentação da AWS explica como adicionar e remover a instância da rotação usando a API ou o console, sua escolha. Você notará que, com a minha abordagem, os servidores da Web ficam fora de rotação normalmente, por isso não me preocupo se uma determinada solicitação do usuário é eliminada. Como mencionado em @ cyberx86, você pode usar o comando apachectl -k graceful para desligar seu servidor apache depois que cada solicitação for processada.

    
por 30.07.2012 / 23:31
3

Eu tenho outra maneira de conseguir isso, se você tiver várias coisas para atualizar em cada servidor. Isso vai ser muito desperdício para atualizar o servidor 5 para as mesmas operações.

Crie um balanceamento de carga & Grupo de dimensionamento. Assegure-se de que a conexão de drenagem esteja ativada.

Existe o meu passo de atualização.

  1. Remova uma instância do seu balanceador de carga. Atualize tudo que você precisa. E crie uma AMI a partir da sua instância de produção. Isso causará o reinício da sua instância.
  2. Configure o grupo Escala com nova AMI.
  3. Remove a instância do balanceador de carga e interrompe a instância. o nova instância será iniciada automaticamente
  4. Continuar com o desligamento de outros instância e, afinal, instância recriada. A atualização é concluído.

Alguns guias:
Load Balance Seu Grupo de Auto Scaling
Drenagem da conexão

    
por 31.03.2015 / 10:06
2

Se a sua implantação puder ser modificada para oferecer suporte a instâncias recém-criadas e com novo código, você poderá remover a instância de um ELB, aguardar 60 segundos (após o qual o ELB da Amazon fechará a conexão ao back-end e ao cliente) e depois encerre a instância - e confie no Auto Scaling Group da Amazon para trazer uma nova instância para você. Eu criei uma ferramenta de código aberto que automatiza esse processo - disponível em awsmissingtools.com - procure a ferramenta chamada "AWS-HA-Release".

    
por 31.08.2012 / 17:11