繁体   English   中英

用于Tomcat6 Web群集的P2P Hazelcast会话复制-会话同步失败

[英]P2P Hazelcast Session Replication for Tomcat6 Web Clustering - Session Synchronization Fails

我相信我在负载平衡方面或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实例而无需再次登录时。 但是我相信负载均衡器似乎正在创建一个新会话,并迫使用户再次登录以使用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/>

更新:

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

尽管我没有使用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 Management Center监视群集并浏览存储在Hazelcast IMap中的会话条目。 所有会话均存储在以其ID为键的Hazelcast IMap中。 请注意,您需要在集群成员上启用管理中心,然后才能在管理中心上查看任何数据。

您还可以查看基于容器的会话复制Docker代码示例,以查看会话复制的有效配置。 尽管没有人将Apache用作负载平衡器,但有一个人使用Nginx可能会对您有所帮助。

我得到它与以下配置一起使用。 认为它需要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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM