HAProxy检查表示服务器启动时处于closures状态

我正在尝试使用UCARP和HAProxy在负载平衡configuration中安装2个Glassfish服务器

Server1有2个IP xxx17和xxx18

HAProxy正在侦听仅xxx18和Glassfish侦听只有xxx17运行与以下configuration…

global maxconn 4096 debug user haproxy group haproxy defaults mode http retries 3 option redispatch listen wms xxx18:8080 source xxx18 option httpchk balance leastconn server Server1 xxx17:8080 check inter 2000 fastinter 500 fall 2 weight 50 server Server2 xxx19:8080 check inter 2000 fastinter 500 fall 2 weight 50 

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

即使我可以从xxx17:8080手动wget页面并收到200 OK响应,HAProxy表示Server1处于closures状态,并且不会向其发送任何请求。 我找不到任何理由。

这是一个摘录从Server1访问日志与检查…

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

这是一个摘录从Server2访问日志与检查…

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

如果我删除了httpchk选项,那么Server1将检查为UP,但是这不是一个永久的解决scheme,因为如果响应真的失败,我们需要它来正确地进行故障切换。

有任何想法吗?

(HAProxy是v1.3.22)

Addn:我刚刚尝试添加运行Glassfish的server3 xxx13,但是在Windows上,并且在代理服务器启动并可以访问的时候也会提示。

Addn2:在安装haproxy v1.4后得到错误码,错误是Layer7无效响应信息:“HTTP / 1.1”。 当我们手动检索页面时,UP和DOWN服务器都返回HTTP / 1.1 200 OK作为第一行。

所以在运行wireshark看看是怎么回事。 在工作的glassfish服务器(以及我检查过的所有其他web服务器)上,响应HTTP / 1.1 200 OK全部出现在第一个数据包中。 在没有工作的glassfish服务器上,响应来自HTTP / 1.1的3个数据包,然后是200,然后是OK。

因此,任何想法为什么HAProxy不处理多个数据包或如何configurationglassfish不分裂它? (maxKeepAliveRequests = 1已经)

答案是最新版本的Glassfish将响应分成多个包。

我发布在haproxy 邮件列表上 ,反应非常快。

Krzysztof Oledzki证实,haproxy认为响应将被包含在第一个数据包中,因为这是大多数已知的Web服务器的行为。 他build立了一个修补程序,可以在邮件列表归档中find,如果您searchGlassfish,可以应用到testing版或最新的稳定版本1.3.22

我也试图找出为什么Glassfish开始这样做,但没有付费的支持,我没有任何地方。 如果任何人都可以回答的话,赏金仍然是开放的。

运行tcpdump并将检查及其响应捕获到每个服务器。 将server1的结果与server2的结果进行比较。

如果它在server1上工作,但不在server2或server3上,那么server1必须返回不同的东西。 如果他们没有返回不同的东西,那么haproxy或者haproxy的configuration就有问题。

尝试传入额外的参数到httpchk …

即。

 option httpchk HEAD /test.php HTTP/1.1