群集中的最小节点数是多少?

时间:2014-11-07 13:12:48

标签: marklogic

文档说集群needs at least three nodes。我们能够在两台主机上运行,​​测试故障转移似乎有效。

我们在群集中设置了两个主机(A,B),每个主机都有一个林。 A上的森林是主森林。 B上的森林是复制森林。我们将林A附加到数据库。此时森林的地位" A"是"开放"和" B"是"同步复制"。

然后我们关闭主持人A.森林B的状态变为“打开”#34;

即使我们在群集中只有两台主机,似乎故障转移仍然有效。这是预期的行为吗?

2 个答案:

答案 0 :(得分:2)

要更好地了解问题,请尝试此操作。 让主机B复制包括安全数据库在内的所有数据库。 (在B上放一个森林,它是A上匹配森林的复制品)。 您的描述与称为"本地磁盘故障转移"

的内容相匹配

https://docs.marklogic.com/guide/cluster/failover#id_65543

(这个词有误导性,磁盘不需要"本地"它们可以在SAN上或物理上远程 - 这个术语意味着每个主机只能看到自己的磁盘,而不是共享磁盘)。

测试您可以可靠地登录并预先执行A或B上的操作 并且两者都可以看到结果。

通过制作简单的应用程序,理想地模拟真实世界的用例, 就像每次单击按钮时更新文档一样。 或者使用REST服务并测试你可以在两台主机上做同样的事情。

现在断开A和B之间的网络连接。 (拉出电线或禁用网络更改路由器设置,无论什么是最简单的。)

现在在两台主机上尝试您的应用程序。 分别转到每个主机到管理控制台,看看它认为自己和其他主机的状态。您希望状态显示什么?
A和B都不再能够通信,因此他们都相信其他主机已经失败。 没有第三个主机进行仲裁......您期望或想要的结果是什么? 双方都应该停止工作吗?还是两个主人都应该继续工作? 或者应该只有一个工作?哪一个 ?他们将如何决定? 应该"故障转移"主机接管为主机,因为它看到主机失败了? 或者主服务器是否应该确定故障转移主机已失败? 两种选择都是正确的 - 在没有其他任何已知的情况下, 你希望集群继续前进。

现在尝试一下 使用该应用程序在两个系统上添加或修改文档。会有用吗? 对每台主机上的同一文档进行不同的更改 您是否希望每个应用程序都能正常运行?它应该是故障转移的原因。 但是每个人都认为对方已经死了,所以他们不会尝试复制,而是他们 两者都充当主人(或者他们都失败了 - 他们无法区分 所以没有办法选择哪个更好)

现在,在A和B都有不同的更改后重新连接网络。 你期望会发生什么? 将复制A和B的哪些变化? B会放弃成为主人并将其变更交给A吗? 或者A会意识到B刚刚恢复并将ITS更改发送给B? 那两个文件都变了?

另一个(更复杂但更有启发性)的实验是在您和群集之间设置负载均衡器。这将随着时间的推移向两个主机发送请求。

现在断开主机之间的网络,但不在负载balencer和每个主机之间断开连接。 运行你的应用程序...它仍然会相信它只是与一个主机"像之前一样。 但是变化将根据负载balencer发送到A和B. 您对用户体验的期望是什么? 如果请求1更新A,则请求2从B中获取文档... 用户(和应用程序)会得到不一致的结果 - 如果有的话。 这不好。

发生故障转移......但整个系统不一致且不了解它。 它会在您尝试的实验中起作用,因为您知道只能与A交谈 但这不是故障转移的目的。您可以使用RAID或分布式文件系统或简单的连续备份来实现这一目标......

故障转移是指能够处理离线或彼此断开连接的系统 无论您向哪个主机发送请求,整个群集仍然可以正常运行并保持一致。

有3台主机,它可以从所有3台主机完全脱机或断开连接, 它不会以不一致的方式运作。对任何主机的请求将成功并与其余主机保持一致,否则它将失败(因为主机已脱机或已确定它不再是群集的一部分)。

有2个主机(或任何偶数),你无法实现"故障转移"兼顾一致性和复制性。

你可以做"复制" (请参阅数据库复制和灵活复制)集群之间, 甚至是1个节点的集群..但这与"故障转移"不同 复制是一种方式..主服务器将数据发送到副本服务器。 如果其中一个失败,您可以决定将流量发送给另一个......但此时 您需要稍后手动干预才能使数据重新同步。

你可以看到差异 https://docs.marklogic.com/guide/database-replication

答案 1 :(得分:0)

要使故障转移起作用,群集至少需要三台主机。只有两个主机,存在" split brain"问题,例如网络链接失败。