Tengine 2.0.3 + Tomcat 7.0.55 开启健康检查的注意事项

一个马上要上线的无线项目需要使用软负载,和开发同学讨论下来确定用Tengine+Lua Module来做,前端Tengine 2.0.3,后端服务Tomcat 7.0.55。Tengine相关配置如下:

163007_Nrzw_587047.png

在开发机上搭环境时发现开启健康检查功能总是报错:

164029_yAfW_587047.png

刚开始怀疑是不是当Tengine和后端服务部署在同一个机器上时,健康检查不能正常工作,就在Tengine的github上建了一个issue询问。详见:https://github.com/alibaba/tengine/issues/518#issuecomment-57655581。不到2个小时就有一名开发同学给了回复,在节假日也响应的这么快,真心赞 : )虽然响应速度非常给力,明确在同一台机器上是可以进行健康检查的,但是并没有给出在上述环境健康检查失败的原因。还得继续找问题。

因为以前曾经使用Tengine 1.5搭建过类似的环境,并没有出现这个问题,所以去Tengine官网上查看changelog,发现Tengine 2.0的确在健康检查的处理上进行了修改,在健康检查中使用了KeepAlive来降低系统的开销。问题会不会出在这儿?

为了能准确地排查这个问题,打算先绕开Tengine,直接使用curl向提供后端服务的Tomcat按四种形式发送HEAD请求:HTTP/1.0 不带KeepAlive标签、HTTP/1.0带KeepAlive标签、HTTP/1.1不带KeepAlive标签和HTTP/1.1带KeepAlive标签。执行的结果如下:

1. HTTP/1.0 不带KeepAlive标签:

170839_2OKD_587047.png

从上图可以看出,命令执行后,连接就会被立即切断。

2. HTTP/1.0带KeepAlive标签:

170838_I1cB_587047.png

从上图可以看出,服务器正常识别了KeepAlive标签,并没有切断连接。

3. HTTP/1.1不带KeepAlive标签:

170839_JGSl_587047.png

4. HTTP1.1带KeepAlive标签:

170839_jj1x_587047.png

由于HTTP/1.1协议默认是认为客户端支持KeepAlive的,所以无论带不带KeepAlive标签,服务器都会按照KeepAlive来处理。如果想在HTPP/1.1协议下关闭KeepAlive,需要在Header上加上“Connection: close”。

5. HTTP1.1带close标签:

175404_nFHJ_587047.png

可以从上图中看出,服务在发送完response后立即关闭了连接,而这时,客户端还处于正在读数据的状态。

会不会是Tengine 2.0.3在处理KeepAlive的方式上和Tomcat7.0.55不兼容呢?于是将check_http_send的参数改为:

check_http_send "HEAD / HTTP/1.0\r\nConnection: keep-alive\r\n\r\n";

一次通过!

下次有空了,需要查看一下Tengine的代码,看看究竟是什么原因导致HTTP/1.1下无法正常工作的。













转载于:https://my.oschina.net/u/587047/blog/324222

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值