Tuning Linux + HAProxy

2

Atualmente estou lançando o HAProxy no Centos 6, que envia solicitações para alguns servidores Apache HTTPD e estou tendo problemas com o desempenho. Passei o último par de dias pesquisando e ainda não consigo passar de 10k / seg conexões consistentemente quando benchmarking (às vezes eu recebo 30k / seg embora).

Eu fixei os IRQs das filas TX / RX para os NICS internos e externos para separar os núcleos de CPU e garanti que o HAProxy seja fixado em seu próprio núcleo.

Eu também fiz os seguintes ajustes no sysctl.conf:

   # Max open file descriptors
   fs.file-max = 331287

   # TCP Tuning
   net.ipv4.tcp_tw_reuse = 1
   net.ipv4.ip_local_port_range = 1024 65023
   net.ipv4.tcp_max_syn_backlog = 10240
   net.ipv4.tcp_max_tw_buckets = 400000
   net.ipv4.tcp_max_orphans = 60000
   net.ipv4.tcp_synack_retries = 3
   net.core.somaxconn = 40000
   net.ipv4.tcp_rmem = 4096 8192 16384
   net.ipv4.tcp_wmem = 4096 8192 16384
   net.ipv4.tcp_mem = 65536 98304 131072
   net.core.netdev_max_backlog = 40000
   net.ipv4.tcp_tw_reuse = 1

Se eu usar o AB para acessar diretamente o servidor da Web, recebo facilmente conexões de 30k / s. Se eu parar os servidores web e usar o AB para acertar o HAProxy, então eu recebo 30k / s de conexões, mas obviamente é inútil.

Eu também desabilitei o iptables por enquanto desde que eu li que nf_conntrack pode atrasar tudo, sem alteração. Eu também desativei o serviço irqbalance.

O fato de que eu posso acertar cada dispositivo individual com 30k / s me faz acreditar que o ajuste dos servidores está OK e que deve ser alguma configuração do HAProxy?

Aqui está a configuração que construímos a partir da leitura de artigos de ajuste, etc. link

O servidor é um dual Xeon CPU E5-2620 (6 núcleos) com 32 GB de RAM. Correndo Centos 6,2 x64. As interfaces privada e pública estão em NICS separados.

Alguém tem alguma ideia? Obrigado.

    
por react 21.06.2012 / 08:45

1 resposta

1

Já tentou usar uma ferramenta de teste mais confiável que a AB? Você pode achar que é a própria AB atingindo um teto ao invés de HAProxy. Considere o uso do Apache jMeter ou de um aplicativo de teste de carga de estado adequado.

Keepalives no Apache provavelmente estão mascarando / inclinando os resultados AB, dando a você a discrepância que você vê,

Você deve postar o conteúdo de netstat durante um teste de carga para que possamos estabelecer os estados de conexão em uso e ajustar adequadamente as configurações com base nisso.

No entanto, você deve ser capaz de aumentar um pouco o desempenho adicionando as seguintes opções à sua seção de padrões:

option tcp-smart-accept 
option tcp-smart-connect

Há uma discussão muito boa que reflete algumas de suas preocupações aqui, link

É um pouco complicado demais para diagnosticar remotamente. Mas se o Apache é capaz de atingir esses níveis de reqs / s, é improvável que seja um nível de kernel ou configuração de pilha TCP / IP. Então, seu foco seria melhor atendendo a sua configuração do HAProxy.

    
por 21.06.2012 / 09:46