【问题标题】:tomcat 6 - Cluster / BackupManagertomcat 6 - 集群/备份管理器
【发布时间】:2011-02-24 21:39:25
【问题描述】:

我有一个关于在 tomcat 6 中使用 BackupManager 进行集群(会话复制/故障转移)的问题。我选择 BackupManager 的原因是因为它只将会话复制到另一台服务器。

我将通过下面的示例来尝试解释我的问题。

  • 我在一个带有 BackupManager 的 tomcat 6 集群中设置了 6 个节点。前端是一个使用 mod_jk 并启用粘性会话的 Apache 服务器
  • 每个节点都有 1 个会话。 node1 有一个来自 client1 的会话 node2 有一个来自 client2 的会话 .. ..
  • 现在假设 node1 出现故障;假设 node2 是备份,node2 现在有两个会话(用于 client2 和 client1)
  • 下次client1发出请求时,究竟会发生什么? Apache 是否“知道”node1 已关闭并将请求直接发送到 node2 ?

    =OR=

    它是否会尝试 6 个实例中的每一个并找出备份的对象?

【问题讨论】:

    标签: session tomcat cluster-computing failover


    【解决方案1】:

    不太清楚 BackupManager 的工作原理,我读过这个很好的 URL 表明复制在识别备份方面足够智能。

    内存中的会话复制,是 跨所有复制的会话数据 集群内的 Tomcat 实例, Tomcat 提供了两种解决方案, 跨所有实例复制 在集群内或复制到 只有它的备份服务器,这个解决方案 提供有保证的会话数据 复制...

    SimpleTcpCluster 使用 Apache Tribes 来保持与通信组的通信。组成员由 Apache Tribes 建立和维护,它处理服务器崩溃和恢复。 Apache Tribes 还提供多个级别的组成员之间的有保证的消息传递。这是通过更新会话内存以反映任何会话数据更改来实现的,复制在成员之间立即完成...

    您可以通过以下方式减少数据量 使用 BackupManager(仅发送到 一个节点,备份节点)

    如果设置了notifyListenersOnReplication="true",您将能够从日志中看到这一点。

    另一方面,您仍然可以使用 DeltaManager 并将您的集群拆分为 3 个域,每个域有 2 个服务器。

    假设这些将是节点 1 节点 2、3 4 和 5 6。

    在这种情况下 - 配置 domain 工作者属性,将确保会话复制只会在域内发生。

    然后 mod_jk 就肯定知道当 node1 出现故障时该查看哪个服务器。

    http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html 状态

    目前您可以使用该域 工人属性 (mod_jk > 1.2.8) 到 构建集群分区 具有更可扩展性的潜力 集群解决方案 DeltaManager(你需要配置 域拦截器)。

    还有一个关于这个链接的更好的例子:

    http://people.apache.org/~mturk/docs/article/ftwai.html

    请参阅“域聚类模型”部分。

    【讨论】:

    • Apache“知道”将其发送给谁的唯一方法是,它是否被写入 cookie(与 WebLogic 的工作方式相同)。通过查看 cookie 应该很容易弄清楚这一点。一旦我设置了这个,就会传递我的发现。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-13
    • 2021-03-04
    相关资源
    最近更新 更多