当节点拔掉网线时,节点认为自己在线。起搏器/Corosync

问题描述 投票:0回答:3

我正在尝试使用 Pacemaker/Corosync 将 2 台计算机集群在一起。他们共享的唯一资源是 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,然后有一个位置规则,表示如果“已连接”== 0 则不会启动服务之类的事情,但我们会看到。

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

cluster-computing pacemaker
3个回答
2
投票

在 freenote.net/#linux-cluster irc 网络上与 Andrew Beekhof(Pacemaker 的作者)和 Digimer 交谈后,我了解到此问题背后的实际原因是集群未正确隔离。

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

集群教程:概念 - Fencing

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

基本上是击剑和 S.T.O.N.I.T.H. (射击头部的另一个节点)是集群用来确保故障节点实际上已死亡的机制。它需要这样做以避免共享内存损坏、脑裂状态(多个节点接管共享资源),并且大多数确保您的集群不会陷入恢复或崩溃。

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

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

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


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。


0
投票

如何为两个不同网段设置fencing?例如我们有两台服务器。每台服务器都有 10.10.10.x 和 20.20.20.x 。如果任何一个网段发生任何情况,起搏器故障转移都会发生

© www.soinside.com 2019 - 2024. All rights reserved.