Balanceamento de carga para servidores da Web (com sincronização de estado)

2

(Eu olhei para outras perguntas, eu não acho que nenhuma delas cobre as mesmas coisas que isso)

Estou vendo uma solução de balanceamento de carga para nosso farm de servidores da Web. Atualmente, usamos dispositivos da série Cisco CSS11000, mas eles têm algumas limitações:

  • Atualmente, descarregamos o SSL, o que eu sei que sobrecarrega os LBs, em vez de escalar horizontalmente o trabalho SSL em vários servidores web
  • Os CSS LBs não suportam IPv6
  • Os CSSs não funcionam muito bem para o failover - queremos ser capazes de mover o tráfego de usuários para nos atualizar os servidores da Web sem interrupção do serviço.

Objetivos:

  • Vamos desativar metade dos servidores da Web de uma maneira "normal" (ou seja, novas conexões de usuários vão para um subgrupo especificado de servidores da web e nos informa quando as conexões existentes são fechadas - pontos de bônus se forçar o fechamento deles os usuários não percebem).
  • Vamos reiniciar / reconfigurar os balanceadores de carga sem interromper o serviço
  • Suporta as coisas usuais de HA que você esperaria (se um único servidor explodir ou travar, não quebre)
  • Gostaria de fazer isso sem gastar $$$ em balanceadores de carga comerciais / de hardware
  • Gostaria de fazer isso no Linux, se possível, para utilizar a experiência interna.
  • O resto do negócio gosta de coisas "Enterprise" porque eles podem culpar Alguém mais quando isso dá errado. Então, tudo o que eu recomendo colocar em prática precisa ser tão confiável quanto uma solução comercial.

Idéias:

  • Dois pares de HAProxy. Nós usaríamos o mecanismo de controle de soquete HAProxy ( link ) para remover com elegância os servidores da web. Cada par usaria heartbeat para manter o serviço, e nós modificaríamos o DNS para apontar para o outro par para mover novas conexões de usuários para o outro par. Precisaria de alguma forma de monitoramento para nos informar quando um par em particular tinha 0 conexões ativas.

  • Duas máquinas Linux fazendo o balanceamento com o iptables e o módulo -m aleatório. Eu usaria heartbeat para manter o HA VIP live em uma das máquinas, e usaria conntrackd para sincronizar o estado da conexão TCP, para que possamos fazer failover sem perda de serviço. Seria necessário algum script para inserir / remover regras iptables dependendo do estado dos backends (A menos que alguém saiba de uma ferramenta?)

Alguém tem algum comentário sobre o que precede? Ou quaisquer outras / melhores / complementares ideias?

Obrigado!

    
por Solontus 01.11.2011 / 22:39

3 respostas

0

O HAProxy é ótimo (por experiência), e não tenho certeza se você está ciente dos recursos mais recentes, como a sincronização da tabela do bastão (se você tiver a persistência ativada) usando a diretiva peers . Veja o Manual do 1.5 para mais informações: link

O HAProxy também é capaz de IPv6 - > Tradução de IPv4; muito útil se sua rede interna ainda estiver usando endereçamento IPv4, mas sua rede pública não estiver.

Uma coisa faltando na sua lista - LVS / IPVS que faz parte do kernel do Linux. Também é capaz de IPv6 (embora não seja capaz de traduzir, como não é um proxy). O desempenho é muito bom e é frequentemente usado em conjunto com o ldirectord (um daemon Perl) para verificar a integridade e a funcionalidade offline / online do servidor. link . Você pode recarregar o arquivo de configuração do ldirectord ou usar os comandos ipvsadm diretamente para colocar os servidores offline, alterar pesos, etc. O LVS também possui recursos de sincronização: link

Você não menciona se persistência / rigidez é um requisito, mas o LVS pode manter o IP de origem, e o HAProxy tem várias opções: cookies, IP de origem, cookies RDP.

No entanto, não execute a terminação SSL, isso pode ser feito por Stunnel, Pound e, sem dúvida, por vários outros.

    
por 02.11.2011 / 13:33
1
O

Servidor de Tráfego Apache parece realmente promissor. Eu uso BigIPs atualmente, o que funcionaria bem para o que você está procurando, mas eu não acredito que você estaria economizando dinheiro trocando por eles.

    
por 01.11.2011 / 23:50
-1

Olhando para os seus objetivos, eu recomendo que você fale com a KEMP Technologies (www.kemptechnologies.com), eu atualmente os uso para meu próprio aplicativo web, você pode desabilitar webservers que drenarão as conexões do servidor para novas conexões vá para outros servidores e os existentes permanecerão por um período de tempo e serão gradualmente migrados para os outros servidores. Eles oferecem alta disponibilidade com a opção de sincronizar suas tabelas de conexão e afinidade / persistência entre as unidades para que a segunda unidade saiba a qual servidor o cliente estava conectado quando estava passando pelo primeiro balanceador de carga. Eles também oferecem descarregamento de SSL e também podem ser feitos em hardware se você tiver um alto volume de tráfego SSL.

A lista de agregações de valor com custo elevado é bastante curta, o que facilita a obtenção de algo que faz o que você quer na primeira tentativa.

    
por 02.11.2011 / 11:47