HAProxy não equilibrando a carga do servidor de forma justa

5

O HAProxy não parece manter as conexões com os servidores balanceadas.

Tenha isso em mente:

  • usando o HAProxy v1.3.26
  • 5 especificações de servidor igualmente equilibradas
  • O algoritmo
  • é round robin, mas nenhum peso é aplicado para cada servidor
  • conexões máximas globais definidas no haproxy como 80.000

Como visto na figura, os servidores C e D parecem estar obtendo muito mais conexões do que os outros. Devido a essa carga extra, eles continuam sendo desativados e reiniciados automaticamente.

Eu tentei ler os documentos oficiais do HAproxy e fiz alguns Googling mas não achei nada útil. Espero que alguém aqui possa ajudar.

Algumas perguntas:

  1. Por que é que quando a configuração diz para usar roundrobin, as especificações do servidor são as mesmas e nenhum peso é aplicado?

  2. O que determina a sub-coluna "max" na coluna "Sessions" (a que diz 1970, 1444, etc.). Servidores C, D, E estão na faixa 3K e os outros 2 são pouco abaixo de 2K. Por que a diferença?

  3. Como manter tudo equilibrado?

  4. Alguém pode explicar cada coluna? Estou surpreso que o doc oficial do HAproxy realmente não explique isso.

por Mark 07.08.2013 / 17:20

2 respostas

1

O que acontece se você retirar C e D? Como o comportamento muda?

Como é sua configuração?

Disclaimer: O abaixo é minhas observações do comportamento HAProxy, em vez do que realmente poderia ser.

O HAProxy sempre usa pesos pelo que eu entendo. Se você olhar seus pesos na tela, diz que todos eles têm peso 1. Rodando o roundrobin, temos 4 servidores de peso 50 e um de peso 1. Os quatro de peso 50 são quase perfeitos em relação ao número de sessões ( 2-3 off). O servidor com o peso 1 tem a quantidade certa de sessões proporcionalmente falando.

Tente definir explicitamente os pesos para o mesmo valor mais alto. Isso deve ajudá-lo a ser um pouco mais refinado em seu cálculo de peso, que deve alcançar maior precisão. Se o peso é um em todos eles, ele lida em termos de 20%, o que não é muito preciso. Agora, se você definir todos os 5 para 20, então ele pode lidar com 1%.

  1. Não tenho certeza. Preciso ver a configuração primeiro.
  2. Tenho certeza de que a coluna "max" é o número máximo de conexões que ela teve em um ponto determinado, em vez de um número real máximo permitido.
  3. Usamos round robin e funciona muito bem, então precisamos ver a configuração e tentar algumas coisas.
  4. A maioria das colunas é bem clara. O que me ajuda é olhar para a coluna estendida acima (por exemplo, Fila, Taxa de sessão, etc.)

Espero que isso lhe dê algumas coisas para ver.

    
por 07.08.2013 / 18:21
1

Você deve usar o método "leastconn" em vez de round robin. Ele usa um pouco mais de CPU, mas faz melhor o balanceamento de carga se suas sessões não forem super curtas.

Se você observar, seus servidores A, B e E têm ~ 250 sessões atuais abertas (Sessions Cur). Mas C + D tem muitas vezes isso. Mas como você especificou "round robin", esses servidores sobrecarregados obtêm uma distribuição uniforme de todo o tráfego novo.

"leastconn" permite que os servidores recuperem se ficarem sobrecarregados. O "roundrobin" continua mandando o tráfego de todos igualmente (empilhando mais conexões para um servidor lento) até que eles caiam.

Os significados de todas as variáveis da sessão estão documentados no final da documentação muito abrangente . (Procurar por "estatísticas e monitoramento")

    
por 24.09.2013 / 03:48