Назад | Перейти на главную страницу

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

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

Сервер1 имеет 2 IP-адреса x.x.x.17 и x.x.x.18

HAProxy слушает только x.x.x.18, а Glassfish слушает только x.x.x.17, работающий со следующей конфигурацией ...

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 x.x.x.19 работает Glassfish

Хотя я могу вручную получить страницу из x.x.x.17: 8080 и получить ответ 200 OK, HAProxy сообщает, что Server1 находится в состоянии DOWN и не направляет на него никаких запросов. Я не могу найти причины, почему.

Вот выдержка из журнала доступа 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)

Дополнение: я просто попытался добавить server3 x.x.x.13 под управлением Glassfish, но в Windows, и это также говорит о том, когда он включен и доступен с прокси-машины.

Addn2: После установки v1.4 haproxy для получения кодов ошибок возникает ошибка: неверная информация ответа Layer7: «HTTP / 1.1». Когда мы извлекаем страницу вручную, серверы UP и DOWN возвращают HTTP / 1.1 200 OK в качестве первой строки.

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

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

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

Я выложил на хапрокси список рассылки и получил удивительно быстрый ответ.

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

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

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

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

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

т.е.

option httpchk HEAD /test.php HTTP/1.1