我相信我在负载平衡方面或 tomcat 中缺少一些配置,如果有人可以提供帮助并提供解决方案,那就太好了。
我想做什么?
- 引用此 guide 为 tomcat6 设置两个具有 P2P Hazelcast session 复制功能的 tomcat 实例
- 我已将 hazelcast-all-.jar、hazelcast-tomcat-sessionmanager-.jar 和 hazelcast.xml 放置在文件夹 $CATALINA_HOME/lib/中
- 更新了监听器和上下文配置,如下所示
- 更新了 Tomcat 故障转移和 jvmRoute 参数,如下所示
- 到目前为止,我能够启动连接到其他 hazelcast 实例的 tomcat 实例,我在 tomcat 日志中看到了这一点。
- 用户连接到负载均衡器并路由到均衡器成员 - 这里没有问题。
- 但是当我关闭其中一个 tomcat 实例来测试故障转移并确保连接到 tom 实例的用户能够继续使用同一 session 连接到 cat 实例而无需再次登录时。但我相信负载均衡器似乎正在创建一个新 session 并强制用户再次登录以与 cat 实例建立 session 。我对此表示怀疑,但不确定。
- 或者 session 是否未在两个 hazelcast 实例中复制和同步? - 这正在发生
- 我们有可以监控 hazelcast session 的客户端吗? - 现在我知道了
我确实引用了这个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
最佳答案
虽然我没有太多使用 Apache HTTP 服务器作为负载均衡器的经验,但看看 this page ,我认为您需要按如下方式更新负载均衡器配置:
<Proxy balancer://mycluster>
BalancerMember http://IPAddress1:8080/app/ route=tom
BalancerMember http://IPAddress2:8080/app/ route=cat
ProxySet lbmethod=byrequests stickysession=hazelcast.sessionId
</Proxy>
ProxyPass /app/ balancer://mycluster/
ProxyPassReverse /app/ balancer://mycluster/
Do we have a client where I could monitor hazelcast sessions?
您可以使用Hazelcast Management Center监视集群并浏览存储在 Hazelcast IMap 中的 session 条目。所有 session 都存储在 Hazelcast IMap 中,并通过其 ID 进行键入。请注意,您需要在集群成员上启用管理中心,然后才能查看管理中心上的任何数据。
您还可以查看Docker code samples for container based session replication查看 session 复制的工作配置。虽然没有使用 Apache 作为负载均衡器,但有 one that uses Nginx这可能对你有帮助。
关于java - Tomcat6 Web 集群的 P2P Hazelcast session 复制 - session 同步失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46964194/