【问题标题】:Hazelcast HTTP session replication doesn't replicate anythingHazelcast HTTP 会话复制不会复制任何内容
【发布时间】:2014-08-20 11:43:16
【问题描述】:

我在使用 hazelcast http 会话复制功能时遇到了一些问题。

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

我有一些问题:

  • 是否可以在同一个 tomcat 集群中同时拥有 hazelcast 集群和非 hazelcast 集群应用程序?
  • 使用 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 个 tomcat 之间复制会话,我已将其添加到我的项目中:

  • 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),并且我满足了所有要求。

在两个 tomcat 前面我有一个 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

【问题讨论】:

    标签: java tomcat cluster-computing hazelcast


    【解决方案1】:

    您能否发布一些日志记录,尤其是看起来像这样的内容:

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

    关于您的问题:

    • 是否可以在同一个 tomcat 集群中同时拥有 hazelcast 集群和非 hazelcast 集群应用程序?

    这应该不是问题。

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

    你所说的可分发是什么意思?

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

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

    【讨论】:

      【解决方案2】:

      您能否确保在 hazelcast 配置中的粘滞会话是正确的?

      请按照https://github.com/hazelcast/hazelcast-wm#using-sticky-sessions中提到的步骤进行

      【讨论】:

        猜你喜欢
        • 2019-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        • 2016-05-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-24
        相关资源
        最近更新 更多