我们有一个负载平衡器(haproxy)的tomcat集群。 作为我们的升级脚本的一部分,我们希望在3的群集中挨饿一个tomcat,等待所有的请求都被处理为这个特定的tomcat。 只有这样我们才能closures它并升级运行在该tomcat上的Web应用程序。
我们的问题是:
我们的脚本如何显示tomcat是否已经完全饿死(所有的请求都已经被处理了)?
有没有一个tomcat本身暴露的API? 或者也许我们可以查询haproxy的信息?
谢谢!
编辑:这是我的haproxyconfiguration文件:
global debug stats socket /etc/haproxy/haproxysock level admin defaults mode http timeout connect 5s timeout queue 300s timeout client 300s timeout server 300s frontend http-in bind *:8080 default_backend NG backend NG cookie JSESSIONID prefix server 10.0.110.44 10.0.110.44:8080 cookie JSESSIONID_SERVER_1 check maxconn 500 server 10.0.110.45 10.0.110.45:8080 cookie JSESSIONID_SERVER_2 check maxconn 500 #server 10.0.110.41 10.0.110.41:8080 cookie JSESSIONID_SERVER_3 check maxconn 500 option httpclose option forwardfor balance roundrobin option redispatch retries 15 listen admin bind *:8081 stats enable stats refresh 1s
从负载平衡器的angular度来看,完全的饥饿是很难断言的。 实际上,还没有一个客户端还有一个JSESSIONID cookie,它是前缀给你的NOLB服务器的。
我可以看到至less有两种方式可以继续
如果Tomcat确实有办法枚举有效的会话,这将允许更安全的方式(通过servelet或类似的)。
请注意,如果您限制自己只停止完全饿死的应用程序,顽强的客户端可以防止您重新启动。