我目前正在研究 corosync 来构建一个双节点集群。因此,我让它运行良好,并且它完成了我想要做的事情,即:
- 两个节点之间失去连接导致第一个节点“10node”拥有两个故障转移 Wan IP。(又名资源 WanCluster100 和 WanCluster101)
- “11node” 什么也不做。他“认为”他仍然拥有故障转移 Wan IP。(又名 WanCluster101)
但它没有这样做:
- 当与另一个节点的连接恢复时,“11node”应该重新启动 WanCluster101 资源。
这是为了防止出现节点 10 突然死亡(从而无法获取 11node 的故障转移 Wan IP)的情况,从而导致所有节点都没有 10node 的故障转移 IP,因为 10node 已关闭,而 11node 已“归还”其故障转移 Wan IP。
这是我正在处理的当前配置。
node 10sch \
attributes standby="off"
node 11sch \
attributes standby="off"
primitive LanCluster100 ocf:heartbeat:IPaddr2 \
params ip="172.25.0.100" cidr_netmask="32" nic="eth3" \
op monitor interval="10s" \
meta is-managed="true" target-role="Started"
primitive LanCluster101 ocf:heartbeat:IPaddr2 \
params ip="172.25.0.101" cidr_netmask="32" nic="eth3" \
op monitor interval="10s" \
meta is-managed="true" target-role="Started"
primitive Ping100 ocf:pacemaker:ping \
params host_list="192.0.2.1" multiplier="500" dampen="15s" \
op monitor interval="5s" \
meta target-role="Started"
primitive Ping101 ocf:pacemaker:ping \
params host_list="192.0.2.1" multiplier="500" dampen="15s" \
op monitor interval="5s" \
meta target-role="Started"
primitive WanCluster100 ocf:heartbeat:IPaddr2 \
params ip="192.0.2.100" cidr_netmask="32" nic="eth2" \
op monitor interval="10s" \
meta target-role="Started"
primitive WanCluster101 ocf:heartbeat:IPaddr2 \
params ip="192.0.2.101" cidr_netmask="32" nic="eth2" \
op monitor interval="10s" \
meta target-role="Started"
primitive Website0 ocf:heartbeat:apache \
params configfile="/etc/apache2/apache2.conf" options="-DSSL" \
operations $id="Website-one" \
op start interval="0" timeout="40" \
op stop interval="0" timeout="60" \
op monitor interval="10" timeout="120" start-delay="0" statusurl="http://127.0.0.1/server-status/" \
meta target-role="Started"
primitive Website1 ocf:heartbeat:apache \
params configfile="/etc/apache2/apache2.conf.1" options="-DSSL" \
operations $id="Website-two" \
op start interval="0" timeout="40" \
op stop interval="0" timeout="60" \
op monitor interval="10" timeout="120" start-delay="0" statusurl="http://127.0.0.1/server-status/" \
meta target-role="Started"
group All100 WanCluster100 LanCluster100
group All101 WanCluster101 LanCluster101
location AlwaysPing100WithNode10 Ping100 \
rule $id="AlWaysPing100WithNode10-rule" inf: #uname eq 10sch
location AlwaysPing101WithNode11 Ping101 \
rule $id="AlWaysPing101WithNode11-rule" inf: #uname eq 11sch
location NeverLan100WithNode11 LanCluster100 \
rule $id="RAND1083308" -inf: #uname eq 11sch
location NeverPing100WithNode11 Ping100 \
rule $id="NeverPing100WithNode11-rule" -inf: #uname eq 11sch
location NeverPing101WithNode10 Ping101 \
rule $id="NeverPing101WithNode10-rule" -inf: #uname eq 10sch
location Website0NeedsConnectivity Website0 \
rule $id="Website0NeedsConnectivity-rule" -inf: not_defined pingd or pingd lte 0
location Website1NeedsConnectivity Website1 \
rule $id="Website1NeedsConnectivity-rule" -inf: not_defined pingd or pingd lte 0
colocation Never -inf: LanCluster101 LanCluster100
colocation Never2 -inf: WanCluster100 LanCluster101
colocation NeverBothWebsitesTogether -inf: Website0 Website1
property $id="cib-bootstrap-options" \
dc-version="1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff" \
cluster-infrastructure="openais" \
expected-quorum-votes="2" \
no-quorum-policy="ignore" \
stonith-enabled="false" \
last-lrm-refresh="1408954702" \
maintenance-mode="false"
rsc_defaults $id="rsc-options" \
resource-stickiness="100" \
migration-threshold="3"
关于这一行,我还有一个不太重要的问题:
colocation NeverBothLans -inf: LanCluster101 LanCluster100
我如何告诉它这种搭配仅适用于“11node”。
答案1
1:在测试集群连通性之前,你需要配置你的 stonith 设备,stonith 在集群中非常重要,用于解决脑裂情况 2:对于不太重要的问题,你可以尝试使用位置约束
你可以从这样的事情开始:
location mycol dummy1 \
rule $id="myrule" -inf: defined dummy2 and #uname eq suse02
答案2
如果我正确理解了您的需求,您可以通过设置位置约束来做到这一点:
pcs constraint location WanCluster101 prefers 11sch=10
pcs constraint location WanCluster101 prefers 10sch=5
我过去的做法是对两个 IP 都施加约束,双向施加约束。这样,当一个节点发生故障时,另一个节点将占用两个 IP,无论哪个节点发生故障,另一个节点都会拥有这两个 IP。这导致为每个 IP 添加优先级相反的约束(一个在第一个节点上具有较高的优先级,在第二个节点上具有较低的优先级,另一个在第二个节点上具有较高的优先级,在第一个节点上具有较低的优先级)。