Elastic Load Balancer para vários webapps

13

Eu tenho N webapps. Cada webapp é atendida por um hostname diferente no meu domínio e implantada em duas instâncias em execução no AWS. Em outras palavras, tenho 2N instâncias, divididas em pares que executam N webapps distintos.

Gostaria de configurar um único AWS Elastic Load Balancer que enviará uma solicitação para uma das duas instâncias que a veicularem com base no cabeçalho Host . Isso é possível usando um único ELB ou precisarei implantar N ELBs, um para cada par de instâncias?

    
por thesamet 07.02.2014 / 17:20

3 respostas

19

Um único ELB direciona o tráfego para exatamente um conjunto de instâncias e distribui o tráfego de entrada para todas as instâncias "por trás" dele. Ele não roteia seletivamente o tráfego com base em qualquer análise da camada 7 do tráfego, como o cabeçalho Host: .

Você precisa de um ELB para cada conjunto de instâncias. Como você descreve, esse é um ELB para cada webapp.

Se o seu objetivo principal para executar o ELB for descarregar o SSL usando um certificado curinga (eu tenho um sistema projetado como este, com dezenas de aplicativos vivendo em many-diferentes-domínios.my-wildcard-cert-domain.com), então as instâncias "por trás" do ELB poderiam estar executando um proxy reverso como o HAProxy (ou várias outras alternativas, como o Varnish) que podem tomar decisões de roteamento da camada 7 e encaminhar o tráfego para o subconjunto apropriado de máquinas por trás deles, que também permite balanceamento de carga mais sofisticado e tem a vantagem de fornecer estatísticas e contadores de tráfego, agregados e separados.

       /-- HAProxy \  /----- instances hosting app #1  
ELB ---|            >> ----- instances hosting app #2 
       \-- HAProxy /  \----- instances hosting app #n 

As instâncias intermediárias ^^^^ podem avaliar os Host: cabeçalhos (entre outras coisas) e até mesmo capturar o valor do cookie de sessão em seus registros para análise.

Essa configuração também permite que eu execute vários aplicativos em subconjuntos de instâncias sobrepostas, quando apropriado, e faça muitas outras coisas que o ELB por si só não suporta diretamente. Ele também retorna uma página "503" personalizada no caso em que um aplicativo fica sobrecarregado ou se torna indisponível, o que o ELB não faz sozinho. Eu mostrei 2 servidores proxy aqui, sem nenhum motivo específico além da sua menção ao número 2 da questão. Minha configuração, na verdade, tem 3, um para cada zona de disponibilidade na região em que isso é implantado.

    
por 08.02.2014 / 05:07
3

A partir de agosto de 2016, o Amazon ELB oferece dois tipos diferentes de balanceadores de carga:

  • O Load Balancer clássico direciona todo o tráfego para um conjunto de instâncias sem considerar o conteúdo do protocolo de aplicativo. Anteriormente, esse era o único tipo de ELB disponível.
  • O Application Load Balancer pode rotear o tráfego para diferentes grupos de destino de acordo com regras configuráveis com base em caminhos de URL. A postagem no blog Novo - Balanceador de carga de aplicativos da AWS menciona aplicativos que consistem em vários microservices como o caso de uso principal e fornece instruções detalhadas de configuração.

Para o seu caso de uso, o Application Load Balancer parece ideal. No entanto, ele é limitado a 10 regras, por isso só funcionará facilmente se o seu N não for maior que 10.

    
por 27.04.2017 / 11:18
0

Na sua lista de instâncias do ec2, você vê duas instâncias, certo? Mas em cada instância você tem muitos webapps? Você usa o host virtual para implantar cada um deles?

Você precisa de apenas um ELB para dividir a cobrança em seus hosts. Exemplo:

External request > ELB (based on CNAME pointer)  > EC2 Instance. 

Acho melhor você me dar mais do seu cenário e talvez eu possa ajudá-lo.

Atenciosamente.

UPDATE

Se você tiver aplicativos da Web diferentes nas instâncias do EC2, precisará ter dois ELB (Elastic Load Balancers). Cada um por um par de instâncias. Totalmente, quatro instâncias

    
por 07.02.2014 / 18:54