这是我目前的概念验证设置
node ha1
node ha2
primitive HA-mysql lsb:mysql \
op monitor interval="15s"
primitive VIP ocf:heartbeat:IPaddr2 \
params ip="10.100.0.10" nic="eth1" \
op monitor interval="10s"
group HA-Group VIP HA-mysql \
meta resource-stickiness="101"
location PREFER-NODE1 HA-Group 100: ha1
property $id="cib-bootstrap-options" \
dc-version="1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b" \
cluster-infrastructure="openais" \
expected-quorum-votes="2" \
stonith-enabled="false" \
no-quorum-policy="ignore"
如果我正确阅读了文档,设置足够高的粘性值应该可以防止资源服务在主节点从故障中恢复时返回到主节点的问题。足够高,在这种情况下,我应该为 HA-Group 设置一个至少
100 < $stickiness-of-group + $stickiness-of-VIP + $stickiness-of-HA-mysql
100 < $stickiness + 0 + 0
100 < $stickiness
因此我使用 101。
我所期望的行为是:
- 首先拔掉 ha1,然后资源组由 ha2 提供服务
- 重新插入 ha1,然后资源组仍然由 ha2 提供服务
然而,在当前配置下,当我重新插入 ha1 时,一旦检测到 ha1 启动,资源组就会立即由 ha1 提供服务。
P/S:我已经使用了更高的组粘性值,例如 200、500、1000,但仍然得到相同的行为。
PP/S:我的起搏器版本是
ii pacemaker 1.0.9.1+hg15626-1 HA cluster resource manager
在 debian squeeze 上运行
Linux ha1 2.6.32-5-amd64 #1 SMP Sun Sep 23 10:07:46 UTC 2012 x86_64 GNU/Linux
Distributor ID: Debian
Description: Debian GNU/Linux 6.0.6 (squeeze)
Release: 6.0.6
Codename: squeeze
PPP/S:即使我将配置降低到这个水平,粘性仍然不起作用
node ha1
node ha2
primitive VIP ocf:heartbeat:IPaddr2 \
params ip="10.100.0.10" nic="eth1" \
op monitor interval="10s" \
meta resource-stickiness="1"
property $id="cib-bootstrap-options" \
dc-version="1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b" \
cluster-infrastructure="openais" \
expected-quorum-votes="2" \
stonith-enabled="false" \
no-quorum-policy="ignore"
答案1
经过一段时间的挣扎,我基本上找到了答案。显然,即使设置了粘性,拔掉电源也不是一个好的模拟。为了实现粘性设置想要解决的问题,服务器必须完全停止运行,或者至少关闭 corosync 服务。