Cluster computing 如何处理分裂的大脑与一个集群有两个节点数?

Cluster computing 如何处理分裂的大脑与一个集群有两个节点数?,cluster-computing,heartbeat,pacemaker,Cluster Computing,Heartbeat,Pacemaker,我正在学习集群计算的一些基本概念,我有一些问题要问 据 如果集群拆分为两个(或更多)无法再相互通信的节点组(也称为分区),则仲裁将用于防止资源从多于所需的节点上启动,这将有数据损坏的风险。 当一半以上的已知节点在同一分区中联机时,或当下列等式成立时,对于数学上倾向于联机的节点,集群具有仲裁: 总节点数

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

如果集群拆分为两个(或更多)无法再相互通信的节点组(也称为分区),则仲裁将用于防止资源从多于所需的节点上启动,这将有数据损坏的风险。 当一半以上的已知节点在同一分区中联机时,或当下列等式成立时,对于数学上倾向于联机的节点,集群具有仲裁:

总节点数<2*活动节点数

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

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

问题:


从上面看,我产生了一些困惑,为什么我们不能停止所有群集资源,比如“6节点群集””?两节点群集有什么特殊之处?

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

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

…但请稍候,如果群集通信中断,但两个节点仍在运行,会发生什么情况。他们不会认为他们的同龄人死了,都变成了活跃的节点吗?现在我有两次初选,可能会有分歧的数据,或者网络上的冲突,对吗?这个问题通过STONITH解决。正确配置的STONITH将确保在给定时间内只有一个节点处于活动状态,并从根本上防止大脑分裂的发生

LMB在2010年撰写了一篇优秀的文章,进一步解释了STONITH及其重要性: