Elastic Load Balancer para vários aplicativos da web

13

Eu tenho Nwebapps. Cada aplicativo da web é servido por um nome de host diferente no meu domínio e implantado em 2 instâncias em execução na AWS. Em outras palavras, tenho 2Ninstâncias, divididas em pares que executam aplicativos da Nweb distintos.

Gostaria de configurar um único AWS Elastic Load Balancer que faça proxy de uma solicitação para uma das duas instâncias que a atendem com base no Hostcabeçalho. Isso é possível usando um único ELB ou precisarei implantar NELBs, um para cada par de instâncias?

thesamet
fonte

Respostas:

19

Um único ELB roteia o tráfego para exatamente um conjunto de instâncias e distribui o tráfego recebido 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 Host:cabeçalho.

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

Se o seu objetivo principal de executar o ELB for descarregar o SSL usando um certificado curinga (eu tenho um sistema projetado assim, com dezenas de aplicativos vivendo em muitos domínios diferentes.my-wildcard-cert-domain.com), as instâncias "atrás", o ELB pode estar executando um proxy reverso, como o HAProxy (ou várias outras alternativas, como o Varnish), que pode tomar decisões de roteamento da camada 7 e encaminhar o tráfego para o subconjunto apropriado de máquinas por trás deles, o que também permite mais sofisticado balanceamento de carga 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é capturar o valor do cookie da sessão em seus logs para análise.

Essa configuração também me permite executar vários aplicativos em subconjuntos de instâncias sobrepostos, quando apropriado, e fazer 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 fica indisponível, o que o ELB não faz por conta própria. Eu descrevi dois servidores proxy aqui, por nenhum motivo específico além da sua menção ao número 2 na pergunta. Minha configuração na verdade tem 3, um para cada zona de disponibilidade na região em que isso é implantado.

Michael - sqlbot
fonte
3
Em agosto de 2016, a Amazon lançou o AWS Application Load Balancer, que permite o roteamento para diferentes grupos-alvo com base em cabeçalhos HTTP.
Jens Bannmann #
2
@JensBannmann isso é verdade. Quando o lançaram, as únicas regras de roteamento suportadas eram baseadas no caminho. Em 2017, eles adicionaram a capacidade de rotear com base no Host:cabeçalho. Esta resposta estava correta quando a escrevi em 2014, mas parece que é hora de uma atualização. Obrigado por trazer de volta à minha atenção.
Michael - sqlbot
3

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

  • O Classic Load Balancer roteia todo o tráfego para um conjunto de instâncias sem considerar o conteúdo do protocolo do aplicativo. Anteriormente, esse era o único tipo 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 nos caminhos da URL. A postagem do blog Novo - AWS Application Load Balancer menciona aplicativos que consistem em vários microsserviços 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, portanto, só funcionará facilmente se o seu Nnão for maior que 10.

Jens Bannmann
fonte
0

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

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

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

Eu acho que é melhor você me dar mais do seu cenário e talvez eu possa ajudá-lo.

Saudações.

ATUALIZAR

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

Junior Rocha
fonte
Na minha lista de instâncias, vejo 2Naplicativos. Existem N aplicativos da web, duas instâncias para cada. Vou editar a pergunta para esclarecer isso.
Thesamet
Resposta atualizada.
Junior Rocha