更多: zhilu jiaocheng

更改现有集群中的仲裁选项

集群仲裁计算也可能受现有集群的影响。
为此,建议在生产中的集群上使用维护时段,以便可以重新启动集群以使用 corosync 来获取新配置。

也可以使用 corosync-cfgtool -R 命令即时更改 corosync 重新加载,但不会重新加载仲裁选项。
另一种可能性是在所有节点上手动重启 corosync.service 服务,一次一个。
虽然后一种选择不需要任何停机时间,但与在不同配置上运行集群的两半相关的风险大于零。

保存集群仲裁相关选项的配置文件是 /etc/corosync/corosync.conf 。
所有与仲裁相关的选项都在仲裁指令中设置。
/etc/corosync/corosync 中的默认仲裁指令。
没有设置任何特殊选项的 conf 如下:

quorum { 
provider: corosync_votequorum 
}

配置选项 wait_for _all、auto_tie_breaker、last_man_standing 和 two_node 可以通过在 quorum 指令中添加 option: 1 来打开。
如果启用了 last_man_standing,则可以添加 last_man_standing_window: 毫秒选项来调整预期投票的重新计算时间。

在对 /etc/corosync/corosync.conf 配置文件进行手动调整之前,建议安排一个维护时段并使用 pcs cluster stop -all 关闭集群。
这避免了计划外的集群停机,例如,由于无法解析的配置文件。

要启用 last_man_standing、wait_for_all 和 auto_tie_breaker 选项,请更改 /etc/corosync/corosync.conf 文件中的 quorum 指令以包含以下选项:

quorum { 
provider: corosync_votequorum last_man_standing: 1 
wait_for _all: 1 
auto_tie_breaker: 1 
}

corosync.conf 文件的内容在集群中的每个节点上都必须相同。
命令 pcs cluster sync 提供了一种将 corosync.conf 文件从当前节点同步到同一集群中的所有其他集群节点的机制。
同步完 corosync 配置文件后,可以再次使用 pcs cluster start -all 启动集群。

在启用新选项的情况下启动集群后,corosync-quorumtool 命令会显示 Flags 输出中列出的新选项:

# corosync-quorumtool
...
Flags:          Quorate WaitForAll LastManstanding AutoTieBreaker
...

设置仲裁计算选项

votequorum 组件允许集群管理员使用开关来构建集群,这些开关可以改变计算法定人数的方式。
使用 pcs cluster setup 命令构建新集群时,可能会添加以下开关以更改集群中仲裁处理的行为:

-wait_for_all

等待所有集群成员在线,然后再开始计算仲裁。
此设置可有效防止集群启动时的栅列竞争。
如果未启用此设置,所有未加入集群或者未完全关闭的节点将在达到法定人数后立即自动隔离。

-auto_tie_breaker

只需 50% 的集群节点启动即可实现仲裁,而不是默认的 50% + 1 票。
在 50% 与 50% 裂脑情况下,最低节点 ID 参与的一方将赢得法定人数。

-last_man_standing

启用此选项后,默认情况下每 10 秒重新计算一次预期投票。
这允许系统管理员一个接一个地断开集群节点与集群的连接,直到只有两个节点主动参与集群。
请注意,即使有两个或者更多节点在运行,过快地断开集群节点也会导致仲裁丢失。

可调参数 -last_man_standing_window 允许系统管理员更改节点停止参与集群时重新计算预期投票之前的毫秒数。
默认设置为 10000 毫秒(10 秒)。

结合 -auto_tie_breaker 选项,-last_man_standing 允许将集群降级到一个节点。
使用 last_man_standing 还需要使用 wait_for_all,因为它允许多个分区(集群的子集)同时声明仲裁。

当预期投票数发生变化时,命令 corosync-quorumtool -m 不会自动更新。
在这些情况下,运行 watch -n1 corosync-quorumtool 会更有用。

-two_node

此设置适用于仅包含两个节点的集群。
它将预期票数设置为 1,因此如果两个节点之一出现故障,集群仍然可以运行。
这是因为单个节点通常不能有仲裁,否则我们将需要 floor(2 + 2 + 1) = 2 票。
此选项会自动启用 -wait_for_all ,如果有两个以上的节点加入集群,则会自动禁用该选项。

前面列出的开关可以在创建新集群时组合,只要组合它们是有用的。
要创建启用 -last_man_standing 和 -wait_for_all 的集群,请执行:

# pcs cluster setup --start \
> --name testcluster --last_man_standing --wait_for_all \
> nodex.example.com\
> nodey.example.com \
> nodez.example.com
管理 Pacemaker 集群中的仲裁计算
日期:2020-09-17 00:14:45 来源:oir作者:oir