Como configurar as verificações de integridade do ELB com vários aplicativos em execução em cada instância do EC2?

10

Na AWS, gostaríamos de usar os ELBs para balancear a carga de instâncias do EC2 que hospedam vários aplicativos. Idealmente, gostaríamos de ter uma verificação de integridade para o aplicativo.

No entanto, os balanceadores de carga elásticos da AWS atualmente permitem que você faça ping apenas em um local para uma verificação de integridade.

Qual seria a melhor maneira de implementar verificações de integridade com o ELB que leve em consideração o estado de vários aplicativos implantados em cada instância do EC2?

    
por Andrei Fierbinteanu 28.02.2014 / 14:25

3 respostas

9

Aqui estão duas maneiras de resolver isso:

A primeira opção é adicionar outra verificação de integridade no host que valide a integridade e retorna HTTP 200s para o ELB se a lógica disser que você deseja manter o host on-line. A lógica, claro, depende de você. A desvantagem aqui seria que, se o Aplicativo 2 fosse implantado com êxito em alguns hosts, todos os hosts ainda seriam "saudáveis" e receberiam tráfego.

Outra opção é usar um ELB adicional para cada aplicativo. Você pode apontar vários ELBs para as mesmas instâncias do back-end EC2 e o custo é muito pequeno para isso. Dessa forma, você pode verificar a integridade por aplicativo e descartar hosts com problemas em um nível por aplicativo, em vez de uma abordagem de tudo ou nada.

Edit: Por favor, note que esta é uma resposta mais antiga e é específica para o ELB, não para o ALB. O ALB suporta alvos separados em um host nativamente.

    
por 10.09.2015 / 04:12
7

Usar um ELB por aplicativo é o caminho a seguir.

Primeiro, você pode precisar deles de qualquer forma, se cada aplicativo estiver em seu próprio domínio e você precisar dar suporte ao SSL. No momento, os Amazon ELBs só permitem um certificado SSL para cada domínio, exigindo ELBs separados para cada domínio habilitado para SSL. (Certificações SSL Wildcard sendo uma exceção).

O desafio aqui é que as verificações de saúde do ELB atualmente não podem ser direcionadas para um domínio virtual específico hospedado em uma instância do EC2. (Nenhum cabeçalho "Host:" é enviado). Os pings de saúde do ELB sempre vão para o domínio padrão, como se você tivesse carregado o endereço IP da instância do EC2 em seu navegador. Portanto, é necessário algum adesivo para receber as verificações de integridade no domínio padrão e, em seguida, responder com o status de integridade de um aplicativo específico.

Aqui está uma configuração de exemplo de trabalho que pode ser adicionada a uma diretiva Nginx server . Seria instalado em cada uma das instâncias do EC2 sendo balanceadas por carga.

    # This goes in the 'server' block noted by 'default_server', often /etc/nginx/sites-enabled/default

    # All AWS Health Checks from the ELBs arrive at the default server.
    # Forward these requests on the appropriate configuration on this host.
    location /health-check/ {
      rewrite ^/health-check/(?<domain>[a-zA-Z0-9\.]+) /api/v1/status break;
      # Lie about incoming protocol, to avoid the backend issuing a 301 redirect from insecure->secure,
      #  which would not be considered successful.
      proxy_set_header X-Forwarded-Proto 'https';
      proxy_set_header "Host" $domain;
      proxy_pass http://127.0.0.1;
    }

Na configuração "Health Check" do ELB para "first-application.com", você selecionaria "HTTP" e porta 80 e digitaria um caminho como:

/health-check/first-application.com

Com a configuração Nginx acima em execução no host, a solicitação seria recebida no domínio padrão e proxy a resposta da configuração do Nginx no mesmo host para o link

Com essa abordagem, não há configuração por aplicativo no Nginx. Desde que cada aplicativo tenha um nome de domínio exclusivo, você só precisa configurar um ELB para cada aplicativo adequadamente.

    
por 10.12.2015 / 02:45
5

Em 11 de agosto de 2016, a Amazon lançou Balanceadores de carga de aplicativos . Eles permitem especificar vários grupos-alvo, cada um com seu próprio tipo de verificação de integridade. Então, isso agora é possível usando um único balanceador de carga!

    
por 28.09.2016 / 09:49