Como equilibrar o tráfego da Web recebido entre os servidores N apache?


12

Eu estou olhando para usar algo como Heartbeat / Squid / Varnish / etc para equilibrar a quantidade de tráfego recebido entre as instâncias internas do apache. Isso teria que ser software e não hardware, pois todas as minhas coisas são executadas no VPS. Não tenho muita experiência nessa área. Desculpe se estou usando mal a terminologia e escolhendo os pacotes errados.

Eu elaborei algo para ilustrar o que estou procurando. O lado verde é a aparência da configuração inicial e o lado azul é a aparência depois de adicionar mais instâncias do apache devido ao aumento do tráfego. Talvez não seja assim que essas coisas funcionam, mas o ideal seria adicionar o IP do balanceador ao DNS do domínio. Então, o (s) balanceador (es) veria quantas conexões existem em cada instância do apache (através de alguma lista de configuração de IPs internos ou IPs eternos) e distribui as conexões igualmente. No azul, existe um segundo balanceador, pois tenho certeza de que em algum momento o balanceador também precisaria de ajuda.

Talvez eu esteja fazendo algo errado, mas estou procurando ajuda sobre quais devem ser os "balanceadores / es" e as melhores práticas sobre como configurá-los.

Qualquer ajuda seria ótimo. texto alternativo


1
me perdoe, mas que programa você usou para seus desenhos?
Prix

1
@Prix - parece que visio ( office.microsoft.com/en-us/visio )
malonso

Respostas:


4

Praticamente qualquer "proxy reverso" fará o que você pede.

Por exemplo, Varnish, Pound e HAProxy são bons no que fazem, mas também têm suas diferenças - no entanto, para o que você está perguntando, qualquer um deles fará. Pessoalmente, eu acho que você seria melhor com o HAProxy, mas isso é apenas um palpite.

Talvez seja melhor você ler um artigo sobre balanceadores de carga para ajudá-lo a decidir de que tipo você precisa: http://1wt.eu/articles/2006_lb/

Além disso, você pode considerar usar um serviço pré-criado para isso - como executar o software no Elastic Compute Cloud da Amazon e usar o Elastic Load Balancing.


2

Inicialmente, há uma pergunta importante que deve ser respondida:
você precisa que as sessões do usuário sejam manipuladas pelo (s) balanceador (s) de carga e sempre direcionadas para o mesmo servidor Web (se ativo)?

  • sessões não necessárias : nesse caso, você deve usar o programa nginx eficiente como um balanceador de carga. A configuração é fácil de definir, onde você basicamente apenas indica a lista de servidores da Web em uma upstream upstream_name { server1, ..., serverN }instrução e, para um determinado domínio, precisa de uma proxy_pass upstream_namediretiva simples .
    Veja o wiki do Nginx .

  • sessão necessária, há uma configuração semelhante para libra em que você indica o nome do cookie que hospedará o ID da sessão ( ID MYCOOKIENAME) e uma lista de BACKENDtodos os seus servidores.
    Veja, por exemplo, um exemplo de configuração de libra .

Quando surgir a necessidade de vários balanceadores de carga, convém fazer uma heartbeatconfiguração que garanta que apenas um balanceador monta o IP virtual para um determinado domínio (se as sessões forem necessárias) ou monte ambos e alimente o DNS com dois endereços IP para instância). Talvez isso deva ser detalhado em outra pergunta no momento em que for necessário (à medida que as ferramentas evoluem rapidamente).
Veja também este link, por exemplo.


1

Você precisa de um bom motivo para introduzir complexidade adicional e um único ponto de falha em sua arquitetura.

Balanceamento de carga Round-Robin

  • não custa nada
  • é simples de implementar e gerenciar
  • implementa failover no cliente - o único local em que a falha pode ser detectada com segurança
  • suporta implicitamente a afinidade do servidor, mas ainda permite failover sem os problemas de gerenciamento de sessões associados a sessões persistentes
  • não requer software / hardware / configuração adicional nos nós do cluster

Surpreende-me a quantidade de informações erradas sobre o round-robin. Se eu fosse uma pessoa cínica, poderia me perguntar se há alguma conexão com os fornecedores que produzem um grande e caro hardware de balanceamento de carga.

Os únicos pontos que vou admitir é que

  1. Os endereços IPV4 estão se tornando escassos e, portanto, caros - mas ainda muito. muito mais barato do que dizer um CSS da Cisco.

  2. Cada vez mais, a Internet roda em serviços da Web - e nem todos os desenvolvedores implementam o suporte ao DNS de acordo com as especificações . Mas todos os navegadores que já usei funcionam como deveriam


