Проверка HAProxy говорит, что сервер не работает, когда он работает

Я пытаюсь настроить 2 сервера Glassfish в конфигурации с балансировкой нагрузки, используя UCARP и HAProxy

Сервер1 имеет 2 IP-адреса xxx17 и xxx18

HAProxy прослушивает только xxx18, а Glassfish - только xxx17, работающий со следующей конфигурацией...

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

Сервер2 с 1 IP xxx19 работает под управлением Glassfish

Несмотря на то, что я могу вручную wget страницы с xxx17:8080 и получить ответ 200 OK, HAProxy говорит, что Server1 выключен и не направляет к нему никаких запросов. Я не могу найти причину почему.

Вот выдержка из журнала доступа Server1 с проверками...

"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

Вот выдержка из журнала доступа Server2 с проверками...

"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

Если я удаляю опцию httpchk, то Server1 проверяется как UP, однако это не является постоянным решением, потому что нам нужно, чтобы оно правильно переключалось при сбое ответа.

Есть идеи?

(HAProxy v1.3.22)

Addn: Я только что попытался добавить server3 xxx13 под управлением Glassfish, но в Windows, и это также говорит о том, что он работает и доступен через прокси-машину.

Addn2: После установки v1.4 haproxy для получения кодов ошибок возникает ошибка: неверный ответ уровня 7: "HTTP/1.1 ". Когда мы получаем страницу вручную, сервер ВВЕРХ и ВНИЗ возвращает HTTP/1.1 200 OK в качестве первой строки.

Так что после запуска wireshark, чтобы увидеть, что происходит. На работающем сервере glassfish (и на всех других веб-серверах, которые я проверял) ответ HTTP/1.1 200 OK приходит в первом пакете. На серверах Glassfish, которые не работают, ответ приходит в виде 3 пакетов HTTP / 1.1, затем 200, а затем ОК.

Итак, есть идеи, почему HAProxy не работает с несколькими пакетами или как настроить glassfish, чтобы он не разделялся? (maxKeepAliveRequests=1 уже)

3 ответа

Решение

Ответ заключается в том, что Glassfish в последних версиях разбивает ответ на несколько пакетов.

Я разместил в списке рассылки haproxy и получил очень быстрый ответ.

Кшиштоф Оледзки подтвердил, что haproxy предполагает, что ответ будет содержаться в первом пакете, так как это поведение большинства известных веб-серверов. Он создал патч с быстрым и грязным исправлением, которое доступно в архивах списков рассылки, если вы ищете Glassfish, и может быть применено к бета-версии или последней стабильной версии 1.3.22.

Я также пытался выяснить, почему Glassfish начал вести себя так, но без платной поддержки я ни к чему не привел. Если кто-то может ответить на это, щедрость все еще открыта.

Запустите tcpdump и запишите проверки и их ответы на каждый сервер. сравнить результаты с сервера1 с результатами с сервера2.

если он работает на сервере server1, но не на сервере server2 или server3, то server1 должен возвращать что-то другое. Если они не возвращают что-то другое, значит, что-то не так с haproxy или вашей конфигурацией haproxy.

Попробуйте передать дополнительные аргументы в httpchk...

то есть.

option httpchk HEAD /test.php HTTP/1.1
Другие вопросы по тегам