显示仲裁状态

Red Hat High Availability Add-on 提供了一个综合实用程序来显示集群中仲裁的当前状态: corosync-quorumtool 。
corosync-quorumtool 提供了与仲裁相关的信息的概述,例如 Total Votes 和 Expected Votes ,并一目了然地显示集群是否有仲裁。

# corosync-quorumtool 
Quorum information 
-----------------
Date:               Thu Sep 25 05:02:00 2014
Quorum provider:    corosync_votequorum
Nodes:              4      [1]
Node ID:            1      [2]
Ring ID:            4648
Quorate:            Yes    [3]
Votequorum information 
---------------------
Expected votes:       4         [4]
Highest expected:     4         [5]

Total votes:          4         [6]
Quorum:               3         [7]
Flags:                Quorate   [8]
Membership information 
---------------------
Nodeid         Votes Name 
     1               1 nodea.private.example.com (local) 
     2               1 nodeb.private.example.com
     3               1 nodec.private.example.com
     4               1 noded.private.example:com
  • 节点条目提供属于集群的节点的节点数。
  • 节点 ID 条目显示执行 corosync-quorumtool 的节点的 ID。
  • Quorate 条目显示集群是否是quorate。
  • 如果所有已配置的集群成员在集群中都处于活动状态,则预期投票条目会显示存在的投票数。
  • 最高预期条目显示集群中看到的最大预期投票数。
  • Total votes 条目显示集群中当前存在的投票数。
  • Quorum 条目显示最少需要多少票才能使集群保持定额。
  • Flags 条目显示当前在集群上设置的任何与仲裁相关的属性。如果集群是 quorate,则 Quorate 属性将显示。设置后,其他特殊功能也将显示在此字段中,例如 LastManstanding 或者 WaitForAll 。

什么是quorum(仲裁)?

为了使集群按预期工作,节点必须就某些事实达成一致,例如哪些机器当前是集群成员、服务在何处运行以及哪些机器正在使用哪些资源。

在 Red Hat High Availability Add-on 中实现这一点的方法是使用多数投票方案。
如果每个集群节点成功加入 corosync 网络通信并且能够与已经加入集群的其他节点通信,则每个集群节点投一票。

如果成功投出所有可能投票的一半以上,则集群可运行。
获得超过一半票数所需的最低票数称为法定人数。
如果达到法定人数,则群集被视为法定人数。
如果一半或者更多节点无法相互通信,则集群将失去仲裁。

当集群启动时,所有集群节点都会尝试相互通信并旨在实现仲裁。
一旦形成多数,就会有一个法定集群。
未成功加入仲裁集群的所有其他节点将被具有仲裁的节点保护。
如果属于仲裁集群一部分的节点无法再与集群通信,则该节点将被隔离。

什么是pacemaker集群中的仲裁quorum
on it road .com

计算仲裁人数

仲裁在红帽高可用性添加组件中由 corosync 组件投票仲裁计算和管理。
votequorum 组件使用两个值来计算集群是否为法定人数:

  • 预期票数:如果所有集群节点都完全正常运行并相互通信,则预期的票数。
  • 总票数:当前存在的票数。如果某些节点未启动或者未与集群通信,这可能低于预期的投票数。

达到法定人数所需的投票数基于预期投票数。
以下公式显示法定人数需要多少票。
在这个计算中, floor() 意味着总是向下取整。

Quorum = floor(expected votes / 2 + 1)

仲裁人数计算示例

在以下示例中,假设集群具有三个节点。
三节点集群的预期投票数为 3.

Quorum= floor(expected votes / 2 + 1)
Quorum = floor(3 / 2 + 1) 
Quorum = floor(1.5 + 1) 
Quorum = floor(2.5) 
Quorum = 2

在三节点集群中,至少需要有两个节点在运行才能达到仲裁。

在以下示例中,假设集群具有四个节点。
四节点集群的预期投票数为四。

Quorum = floor(expected votes / 2 + 1} 
Quorum = floor(4 / 2 + 1) 
Quorum = floor(2 + 1} 
Quorum = floor(3) 
Quorum = 3

在四节点集群中,至少需要运行三个节点才能达到仲裁。

为什么需要计算仲裁人数?

在集群中的某些节点无法与某些其他节点通信的情况下,需要仲裁。
下图显示了一个由节点 A、B、c、D 和 E 组成的五节点集群,其服务在共享存储上使用 ext4 文件系统。
此服务当前正在节点 A 上运行。

节点 D 和 Eget 从主专用网络中分离出来,无法与节点 A、B 和 c 通信。
在没有仲裁的情况下,这两个节点将决定 A、B 和 C 都出现故障,需要进行隔离(远程断电),以便可以恢复其资源。
通过这种方式,法定人数在围列之前充当了重要的大门。

如果集群没有 fencing 设备,节点 D 和 E 将立即开始恢复资源,导致相同的 ext4 文件系统同时挂载在两个地方,这不是一个健康的情况。
这种集群的两半彼此独立运行的情况被称为裂脑。

裂脑是双节点集群中的一个特殊问题,因为如果其中一个节点出现故障,另一个节点将不包含集群中的大多数节点。
需要采取特殊步骤来允许双节点集群操作并仍然避免裂脑.”

假设本例中所有节点都拥有一票,则不会出现这种情况,因为节点 D 和节点 E 一共只有两票,不超过总票数(五)的一半。
这将导致节点 D 和节点 E 停止运行,直到至少添加另一票为止。
另一方面,节点 A、B 和 c 保持活跃提供服务,因为它们总共有三票,占总票数的一半以上。

日期:2020-09-17 00:11:04 来源:oir作者:oir