1

我正在尝试将 2 台计算机与 Pacemaker/Corosync 一起集群。他们共享的唯一资源是 ocf:heartbeat:IPaddr 这是主要问题:

由于只有两个节点,因此只有在no-quorum-policy=ignore.

当从节点 A 拔出网线时,节点 A 上的 corosync 绑定到 127.0.0.1,pacemaker 认为节点 A 仍然在线,而节点 B 是离线的。

Pacemaker 尝试在节点 A 上启动 IPaddr,但由于没有网络连接而无法启动。另一方面,节点 B 识别出节点 B 处于离线状态,如果 IPaddr 服务在节点 A 上启动,它将成功地在其自身(节点 B)上启动它。

但是,由于服务无法在节点 A 上启动,它会进入致命状态,必须重新启动才能重新加入集群。(您可以重新启动一些需要的服务。)

1解决方法是start-failure-is-fatal="false"使节点A继续尝试启动IPaddr服务直到成功的设置。这样做的问题是,一旦成功,两个节点之间就会发生 ip 冲突,直到它们重新集群并且其中一个节点放弃资源。

我正在玩弄一个节点属性的想法,该节点属性cat /sys/class/net/eth0/carrier在电缆连接时为 1,在电缆断开时为 0,然后有一个位置规则,如果“已连接”== 零则不启动服务类型事情,但我们会看到。

任何想法或想法将不胜感激。

4

2 回答 2

2

在 freenote.net/#linux-cluster irc 网络上与 Andrew Beekhof(Pacemaker 的作者)和 Digimer 交谈后,我了解到这个问题背后的实际原因是集群防护不当。

隔离或启用 stonith 对于成功的高可用性集群是绝对必要的。以下页面是该主题的必读内容:

集群教程:概念 - 围栏

非常感谢 Digimer 提供了这个宝贵的资源。关于聚类的部分回答了这个问题,但是整篇文章都是有益的。

基本上,fencing 和 STONITH(在头部射击另一个节点)是集群用来确保宕机节点实际上已经死亡的机制。它需要这样做以避免共享内存损坏、脑裂状态(多个节点接管共享资源),并且大多数情况下确保您的集群不会陷入恢复或崩溃。

如果您没有在集群环境中配置和启用 stonith/fencing,那么您确实需要它。

其他需要注意的问题是Stonith Deathmatch和 Fencing Loops。

简而言之,通过创建我们自己的 Stonith 设备并按照 /usr/share/doc/cluster-glue/stonith/README.external 教程编写一个 stonith 代理,然后编写一个启动,解决了网络连接丢失导致脑裂的问题检查节点是否能够支持加入集群然后启动 corosync 或等待 5 分钟并再次检查的脚本。

于 2014-04-01T17:01:11.983 回答
0

根据您的配置,两个节点之间的心跳将使用 "127.0.0.1" ,我认为这是完全错误的。通常 corosync 需要绑定私有 IP,资源 IPaddr 服务应该使用不同的 ip 命名流量 IP。

例如:

节点A:192.168.1.00(用于心跳);10.0.0.1(流量ip)

节点 B:192.168.1.101(用于心跳);10.0.0.2(流量ip)

如果我的理解是正确的,ipaddr 服务会根据流量 ip 启动一个虚拟 ip,我们假设它是 10.0.0.3。

于 2013-12-04T10:09:37.657 回答