2

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

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

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

    =或=

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

4

1 回答 1

3

不太确定 BackupManager 的工作原理,我对这个好的URL的阅读表明复制在识别备份方面足够智能。

内存中会话复制,是在集群内的所有 Tomcat 实例之间复制会话数据,Tomcat 提供两种解决方案,在集群内的所有实例之间复制或仅复制到其备份服务器,该解决方案提供有保证的会话数据复制......

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

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

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

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

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

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

然后 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

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

于 2010-05-28T11:40:45.163 回答