A verificação HAProxy diz que o servidor está inativo quando está ativo

2

Estou tentando configurar 2 servidores Glassfish em uma configuração de balanceamento de carga usando UCARP e HAProxy

Server1 tem 2 IPs x.x.x.17 e x.x.x.18

O HAProxy está ouvindo apenas o x.x.x.18 e o Glassfish ouvindo apenas o x.x.x.17 rodando com a seguinte configuração ...

global

maxconn 4096
debug
user haproxy
group haproxy

defaults

mode http
retries 3
option redispatch

listen wms x.x.x.18:8080
source x.x.x.18
option httpchk
balance leastconn
server Server1 x.x.x.17:8080 check inter 2000 fastinter 500 fall 2 weight 50
server Server2 x.x.x.19:8080 check inter 2000 fastinter 500 fall 2 weight 50

Server2 com 1 IP x.x.x.19 está executando o Glassfish

Mesmo que eu possa wget manualmente a página de x.x.x.17: 8080 e receber uma resposta 200 OK, HAProxy diz Server1 é DOWN e não direciona quaisquer solicitações para ele. Não consigo encontrar nenhum motivo para isso.

Aqui está um trecho do log de acesso Server1 com as verificações ...

"x.x.x.18" "NULL-AUTH-USER" "14/Jan/2010:14:44:23 +0000" "OPTIONS / HTTP/1.0" 200 0
"x.x.x.18" "NULL-AUTH-USER" "14/Jan/2010:14:44:23 +0000" "OPTIONS / HTTP/1.0" 200 0
"x.x.x.18" "NULL-AUTH-USER" "14/Jan/2010:14:44:23 +0000" "OPTIONS / HTTP/1.0" 200 0
"x.x.x.18" "NULL-AUTH-USER" "14/Jan/2010:14:44:29 +0000" "OPTIONS / HTTP/1.0" 200 0
"x.x.x.18" "NULL-AUTH-USER" "14/Jan/2010:14:44:29 +0000" "OPTIONS / HTTP/1.0" 200 0

Aqui está um trecho do log de acesso do Servidor2 com as verificações ...

"x.x.x.18" "NULL-AUTH-USER" "14/Jan/2010:14:58:25 +0000" "OPTIONS / HTTP/1.0" 200 0
"x.x.x.18" "NULL-AUTH-USER" "14/Jan/2010:14:58:25 +0000" "OPTIONS / HTTP/1.0" 200 0
"x.x.x.18" "NULL-AUTH-USER" "14/Jan/2010:14:58:31 +0000" "OPTIONS / HTTP/1.0" 200 0
"x.x.x.18" "NULL-AUTH-USER" "14/Jan/2010:14:58:31 +0000" "OPTIONS / HTTP/1.0" 200 0

Se eu remover a opção httpchk, o Server1 verificará como UP, no entanto, esta não é uma solução permanente, porque precisamos que ela seja bem-sucedida se a resposta realmente falhar.

Alguma idéia?

(HAProxy é v1.3.22)

Addn: Acabei de tentar adicionar o server3 x.x.x.13 rodando o Glassfish mas no Windows e isso também diz para baixo quando está ativo e acessível da máquina proxy.

Addn2: Depois de instalar o v1.4 do haproxy para obter códigos de erro, o erro é informação de resposta inválida do Layer7: "HTTP / 1.1". Quando recuperamos a página manualmente, ambos os servidores UP e DOWN retornam HTTP / 1.1 200 OK como a primeira linha.

Então, depois de executar o wireshark para ver o que está acontecendo. No servidor glassfish que funciona (e todos os outros servidores da Web que eu verifiquei) a resposta HTTP / 1.1 200 OK vem no primeiro pacote. Nos servidores glassfish que não funcionam, a resposta vem em 3 pacotes de HTTP / 1.1, depois em 200 e depois em OK.

Então, alguma idéia de por que o HAProxy não está lidando com vários pacotes ou como configurar o glassfish para não dividi-lo? (maxKeepAliveRequests = 1 já)

    
por JamesRyan 14.01.2010 / 17:58

3 respostas

5

A resposta é que o Glassfish nas últimas versões divide a resposta em vários pacotes.

Eu postei na lista de discussão haproxy e tive uma resposta notavelmente rápida.

Krzysztof Oledzki confirmou que o haproxy pressupõe que a resposta estará contida no primeiro pacote, já que esse é o comportamento da maioria dos servidores da Web conhecidos. Ele construiu um patch com uma correção rápida e suja que está disponível nos arquivos da lista de discussão se você pesquisar por Glassfish e puder ser aplicado à versão beta ou à última versão estável 1.3.22

Eu também tentei descobrir por que Glassfish começou a se comportar dessa maneira, mas sem suporte pago eu não consegui chegar a lugar nenhum. Se alguém puder responder, a recompensa ainda estará aberta.

    
por 22.01.2010 / 11:48
1

execute o tcpdump e capture as verificações e suas respostas para cada servidor. compare os resultados do server1 com os resultados do server2.

se ele funciona no servidor1, mas não no servidor2 ou no servidor3, o servidor1 deve estar retornando algo diferente. Se eles não estão retornando algo diferente, então algo está errado com haproxy ou sua configuração haproxy.

    
por 17.01.2010 / 23:29
-1

Tente passar argumentos adicionais para httpchk ...

ie.

option httpchk HEAD /test.php HTTP/1.1
    
por 14.01.2010 / 23:01