我正在尝试了解Heartbeat
新环境中的设置。这是一个 2 节点集群,仍在使用 Heartbeat 版本 1(不使用 Pacemaker CRM 的版本),我有一个基本问题,我无法从 Google 上找到易于理解的答案。
问题是,如果集群中的节点之间发生通信故障,但两个节点仍然运行良好,集群管理器如何识别要关闭哪个节点? 我ping_group
在 中看到一条指令/etc/ha.d/ha.cf
。从我读到的内容来看,我看到集群管理器将检查与 中提到的任何节点的连接,ping_group
并检查哪个集群节点处于活动状态的连接,并据此决定关闭哪个节点(?) 如果从两个节点到 ping 节点的连接都处于活动状态,而集群中两个节点之间的心跳网络仅处于关闭状态,该怎么办?我在这里遗漏了什么?
情况:只有心跳网络发生故障,但两个节点均处于 UP 状态且正常。
root@automan00:/root : cat /etc/ha.d/ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 500ms
deadtime 30
warntime 10
initdead 120
udpport 694
baud 19200
bcast bond1 eth2
auto_failback off
node automan00
node automan01
ping_group group1 1.1.1.1 2.2.2.2
respawn hacluster /usr/lib64/heartbeat/ipfail
realtime on
# stonith directive
stonith external/riloe /etc/ha.d/riloe.cfg
答案1
也许您可以在具有一些私有 IP 的节点之间设置交叉电缆作为 HB 上的另一个私有网络。
但是:当仅有 2 个节点之间的通信失败时,您不知道要关闭哪个节点,这就是为什么在投入生产之前需要第三个节点的原因。
如果第三个节点无法确定谁工作正常、谁工作不正常,你将会发现自己陷入了脑裂的情况。
https://en.wikipedia.org/wiki/Split-brain_(计算)
使用类似“最后一条人”按钮之类的“自杀工具”并不是一个好习惯,因为你永远不知道其他节点发生了什么。如果通信失败或其他主机出现故障,你会看到相同的行为,因此在任何这些情况下你都无法自杀。从其他节点的角度来看也是如此。
我知道这不是解决方案,但我希望它能帮助您理解 CRM 的工作方式。如果您构建集群,请尝试使用 2 个以上的节点,就这么简单。