Tengine 2.0的ngx_http_upstream_check_module如果后台是weblogic 11g,会经常出现错误。错误提示如下: 配置文件如下: |
tengine-2.0的后端健康检测,默认采用长连接,所以要在请求中增加keep-alive头,如下: 如果仍然想采用短连接,请增加一项配置,设置每个连接只发一个请求,如下: |
刚刚测试了一下使用短连接没问题。使用长连接仍然出现同样错误,不知道是不是我的服务器前后端之间有防火墙。 |
为什么后端是jboss无论长连接还是短连接使用起来一点问题都没有?但是weblogic就只能使用短连接呢? |
我们正在排查原因,有结果会立即给你答复,谢谢反馈! |
huopen,你好,问题已经基本定位: |
谢谢了。 |
你好,huopen 最新的修改我们本地已经测试通过。但我们原版的问题现象和你提供的在细节方面有所不同,所以看你能不能帮我们在你的环境测试一下。修改我们已经提取出来一个patch,见https://github.com/cfsego/tengine-patches/blob/master/tengine-hc-keepalive.patch 谢谢 |
我在生产环境的Tengine集群里,升级了1台到2.0版本。 |
新版的tengine为了降低健康检查连接的建立,把健康检查的连接从短连接变成了长连接。不过出现问题的特征是,当健康检查请求的响应数据很多,前一次健康检查数据没有读完,导致后一次健康检查数据不对,出现问题。 现在这个问题在开发分支已经修复了,年后会发布新版本。 |
楼主消失了,关楼 |
嗯,2.0.1 就恢复了。 |
@cfsego 这个问题在 Tengine version: Tengine/2.1.0 (nginx/1.6.2) upstream log-service {
server localhost:8101;
server 10.173.83.215:8101;
check interval=1000 rise=2 fall=2 timeout=1000 type=http;
check_keepalive_requests 1;
check_http_send "GET /status.stat HTTP/1.1\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
部分错误日志如下: 2015/08/22 11:19:10 [error] 14387#0: check protocol http error with peer: 127.0.0.1:8101 我去curl这些链接都是没问题的 |
好吧, 问题出在 HTTP/1.1,改成HTTP/1.0 就没问题了。。 之所以有HTTP/1.1,是因为我其他机器写的就是HTTP/1.1 。。。 |
@jiacheo 如果你用 HTTP/1.1 的话, 你需要指定 Host, 类似下面的 check_http_send "GET / HTTP/1.0\r\nconnection: keep-alive\r\nHost: foo.bar.com\r\n\r\n"; Refer RFC rfc2616#section-14.23 HTTP1.0 只能是短连接, 并且不支持多 Host, 所以没有问题. |
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!