HAProxy causando atraso

2

Estou tentando configurar o HAProxy para fazer o balanceamento de carga de um servidor da Web personalizado que criei. Agora estou percebendo um atraso crescente com o HAProxy à medida que o tamanho da mensagem de retorno aumenta. Por exemplo, eu fiz quatro testes diferentes, aqui estão os resultados:

Resposta de 15kb a HAProxy:
Média tempo de resposta: .34 segs
Taxa de transmissão: 763 trans / sec
Taxa de transferência: 11,08 MB / s

Resposta 2kb por meio do HAProxy:
Média tempo de resposta: .08 segs
Taxa de transação: 1171 trans / sec
Taxa de transferência: 2,51 MB / s

Resposta de 15kb diretamente ao servidor:
Média tempo de resposta: 0,11 seg
Taxa de transação: 1046 trans / sec
taxa de transferência: 15,20 MB / s

Resposta 2kb diretamente ao servidor:
Média Tempo de resposta: .05 segs
Taxa de transação: 1158 trans / sec
Taxa de transferência: 2,48 MB / s

Todas as transações são solicitações HTTP. Como você pode ver, parece haver uma diferença muito maior entre os tempos de resposta para quando a resposta é maior do que quando ela é menor. Eu entendo que haverá um pequeno atraso ao usar o HAProxy. Não tenho certeza se é importante, mas o teste em si foi executado usando cerco. E durante o teste havia apenas um servidor atrás do HAProxy (o mesmo que foi usado nos testes diretos para o servidor). Aqui está o meu arquivo haproxy.config:

global  
       log 127.0.0.1   local0
       log 127.0.0.1   local1 notice
       maxconn 10000
       user haproxy
       group haproxy
       daemon
       #debug

defaults
       log     global
       mode    http
       option  httplog
       option  dontlognull
       retries 3
       option redispatch
       option httpclose
       maxconn 10000
       contimeout      10000
       clitimeout      50000
       srvtimeout      50000
       balance roundrobin
       stats enable
       stats uri /stats

listen  lb1  10.1.10.26:80
        maxconn 10000
        server  app1 10.1.10.200:8080 maxconn 5000

Não consegui encontrar muito em termos de opções neste arquivo que ajudaria no meu problema. Ouvi sugestões de que talvez precise ajustar algumas das minhas configurações de sysctl. Eu não pude encontrar muita informação sobre isso no entanto, a maioria da documentação é para o Linux 2.4 e 2.6 no material sysctl, eu estou executando 3.2 (Ubuntu server 12.04), que parece auto tuning, então eu não tenho idéia do que eu deveria ou não deveria estar mudando. A maioria das alterações de configurações que eu tentei não teve nenhum efeito ou efeito negativo no desempenho.

Apenas um aviso, este é um teste muito preliminar, e minha esperança é que, no momento da implantação, meu HAProxy consiga equilibrar 10k a 20k solicitações / seg. para muitos servidores, portanto, se alguém puder fornecer informações para me ajudar a alcançar esse objetivo, seria muito apreciado.

Muito obrigado por qualquer informação que você possa fornecer. E se você precisar de mais informações de mim, por favor me avise, eu vou te dar tudo o que puder.

[Editar] Como solicitado haproxy -vv

HA-Proxy version 1.4.18 2011/09/16
Copyright 2000-2011 Willy Tarreau <[email protected]>

Build options :
  TARGET  = linux26
  CPU     = generic
  CC      = gcc
  CFLAGS  = -O2 -g -fno-strict-aliasing
  OPTIONS = USE_LINUX_SPLICE=1 USE_LINUX_TPROXY=1 USE_PCRE=1

Default settings :
  maxconn = 2000, bufsize = 16384, maxrewrite = 8192, maxpollevents = 200

Encrypted password support via crypt(3): yes

Available polling systems :
   sepoll : pref=400,  test result OK
   epoll : pref=300,  test result OK
   poll : pref=200,  test result OK
   select : pref=150,  test result OK
Total: 4 (4 usable), will use sepoll.
    
por Eumcoz 26.09.2012 / 23:18

1 resposta

2

Estou pensando em vários pontos:

1) você está rodando em um ambiente virtualizado?

2) você tem nf_conntrack carregado na máquina?

3) você em algum momento saturou a CPU em qualquer uma das máquinas envolvidas?

4) por favor use "option http-server-close" em vez de "option httpclose", pois o último permite que ambos os lados se fechem sozinhos, resultando em conexões mais longas.

5) o que você vê nos logs do haproxy? A hora será dividida em vários campos que permitem analisar onde ela é gasta.

6) se você vê tempos muito menores nos logs do haproxy do que o que você tem em sua máquina de testes, isso significa que os pacotes SYN atrasados estão esperando no backlog do sistema (ou pior, retransmitidos), o que pode ser causado por falta de ajuste do sistema.

7) (menos importante), ao relatar um problema com uma versão antiga, você deve primeiro atualizá-lo para as últimas correções (1.4.22) para ver se o problema ainda está lá. Eu não acho que o que você observa corresponde a qualquer problema conhecido, mas ainda assim é a idéia geral.

    
por 02.10.2012 / 09:02