负载平衡应用程序部分关闭

负载平衡应用程序部分关闭

我有一对 tomcat 服务器,位于运行 modjk2 的 apache 服务器后面。apache 服务器将会话负载平衡到 tomcat 服务器(使用x.sticky_session=True)。这一切都运行正常,但是我们希望能够在不终止任何会话的情况下在 tomcat 服务器上安装新代码。

我们无法使用 tomcat 的会话序列化,因为并非所有存储的对象都是可序列化的,并且停机时间可能太长。

目前,我们关闭 TomcatA(有效地终止其所有当前会话),在其上安装新代码,启动它,然后当 apache 开始将请求路由回它时,在 TomcatB 上执行相同操作。

我们想要做的是,禁用 TomcatA 上的新会话(并且可能缩短现有会话的寿命),然后当所有会话都过期时,将其关闭以进行安装...然后对 TomcatB 执行相同操作。

有没有人解决过类似的问题,或者对这种设置有什么建议?目前我不确定 apache 或 tomcat 是否应该负责禁止新会话...

问候,保罗。

答案1

你追求的是所谓的“跛脚鸭”行为。

您可以通过检查后端上的特定 URL 来让负载均衡器查询活动性。您可以用一种方法来告诉后端在仍提供服务的同时开始使该 URL 失败。

理想情况下,此 URL 与您的监视系统用来监控是否应自动重启进程的 URL 不同。这可能就像?query在常规健康检查 URL 中添加一个一样简单。

经过短暂的时间后,负载均衡器将从服务池中删除受害后端,并且现有连接也将完成;您如何处理前端缓冲和慢速客户端将影响此过程所需的时间,但这是一种让静态资源由单独服务器处理的动机。:)

然后您可以更新后端。

答案2

看起来,activation在工作人员上设置参数应该可以解决问题..将其设置为disabled应该继续为现有会话提供服务,但不会将新的会话请求路由到已禁用的工作人员。

我们将把它与我们的 j2ee 应用程序中的广播结合起来,告诉用户保存他们的工作、注销并重新登录。

一旦活动会话数达到可接受的低水平,我们将关闭 tomcat 实例进行更新,然后启动它并对另一个 tomcat 服务器重复此操作。

这只是一个计划,但对我来说听起来是可行的,不过在我结束这个问题之前,我希望得到您的明智意见。

谢谢,保罗。

相关内容