HAProxy 检查说服务器在启动时已关闭

Jam*_*yan 2 linux glassfish haproxy

我正在尝试使用 UCARP 和 HAProxy 在负载平衡配置中设置 2 个 Glassfish 服务器

Server1有 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
Run Code Online (Sandbox Code Playgroud)

具有 1 个 IP xxx19 的Server2正在运行 Glassfish

即使我可以从 xxx17:8080 手动 wget 页面并收到 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
Run Code Online (Sandbox Code Playgroud)

这是 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
Run Code Online (Sandbox Code Playgroud)

如果我删除 httpchk 选项,则 Server1 会检查为 UP,但这不是永久解决方案,因为如果响应确实失败,我们需要它正确地进行故障转移。

有任何想法吗?

(HAProxy 是 v1.3.22)

Addn:我只是尝试添加运行 Glassfish 的 server3 xxx13 但在 Windows 上,当它启动并可从代理机器访问时,它也会说关闭。

Addn2:安装haproxy v1.4后得到错误码,报错为Layer7 invalid response info: "HTTP/1.1 "。当我们手动检索页面时,UP 和 DOWN 服务器都返回 HTTP/1.1 200 OK 作为第一行。

所以在运行wireshark之​​后看看发生了什么。在运行的 glassfish 服务器(以及我检查过的所有其他网络服务器)上,响应 HTTP/1.1 200 OK 都出现在第一个数据包中。在不工作的 glassfish 服务器上,响应来自 3 个 HTTP/1.1 数据包,然后是 200,然后是 OK。

那么知道为什么 HAProxy 不处理多个数据包或如何配置 glassfish 不拆分它吗?(maxKeepAliveRequests=1 已经)

Jam*_*yan 5

答案是最新版本的 Glassfish 将响应拆分为多个数据包。

我在 haproxy邮件列表上发帖,得到了非常快的回复。

Krzysztof Oledzki 证实 haproxy 假设响应将全部包含在第一个数据包中,因为这是大多数已知 Web 服务器的行为。他构建了一个带有快速和肮脏修复的补丁,如果您搜索 Glassfish,可以在邮件列表档案中找到该补丁,并且可以应用于测试版或最新的稳定版 1.3.22

我还试图找出为什么 Glassfish 开始以这种方式行事,但没有付费支持我一无所获。如果有人能回答这个问题,赏金仍然是开放的。