1

我正在学习集群计算的一些基本概念,我有一些问题要问。

根据这篇文章:

如果一个集群分裂成两个(或更多)节点组,不能再相互通信(aka.partitions),quorum 用于防止资源在比预期更多的节点上启动,这可能会导致数据损坏。当所有已知节点中有一半以上在同一分区中在线时,或者对于数学倾向,只要以下等式为真,则集群具有仲裁:

total_nodes < 2 * active_nodes

例如,如果一个 5 节点集群分为 3 节点和 2 节点分区,则 3 节点分区将具有仲裁并且可以继续提供资源。如果一个 6 节点集群分成两个 3 节点分区,则两个分区都没有仲裁;在这种情况下起搏器的默认行为是停止所有资源,以防止数据损坏。

双节点集群是一种特殊情况。根据上面的定义,一个双节点集群只有在两个节点都运行时才会有仲裁。这将使创建双节点集群毫无意义

问题:

从上面,我有些困惑,为什么我们不能像“<strong>6节点集群”那样停止所有集群资源?两个节点集群有什么特别之处?

4

1 回答 1

2

你是正确的,一个两节点集群只有在通信时才能拥有仲裁。因此,如果集群要拆分,使用默认行为,资源将停止。

解决方案是不使用默认行为。只需将 Pacemaker 设置为no-quorum-policy=ignore. 这将指示 Pacemaker 即使在仲裁丢失时也继续运行资源。

...但是等等,现在如果集群通信中断但两个节点仍在运行会发生什么。他们会不会认为他们的对等节点都死了并且都成为活动节点?现在我有两个初选,并且可能存在不同的数据,或者我的网络上有冲突,对吧?此问题已通过 STONITH 得到解决。正确配置的 STONITH 将确保在给定时间只有一个节点处于活动状态,并从根本上防止出现裂脑。

一篇优秀的文章进一步解释了 STONITH 及其重要性,由 LMB 早在 2010 年在此处撰写: http: //advogato.org/person/lmb/diary/105.html

于 2017-06-27T17:42:42.500 回答