"não requer software adicional" - bem, exige que o aplicativo da Web tenha compartilhado o estado da sessão (login, o que há em uma cesta de compras, etc.). E o RR do DNS pode ter um balanceamento de carga desigual por longos períodos de tempo. Sim, DNS RR é um método viável, mas dificilmente é claramente superior às alternativas ...
Jesper M



0

Nginx é incrível como um proxy upstream, eu o usei com muito sucesso em uma configuração que faz mais de 1 milhão de cópias por dia


0

Ok, isso foi perguntado há um tempo, e estou atrasado para a festa. Ainda assim, há algo a acrescentar aqui.

Jackie, você acertou em cheio. Sua ilustração mostra como o balanceamento de carga é tratado na maioria das instalações menores e de médio porte.

Você deve ler a introdução do Willy Tarreau sobre o balanceamento de carga à qual o Nakedible se vinculou. Ainda é válido e é uma boa introdução.

Você precisa considerar como eles atendem às suas necessidades:

  • Balanceadores de carga no nível TCP / IP (Linux Virtual Server et al). O overhead mais baixo por conexão, a velocidade mais alta, não pode "ver" o HTTP.
  • Balanceadores de carga no nível HTTP (HAProxy, nginx, Apache 2.2, Pound, Microsoft ARR e mais). Sobrecarga mais alta, pode ver HTTP, pode compactar HTTP, pode fazer SSL, pode fazer balanceamento de carga de sessão persistente.
  • Proxies reversos HTTP (Apache Traffic Server, Varnish, Squid). Pode armazenar objetos com capacidade de cache (algumas páginas da web, css, js, imagens) na RAM e encaminhá-los para clientes subsequentes sem envolver o servidor da web de back-end. Geralmente, é possível fazer as mesmas coisas que os balanceadores de carga HTTP L7.

existe um segundo balanceador, tenho certeza de que em algum momento o balanceador também precisaria de ajuda.

Bem, claro. Mas o balanceamento de carga é simples e, geralmente, um único balanceador de carga pode ser rápido . Linko para este artigo, que impressionou a web, como apenas um exemplo de que desempenho um único servidor moderno pode oferecer. Não use vários LBs antes de precisar. Quando você precisa de uma abordagem comum, são os balanceadores de carga no nível IP na parte frontal (ou DNS Round Robin), indo para os balanceadores de carga no nível HTTP, indo para proxies e servidores de aplicativos da web.

ajuda sobre o que os "balanceadores / es" devem ser e as melhores práticas sobre como configurá-los.

O ponto do problema é o tratamento do estado da sessão e, até certo ponto, o comportamento do estado de falha. A configuração dos balanceadores de carga é comparativamente simples.

Se você estiver usando apenas 2-4 servidores de aplicativos da web back-end, o hash estático com base no endereço IP de origem pode ser viável. Isso evita a necessidade de estado de sessão compartilhada entre os servidores de aplicativos da web. Cada nó do aplicativo da web vê 1 / N do tráfego geral e o mapeamento de cliente para servidor é estático na operação normal. Porém, não é um bom ajuste para instalações maiores.

Os dois melhores algoritmos de balanceamento de carga, no sentido de que eles têm um comportamento benigno sob alta carga e distribuição uniforme de carga, são round robin e verdadeiro balanceamento de carga aleatório. Ambos exigem que seu aplicativo da Web tenha o estado da sessão global disponível nos nós do aplicativo da web. Como isso é feito depende da pilha de tecnologia dos aplicativos da web; mas geralmente existem soluções padrão disponíveis para isso.

Se nem o hash estático nem o estado da sessão compartilhada são adequados para você, a escolha geralmente é o balanceamento de carga da ' sessão complicada ' e o estado da sessão por servidor. Na maioria dos casos, isso funciona bem e é uma escolha totalmente viável.

o balanceador veria quantas conexões existem em cada instância do apache (através de alguma lista de configuração de IPs internos ou eternos) e distribui as conexões igualmente

Sim, alguns sites usam isso. Existem muitos nomes para os diferentes algoritmos de balanceamento de carga que existem. Se você pode escolher round robin ou aleatório (ou ponderado round robin, ponderado aleatório), recomendo que você faça isso, pelas razões expostas acima.

Última coisa: não esqueça que muitos fornecedores (F5, Cisco e outros de ponta, FX Coyote Point e Kemp Technologies a preços mais razoáveis) oferecem dispositivos de balanceamento de carga maduros .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.