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

时间:2017-10-26 21:34:07

标签: java tomcat6 hazelcast session-replication

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

我想做什么?

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

    <Listener className="com.hazelcast.session.P2PLifecycleListener"/>
    <Engine name="Catalina" defaultHost="localhost"  jvmRoute="tom">
    

    tom instance - context.xml

    <Manager className="com.hazelcast.session.HazelcastSessionManager" sticky=true/>
    

    cat instance - server.xml

    <Listener className="com.hazelcast.session.P2PLifecycleListener"/>
    <Engine name="Catalina" defaultHost="localhost"  jvmRoute="cat">
    

    cat instance - context.xml

    <Manager className="com.hazelcast.session.HazelcastSessionManager" sticky=true/>
    

    更新

    我认为以下问题与session sync failure

    相同

2 个答案:

答案 0 :(得分:1)

虽然我没有太多使用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/
  

我们是否有客户可以监控淡褐色会话?

您可以使用Hazelcast Management Center监控群集并浏览存储在Hazelcast IMap中的会话条目。所有会话都存储在由其ID标识的Hazelcast IMap中。请注意,您需要在群集成员上启用管理中心,然后才能在管理中心上查看任何数据。

您还可以查看Docker code samples for container based session replication以查看会话复制的有效配置。虽然没有使用Apache作为负载均衡器,但one that uses Nginx可能对您有所帮助。

答案 1 :(得分: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/