配置延迟防护
为防止fence竞争,两个节点之一应配置为延迟fencing。
这将有助于保持集群稳定,但如果集群节点之间的通信由于外部影响(例如交换机损坏)而受到影响,则它不会阻止重新启动然后围列循环。
对于延迟防护,其中一个防护设备配置了一个 delay=N 选项,其中 N 是以秒为单位的超时。
当调用fence 设备时,它会立即记录fencing 操作的开始,但在实际开始fencing 操作之前会等待N 秒。
这使将被此设备防护的节点有时间在防护可以开始之前防护另一个节点,从而有效地避免为其配置延迟防护设备的节点被防护,并使其“赢得”防护竞赛。
注意:延迟防护只能用于针对单个主机的防护设备。
如果使用共享隔离设备,则应使用 pcmk_host_list 选项将其拆分为两个单独的隔离设备。
创建延迟fence设备
创建带有延迟防护的 fence 设备的过程与创建常规fence 设备的过程完全相同,但增加了一个delay=N 选项。
比如创建一个fence_nodea_delayed设备,目标nodea,延迟10秒,可以使用如下命令:
对于 nodea 集群节点:
# pcs stonith create fence_nodea_delayed \ > fence_rht ipaddr="classroom.example.com" \ > port="nodea.private.example.com" \ > pcmk_host_list="nodea.private.example.com" \ > delay=10
对于 nodeb 集群节点:
# pcs stonith create fence_nodeb_delayed \ > fence_rht ipaddr="classroom.example.com" \ > port="nodeb.private.example.com" \ > pcmk_host_list="nodeb.private.example.com"
如果没有延迟地为第二个节点创建了一个围列设备,这将防止 nodea 被围列,因为它有一个 10 秒的窗口来围列第二个节点。
如果集群通信网络仍在运行,并且 nodea 由于其他原因失败,它仍然会被隔离,但会有 10 秒的延迟。
更新现有的fence设备以进行延迟防护
也可以使用 pcs stonith update 命令更新现有的围列设备以进行延迟防护(delayed fencing)。
确保fence 设备仅用于一台主机。
然后添加延迟选项。
例如,要更新fence 设备fence_mynodea 以使用5 秒延迟,可以使用以下命令:
# pcs stonith update fence_mynodea delay=5
在这篇文章中,我们将配置一个简单的 2 节点集群,集群节点为 nodea 和 nodeb 。
集群名称将为 onitroad 。
应使用在classroom.example.com 上运行的fencing 守护进程与fence_rht 防护代理结合来处理此集群的防护。
另外,此fence设备的名称对应于nodea.private.example.com网络私有主机名。
为了防止fence竞争,nodeb在被fencing时应该有10秒的延迟。
为了在集群启动时加快资源回收,集群不应等待所有节点加入后才开始通过fencing进行资源回收。
安装所需的包
- 在两个节点上,安装 fence-agents-all、fence-agents-rht 和 pcs 包。
# yum -Y install pcs fence-agents-all fence-agents-rht
- 在两个节点上,允许集群流量通过防火墙。
# firewall-cmd --permanent --add-service=high-availability # firewall-cmd --reload
- 在两个节点上,启用并启动 pcsd 服务。
systemctl enable pcsd # systemctl start pcsd
- 在两个节点上,将 hacluster 密码设置为 root123.
# echo root123 I passwd --stdin hacluster
- 在 nodea 机器上,验证PC的 nodea.private.example.com和nodeb.private.example.com
# pcs cluster auth -u hacluster -p root123 \ > nodea.private.example.com \ > nodeb.private.example.com
- 使用 nodea.private.example.com 和 nodeb.private.example.com 机器创建一个名为 onitroad 的新两节点集群。
在两个节点上启动并启用集群:
# pcs cluster setup --start --enable \ > --name onitroad \ > nodea.private.example.com \ > nodeb.private.example.com
- 验证集群是否处于活动状态。
# pcs status
- 当用pcs新建一个双节点集群时,corosync.conf中会自动开启特殊的two_node模式。
如果以后有另外的节点加入集群,此选项将再次自动禁用。
创建两节点集群后,/etc/corosync/corosync.conf 中的仲裁块将如下所示:
quorum { provider: corosync_votequorum two_node: 1 }
禁用 wait_for_all
即使没有明确指定 wait_for_all 选项,它也会由 two_node 选项自动打开。
要在创建新集群时禁用 wait_for_all 选项,可以添加 -wait_for_all=0 选项,如下所示:
# pcs cluster setup --start --enable \ > --name twonodecluster \ > --wait_for_all=e \ > nodea.private.example.com \ > nodeb.private.example.com
要在现有集群上禁用 wait_for _all 选项,可以使用以下过程:
- 停止正在运行的集群。
# pc cluster stop --all
- 在 /etc/corosync/corosync.conf 中的仲裁块中添加一行 wait_for_all: 0 :
quorum { provider: corosync_votequorum two_node: 1 wait_for _all: 0 }
- 将 corosync.conf 同步到另一个集群节点。
# pcs cluster sync
- 在所有节点上启动集群。
# pc cluster start --all
延迟防护(delayed fencing)和 fence级别
由于防护级别是顺序尝试的,并且防护级别内的防护设备也以串行方式执行,因此只有第一防护级别中的第一个防护设备需要延迟。
虽然可以增加另外的延迟,但它们会减慢整个击剑过程,而不会为击剑比赛提供另外的保护。
它甚至会增加部分受防护机器的风险,因为它为第二个节点提供了更大的机会来进行某些防护操作。