0

我相信我在负载平衡方面或在 tomcat 中缺少一些配置,如果有人可以提供帮助并提供解决方案,那就太好了。

我想做什么?

  1. 参考本指南为 tomcat6 设置两个具有 P2P Hazelcast 会话复制的 tomcat 实例
  2. 我已将 hazelcast-all-.jar、hazelcast-tomcat-sessionmanager-.jar 和 hazelcast.xml 放在文件夹 $CATALINA_HOME/lib/ 中
  3. 更新了监听器和上下文配置,如下所示
  4. 更新了 Tomcat 故障转移和 jvmRoute 参数,如下所示
  5. 到目前为止,我能够调出连接到彼此 hazelcast 实例的 tomcat 实例,我在 tomcat 日志中看到了这一点。
  6. 用户连接到负载平衡器并被路由到平衡器成员 - 这里没有问题。
  7. 但是,当我将其中一个 tomcat 实例关闭以测试故障转移并确保连接到 tom 实例的用户能够继续使用同一会话处理实例时,而无需再次登录。但我相信负载均衡器似乎正在创建一个新会话并强制用户再次登录以建立与 cat 实例的会话。我怀疑这一点,但不确定。
  8. 或者会话没有在两个 hazelcast 实例中被复制和同步?- 这正在发生
  9. 我们有可以监控 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/>

更新:

我相信以下是相同的问题我有会话同步失败

4

2 回答 2

1

虽然我没有太多使用 Apache HTTP 服务器作为负载均衡器的经验,但查看此页面,我认为您需要更新负载均衡器配置,如下所示:

<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/

我们有可以监控 hazelcast 会话的客户端吗?

您可以使用Hazelcast 管理中心来监控集群并浏览存储在 Hazelcast IMap 中的会话条目。所有会话都存储在一个 Hazelcast IMap 中,并以它们的 ID 为键。请注意,您需要在集群成员上启用管理中心,然后才能查看管理中心上的任何数据。

您还可以查看基于容器的会话复制的 Docker 代码示例,以查看会话复制的工作配置。虽然没有使用 Apache 作为负载均衡器,但有一个使用 Nginx的,可能对您有所帮助。

于 2017-10-27T09:44:26.703 回答
0

我让它与以下配置一起工作。认为它需要 jsessionid 和 hazelcast.sessionid,会话复制现在工作得很好。

<Proxy balancer://mycluster>
    BalancerMember http://IPAddress1:8080/app/  route=tom
    BalancerMember http://IPAddress2:8080/app/  route=cat
    ProxySet lbmethod=byrequests stickysession=JSESSIONID|jsessionid|hazelcast.sessionId
</Proxy>

ProxyPass /app/ balancer://mycluster/ 
ProxyPassReverse /app/ balancer://mycluster/
于 2018-01-18T02:10:59.880 回答