【发布时间】:2023-03-16 17:15:01
【问题描述】:
我相信我在负载平衡方面或在 tomcat 中缺少一些配置,如果有人可以提供帮助并提供解决方案,那就太好了。
我想做什么?
- 通过参考这个guide为tomcat6设置两个具有P2P Hazelcast会话复制的tomcat实例
- 我已将 hazelcast-all-.jar、hazelcast-tomcat-sessionmanager-.jar 和 hazelcast.xml 放在文件夹 $CATALINA_HOME/lib/ 中
- 更新了监听器和上下文配置,如下所示
- 更新了 Tomcat Failover 和 jvmRoute 参数,如下所示
- 到目前为止,我能够启动连接到彼此 hazelcast 实例的 tomcat 实例,我在 tomcat 日志中看到了这一点。
- 用户连接到负载平衡器并被路由到平衡器成员 - 这里没有问题。
- 但是,当我关闭其中一个 tomcat 实例以测试故障转移并确保连接到 tom 实例的用户能够继续使用同一会话对实例进行分类时,而无需再次登录。但我相信负载均衡器似乎正在创建一个新会话并强制用户再次登录以建立与 cat 实例的会话。我对此表示怀疑,但不确定。
- 或者会话没有在两个 hazelcast 实例中复制和同步? - 这正在发生
- 我们有可以监控 hazelcast 会话的客户端吗? - 现在我愿意
我确实参考了这个 issue,它指的是设置 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/
tom 实例 - server.xml
<Listener className="com.hazelcast.session.P2PLifecycleListener"/>
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tom">
tom 实例 - context.xml
<Manager className="com.hazelcast.session.HazelcastSessionManager" sticky=true/>
cat 实例 - server.xml
<Listener className="com.hazelcast.session.P2PLifecycleListener"/>
<Engine name="Catalina" defaultHost="localhost" jvmRoute="cat">
cat 实例 - context.xml
<Manager className="com.hazelcast.session.HazelcastSessionManager" sticky=true/>
更新:
我相信下面是我遇到的同样的问题session sync failure
【问题讨论】:
标签: java tomcat6 hazelcast session-replication