O balanceamento de carga não está funcionando como esperado no Apache no modo round-robin

3

Estamos enfrentando um comportamento inesperado com o balanceamento de carga round-robin no Apache quando um dos servidores Tomcat fica inativo.

Nossa configuração: nós temos 2 servidores web Apache no front-end usando o módulo mod_jk para balanceamento de carga com distribuição de carga round-robin. Nós ativamos o stickyness da sessão. A carga é equilibrada entre 4 servidores Tomcat nos quais os aplicativos estão sendo executados.

Às vezes, sob carga pesada, se houver lentidão em nosso nível de banco de dados, eventualmente, um dos servidores Tomcat entrará em um estado suspenso e precisaria ser reiniciado. No momento em que rejeitamos o servidor Tomcat, vemos um aumento nos pedidos em um dos outros servidores Tomcat, que também entrariam no estado interrompido e precisariam ser reiniciados.

Eventualmente, todos os servidores Tomcat ficam pendurados de maneira semelhante.

Por que o Apache transfere toda a carga para um servidor em vez de distribuir a carga?

Estamos tentando o worker.balancer.method=B para ver se isso ajuda a resolver nosso problema.

Nas imagens abaixo, vemos que os tópicos de serviço aparecem,

  • no servidor 1 quando o servidor 4 desce a cerca de 11.50
  • no servidor 2 quando o servidor 1 desce a cerca de 11.55

    
por srayker 31.08.2012 / 09:42

1 resposta

1

(Postar uma resposta em vez de um comentário, pois pode ser muito longo):

Não estou dizendo "A F5 pode lidar com o problema de uma maneira melhor ", mas:

  • Eu preferiria fazer a tarefa de balanceamento de carga por balanceadores de carga: F5 big ip, entre outros produtos, onde foi projetado para fazer esse trabalho.
  • Como você tem uma configuração pequena (4 tomcat), não vejo razão para ter 2 níveis de balanceamento de carga. Ter apenas a F5 verificando se uma página jsp personalizada retorna 200 é muito mais simples.
  • A pior desvantagem de que me lembro é: quando um nó está inativo, algum tráfego ainda é direcionado a ele até a próxima verificação de integridade (~ 5 seg por padrão iirc). A sessão é perdida se um nó estiver inativo (talvez o tomcat ofereça a capacidade de ter uma solução alternativa, por exemplo, sessão no banco de dados ...).

Não acho fácil encontrar benchmarking / teste "neutro" sobre o melhor equipamento / software para balanceamento de carga. Eu só posso aconselhá-lo a fazer o seu próprio se você tiver reposição f5 para stagging.

Como regra geral, eu faria o f5 fazer o máximo possível: Balanceamento de carga, certificados ssl, reescrita de url, asm, ... Não porque o f5 seja melhor, mas porque é conveniente ter tudo no mesmo Lugar, colocar. Infelizmente, quando o tráfego http começa a crescer em algumas centenas de MB, você precisa começar a fazer algum trabalho pelo apache em vez de f5.

    
por 21.09.2012 / 11:53