我相信我在负载平衡方面或在 tomcat 中缺少一些配置,如果有人可以提供帮助并提供解决方案,那就太好了。
我想做什么?
- 参考本指南为 tomcat6 设置两个具有 P2P Hazelcast 会话复制的 tomcat 实例
- 我已将 hazelcast-all-.jar、hazelcast-tomcat-sessionmanager-.jar 和 hazelcast.xml 放在文件夹 $CATALINA_HOME/lib/ 中
- 更新了监听器和上下文配置,如下所示
- 更新了 Tomcat 故障转移和 jvmRoute 参数,如下所示
- 到目前为止,我能够调出连接到彼此 hazelcast 实例的 tomcat 实例,我在 tomcat 日志中看到了这一点。
- 用户连接到负载平衡器并被路由到平衡器成员 - 这里没有问题。
- 但是,当我将其中一个 tomcat 实例关闭以测试故障转移并确保连接到 tom 实例的用户能够继续使用同一会话处理实例时,而无需再次登录。但我相信负载均衡器似乎正在创建一个新会话并强制用户再次登录以建立与 cat 实例的会话。我怀疑这一点,但不确定。
- 或者会话没有在两个 hazelcast 实例中被复制和同步?- 这正在发生
- 我们有可以监控 hazelcast 会话的客户端吗?- 现在我愿意
我确实提到了这个问题,它指的是设置 hazelcast.sessionId 而不是 JSESSIONID 但没有提供有关如何设置的任何细节。
版本 -
Apache Haus - 2.2.32 (for load balancing)
Hazelcast - 3.8.6
Java 8
Tomcat - 6.0.48
Session objects that need to be clustered are Serializable.
stickysession=JSESSIONID
负载均衡器配置
<Proxy balancer://mycluster>
BalancerMember http://IPAddress1:8080/app/ route=tom
BalancerMember http://IPAddress2:8080/app/ route=cat
ProxySet lbmethod=byrequests stickysession=JSESSIONID|jsessionid
</Proxy>
ProxyPass /app/ balancer://mycluster/
ProxyPassReverse /app/ balancer://mycluster/
汤姆实例 - server.xml
<Listener className="com.hazelcast.session.P2PLifecycleListener"/>
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tom">
汤姆实例 - context.xml
<Manager className="com.hazelcast.session.HazelcastSessionManager" sticky=true/>
猫实例 - server.xml
<Listener className="com.hazelcast.session.P2PLifecycleListener"/>
<Engine name="Catalina" defaultHost="localhost" jvmRoute="cat">
猫实例 - context.xml
<Manager className="com.hazelcast.session.HazelcastSessionManager" sticky=true/>
更新:
我相信以下是相同的问题我有会话同步失败