Java Hazelcast Tomcat Web集群

时间:2016-10-24 14:26:45

标签: java tomcat hazelcast session-replication

我正在尝试使用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失败)并且不会被复制,从而导致后续请求失败。

我已经阅读了文档,但此时无法找到解决方案。我确信我错过了一些设置,因为这将是故障转移方案的基本设置。

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

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

0 个答案:

没有答案