Balanceador de carga HTTP com roteamento baseado em cabeçalho?

4

Estou procurando uma solução de balanceamento de carga HTTP que forneça o seguinte:

1) Aceite as conexões HTTP na porta X e encaminhe-as para um dos vários outros hosts (e / ou portas), aleatoriamente ou de maneira round-robin.

2) Se a resposta do servidor contiver um determinado cabeçalho HTTP com um determinado valor (por exemplo, 'Número Mágico: 12345'), lembre-se e encaminhe todos os pedidos seguintes contendo o mesmo cabeçalho para este servidor.

3) Em determinados intervalos, realize um teste de manutenção contínua enviando uma solicitação HTTP especificada para todos os servidores de destino. Se um dos servidores não responder, pare de encaminhar para ele até que ele fique on-line novamente.

4) (Não é crucial, mas é bom ter) Aceite conexões HTTPS de clientes e traduza-as para conexões HTTP para os servidores.

A solução deve consistir em software livre e / ou de código aberto e ser executada no Windows 200x Server.

Alguma sugestão?

Atualização: Cygwin ou Portable Ubuntu (ou outra distribuição Colinux) também são opções viáveis, se eles forem capazes de executar as soluções * nix apropriadas.

    
por Anders Sandvig 10.06.2009 / 10:20

6 respostas

1

Estou escrevendo isso fora da minha cabeça / memória, pois não tenho nada à mão para verificar se funciona corretamente ou não, mas espero que isso seja uma pista para você.

Então, minha resposta é:

Claro que você pode fazer isso com o mod_proxy_balancer do Apache. Você deve ser capaz de realizar isso com algo assim:

ProxyPassReverse / http://host1:80/
ProxyPassReverse / http://host2:80/

<Proxy balancer://cluster>
  BalancerMember http://host1:80 route=LB1
  BalancerMember http://host2:80 route=LB2
  ProxySet stickysession=MYSESSIONID
</Proxy>

Portanto, em relação ao ponto 1, leia a seção "Algoritmo de contagem de solicitações" do mod_proxy_balancer .

Em relação ao ponto 2: eu realmente não sei sobre a análise do cabeçalho HTTP. O exemplo acima usa o parâmetro de URL adicional MYSESSIONID para o tráfego de proxy que faz parte da mesma conexão com o mesmo host. Eu acho que você também pode usar cookies. De qualquer forma, isso deve ser tratado pelo aplicativo identificado como LB1 ou LB2 (estes são adicionados como parte do id ou cookie da sessão).

Re 3: o balanceador de carga monitora todos os membros e os desativa quando eles não respondem. Você também pode ativar / desativar nós por meio da interface da web ( mod_status , consulte "Ativando o suporte do Balancer Manager").

Quanto ao ponto 4, você pode configurar o VirtualHost habilitado para SSL na porta 443, que faz o proxies de todo o tráfego para a porta 80 dos membros do balanceador.

    
por 10.06.2009 / 11:12
2

Estou usando o nginx há alguns anos e muito satisfeito com ele.

O nginx (pronunciado como "engine X") é um proxy de servidor web / proxy reverso e e-mail (IMAP / POP3) leve e de alto desempenho, licenciado sob licença BSD.

É bom no balanceamento de carga e no proxy reverso. Confira exemplos aqui

    
por 15.06.2009 / 17:40
2

Eu sei que isso não é para o Windows, mas vou responder de qualquer maneira, porque acho que seria muito interessante em sua configuração para olhar para este aternative.

HAProxy é um Proxy HTTP (e pode representar qualquer outra coisa, mas que estará na camada 4 e abaixo). Faz praticamente tudo o que você quer fazer. A documentação não é muito bonita, mas se você realmente tiver tempo para lê-la, verá que ela tem todas as informações que você precisa.

Funciona praticamente com qualquer coisa, então, a menos que você esteja fazendo muito SSL, não precisará comprar uma máquina grande e cara.

    
por 10.06.2009 / 11:54
1

Verifique o balanceador de carga de libra, que faz o LB baseado em cabeçalho de HTTP:

por 09.02.2012 / 04:02
0

Eu usei no Apache passado com o mod_cache em um ambiente Unix. Funcionou bem com baixa carga de usuário, mas dias com carga pesada o sistema caiu todo o dia.

Após alguns testes, passamos para o Varnish Cache e agora tudo funciona melhor.

O problema é que apenas o ambiente Unix é suportado, existe uma nova versão baseada em cygwin do windows em verniz, mas agora não sei se é adequado para o ambiente de produção:

por 24.01.2011 / 19:22
0

Eu diria que isso é possível com o IIS 7 também, usando o URL Rewrite em combinação com o Network Load Balancing. O básico é

  • distribuir tráfego em vários hosts com NLB
  • escreva as regras de reescrita com base nos cabeçalhos com o URL Rewrite do IIS.
por 07.05.2013 / 16:04