我有使用DRBD资源配置的高可用性群集。
Master/Slave Set: RVClone01 [RV_data01]
Masters: [ rvpcmk01-cr ]
Slaves: [ rvpcmk02-cr ]
我执行一项测试,断开连接DRBD网络接口的网络适配器之一(例如关闭网络适配器)。 现在,群集显示状态,即运行" drbd-overview"所有o.k BUT DRBD的状态。显示在主服务器中:
[root@rvpcmk01 ~]# drbd-overview
0:drbd0/0 WFConnection Primary/Unknown UpToDate/DUnknown /opt ext4 30G 13G 16G 45%
并在辅助服务器中:
[root@rvpcmk02 ~]# drbd-overview
0:drbd0/0 StandAlone Secondary/Unknown UpToDate/DUnknown
现在我几乎没有问题: 1.为什么集群不了解DRBD的问题? 2.为什么当我再次将网络适配器降至UP并连接DRBD之间的连接时,DRBD没有处理此故障并在连接为o.k时同步DRBD? 我看到一篇文章谈到"解决DRBD裂脑问题" - https://www.hastexo.com/resources/hints-and-kinks/solve-drbd-split-brain-4-steps/ 在本文中,它解释了如何解决断开连接和重新同步DRBD的问题。 但是我应该怎么知道存在这种问题?
我希望我能清楚地解释我的情况,并提供有关我拥有和我需要什么的足够信息......
答案 0 :(得分:1)
1)您没有在Pacemaker或DRBD中使用fencing / STONITH设备,这就是当您拔下DRBD正在使用的网络接口时没有任何反应的原因。这不是Pacemaker在没有在DRBD中定义防护策略以及在Pacemaker内部定义STONITH设备时会做出反应的情况。
2)您可能只使用一个环用于Corosync通信(与DRBD设备相同),这将导致辅助节点升级到主节点(在DRBD中引入裂脑),直到重新连接集群通信并意识到他们有两个主人,将一个人降级为中学。同样,fencing / STONITH会阻止/处理它。
3)您可以在DRBD配置中设置裂脑通知处理程序。
在Pacemaker中设置STONITH / fencing设备后,您可以将以下定义添加到DRBD配置中,以“修复”您在问题中提到的所有问题:
resource <resource>
handlers {
split-brain "/usr/lib/drbd/notify-split-brain.sh root";
fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
after-resync-target "/usr/lib/drbd/crm-unfence-peer.sh";
...
}
disk {
fencing resource-and-stonith;
...
}
...
}
在Pacemaker中设置fencing / STONITH对我的硬件/软件有点过于依赖,因为我可以为您提供有关为群集设置的建议。这应该让你指向正确的方向: http://clusterlabs.org/doc/crm_fencing.html
希望有所帮助!