0

我正在尝试使用 Hazelcast Tomcat Web 会话复制在两个 Tomcat 实例之间实现基于粘性会话的负载平衡。出于测试目的,我已将应用程序部署在两个不同的 Tomcat 实例上,并通过 Apache HTTPD 处理负载平衡。jvmroute 参数和 mod-proxy 设置很好,负载平衡没有问题。

问题在于跨两个实例的会话复制。当第一台服务器(当前为请求提供服务)出现故障时,请求将发送到第二台服务器。Hazelcast 集群识别出会话正在通过故障转移,并正在使用新会话 id(后缀为第二个服务器的 jvmroute 参数)复制会话 - 如 Hazelcast 文档中所述https://github.com/hazelcast/ hazelcast-tomcat-sessionmanager#sticky-sessions-and-tomcat)。但是,对于故障转移请求,会话属性在较旧的会话中得到更新(通过 jvmroute 发生故障)并且没有被复制,从而导致后续请求失败。

我已经浏览了文档,但目前无法找到解决方案。我确定我缺少一些设置,因为这将是故障转移方案的基本设置。

有人可以帮我吗?如果您需要任何其他详细信息,请告诉我。

[更新] 跟踪流程后,能够确定 com.hazelcast.session.HazelcastSessionChangeValve 中的 handleTomcatSessionChange 被正确调用。如果我显示请求的会话 ID 的值,则会发生 request.changeSessionId(newSessionId) 调用并发布此值,该值会更新。但是,会话 ID 本身不会更新,这会导致 request.getSession().getId() 调用中的 ID 较旧。

4

0 回答 0