Hazelcast HTTP会话复制不会复制任何内容

时间:2014-08-20 11:43:17

标签: java tomcat cluster-computing hazelcast

我遇到了一些hazelcast http会话复​​制功能的问题。

我正在尝试在已经在集群中的一对tomcat 7.0.54(带有DeltaManager的SimpleTcpCluster)中部署一个带有hazelcast http会话复​​制的Web应用程序,在java 1.7.0_25下运行,其他非hazelcast集群应用程序。 / p>

我有一些问题:

  • 是否可以在同一个tomcat群集中使用hazelcast clsutered和non-hazelcast clsutered应用程序?
  • 使用hazelcast的应用程序应该是可分发的吗? (通过像其他人一样添加web.xml)
  • 部署应用程序的tomcat不应该在群集中?我可以在同一个tomcat中使用标准tomcat会话复制群集其他应用程序吗?

编辑:

我正在做的更详细的解释:

我正在尝试创建一个简单的Web应用程序,只有一个servlet,在第一个用户请求时生成一个新的http会话,而且,对于每个GET请求,将打印会话ID。 这是servlet代码:

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("Get Method. Check Session...");
    HttpSession session = req.getSession(false);
    if (session==null) {
        System.out.println("User with null session, generating one...");
        session = req.getSession(true);
        if (session==null)
            System.out.println("Session can not be generated.");
    }
    if (session!=null)
        System.out.println("Received GET request from session " + session.getId());
}

为了引入hazelcast WM以便在2个tomcats之间复制会话,我已添加到我的项目中:

  • hazelcast-3.2.5.jar进入WEB-INF文件夹

  • hazelcast-wm-3.2.5.jar进入WEB-INF文件夹

  • 标准hazelcast.xml进入WEB-INF文件夹(与hazelcast 3.2.5的ZIP存档中打包的相同hazelcast.xml,进入bin文件夹)

  • 将hazelcast过滤器添加到我的web.xml中,在官方文档中的示例中显示相同

在官方文档中,我没有找到任何其他配置(http://hazelcast.org/docs/latest/manual/html/httpsessionclustering.html),我满足了所有要求。

在两个tomcats面前,我有一个HAproxy,可以平衡两个节点之间的流量(带有stiky-session)。

当两个节点都启动时,他们加入群集,我在两边都有这个日志:

INFO: [192.168.0.68]:4701 [dev] [3.2.5]
Members [2] {
    Member [192.168.0.68]:4701 this
    Member [192.168.0.49]:4701
}

当我发出第一个请求时,我在第一个节点上得到了这个日志: 获取方法。检查会议... 用户使用空会话,生成一个... 收到会话HZ2F779DFA402A406E9ACCA3E0298B37F5的GET请求

并且在此之后的每个请求都会生成此日志:

获取方法。检查会议......

收到会话HZ2F779DFA402A406E9ACCA3E0298B37F5的GET请求

当我杀死这个tomcat时,HAProxy开始向第二个发送所有请求,我预计会话将是相同的(HZ2F779DFA402A406E9ACCA3E0298B37F5),但我得到了这个日志:

获取方法。检查会议......

具有空会话的用户,生成一个...

收到会话HZB89D6CDC1CC94FDEBC82019BAAA9022E的GET请求

获取方法。检查会议......

收到会话HZB89D6CDC1CC94FDEBC82019BAAA9022E的GET请求

为什么会话被更改?我做错了什么?

这个用例非常简单,可能我错过了一些东西,但我无法弄明白。 还有其他先决条件吗?

使用的软件:

hazelcast 3.2.5

tomcat 7.0.54

java 1.7.0_25

2 个答案:

答案 0 :(得分:0)

你可以发布一些日志记录,特别是看起来像这样的东西:

Members [2] {
    Member [192.168.1.100]:5701 this
    Member [192.168.1.100]:5702
}

关于您的问题:

  • 是否可以在同一个tomcat群集中使用hazelcast clsutered和non-hazelcast clsutered应用程序?

那应该不是问题。

  • 使用hazelcast的应用程序应该是可分发的吗? (通过像其他人一样添加web.xml)

您对distributable意味着什么?

  • 部署应用程序的tomcat不应该在群集中?我可以在同一个tomcat中使用标准tomcat会话复制群集其他应用程序吗?

只要没有端口冲突,我认为这不应该是一个问题。

答案 1 :(得分:0)

您能否确保在hazelcast配置中,sticky-session是正确的?

请按照https://github.com/hazelcast/hazelcast-wm#using-sticky-sessions

所述的步骤进行操作