Obtendo 502 em vez de 503 quando todos os servidores de backend estão em execução executando o HAProxy por trás do Apache

2

Estou testando a execução do HAProxy como um balanceador de carga dedicado por trás do Apache 2.2, substituindo nossa configuração atual onde usamos o balanceador de carga do Apache. Em nossa configuração atual, somente Apache, se todos os servidores backend (origem) estiverem inativos, o Apache exibirá uma mensagem 503 serviço indisponível. Com o HAProxy, recebo uma resposta de gateway 502 ruim.

Estou usando uma regra simples de reconfiguração de proxy reverso no Apache

RewriteRule ^/(.*) http://127.0.0.1:8000/$1 [last,proxy]

No HAProxy eu tenho o seguinte (executando no modo tcp padrão)

defaults
    log             global
    option          tcp-smart-accept
    timeout connect 7s
    timeout client  60s
    timeout queue   120s
    timeout server  60s

listen my_server 127.0.0.1:8000
    balance leastconn
    server backend1 127.0.0.1:8001 check observe layer4 maxconn 2
    server backend1 127.0.0.1:8001 check observe layer4 maxconn 2

Testando a conexão direta ao balanceador de carga quando os servidores de back-end estão inativos:

[root@dev ~]# wget http://127.0.0.1:8000/ test.html
--2012-05-28 11:45:28--  http://127.0.0.1:8000/
Connecting to 127.0.0.1:8000... connected.
HTTP request sent, awaiting response... No data received.

Então, presumivelmente, isso se deve ao fato de que o HAProxy aceita a conexão e depois a fecha.

    
por scarba05 28.05.2012 / 13:00

2 respostas

1

Eu não consegui fazer isso funcionar no modo tcp, mas se você mudar para o modo http, você obtém o 503

defaults
    mode http
    
por 30.05.2012 / 15:25
5

No modo TCP, o haproxy não emite nenhum código de status, então o único ponto restante é claramente o apache. Eu acho que é simplesmente porque o haproxy aceita então fecha a conexão que faz o apache retornar um 502, o que é esperado.

Portanto, o comportamento que você está observando está correto. De qualquer forma, geralmente é melhor trabalhar no modo HTTP. Sugiro também que você ative a "opção httplog", que fornecerá logs muito detalhados, e "option http-server-close" para aproveitar a capacidade do apache de manter o keep-alive com haproxy, reduzirá significativamente o consumo de portas de origem local na máquina.

    
por 07.06.2012 / 00:40