DRBD资源无法自动恢复联机——Pacemaker+Corosync环境求助
解决DRBD断网后无法自动重连的Pacemaker方案
没问题,完全可以通过Pacemaker来自动执行drbdadm connect r0操作,甚至能配置成网络恢复后自动触发,不用你手动敲命令。先给你理清楚思路和具体步骤:
为什么DRBD不会自动重连?
当节点网卡断开时,DRBD进入Standalone模式是默认的安全机制——防止出现脑裂(两个节点都认为自己是主节点,数据冲突)。所以DRBD不会主动尝试重连,需要集群管理器(比如Pacemaker)来确认网络恢复、节点状态正常后,再触发重连操作。
方法1:利用DRBD OCF资源代理的内置能力
DRBD的官方OCF资源代理(ocf:linbit:drbd)本身支持通过Pacemaker的监控和修复机制来触发重连。你可以通过调整资源的监控操作和故障处理策略来实现:
先查看当前DRBD资源的配置:
pcs resource show drbd_r0添加或修改监控操作,让Pacemaker定期检查DRBD状态,发现异常时触发重连:
pcs resource op add drbd_r0 monitor interval=10s timeout=20s on-fail=restart这里的
on-fail=restart表示当监控发现DRBD状态异常时,Pacemaker会重启DRBD资源——而重启过程中,资源代理会自动执行drbdadm connect r0操作。可选:添加
failure-timeout元参数,避免Pacemaker反复重启资源:pcs resource meta drbd_r0 failure-timeout=60s
方法2:自定义脚本+Pacemaker Alert触发重连
如果需要更精细的控制(比如只在Standalone状态下触发重连),可以写一个自定义脚本,让Pacemaker在网络恢复或DRBD状态异常时调用它:
- 创建重连脚本
/usr/local/bin/drbd_reconnect.sh,内容如下:#!/bin/bash DRBD_RES="r0" # 获取DRBD当前状态 CURRENT_STATE=$(drbdadm status $DRBD_RES | grep -m1 -oP '^\w+' | tr '[:upper:]' '[:lower:]') if [ "$CURRENT_STATE" = "standalone" ]; then # 尝试连接DRBD资源 drbdadm connect $DRBD_RES # 记录日志 logger "Pacemaker triggered DRBD reconnect for resource $DRBD_RES" fi - 给脚本添加执行权限,并同步到两台节点:
chmod +x /usr/local/bin/drbd_reconnect.sh scp /usr/local/bin/drbd_reconnect.sh node2:/usr/local/bin/ - 在Pacemaker中添加Alert,让它在DRBD资源状态变化时触发脚本:
这样,当Pacemaker检测到pcs alert create drbd_reconnect_alert /usr/local/bin/drbd_reconnect.sh \ description "Trigger DRBD reconnect when in Standalone state" \ recipient-type=resource resource=drbd_r0drbd_r0资源状态异常时,就会调用这个脚本执行重连操作。
测试验证
- 断开其中一台节点的网卡,确认DRBD进入
Standalone模式; - 重新连接网卡,等待10-20秒(对应监控间隔);
- 用
drbdadm status r0查看状态,应该会回到Connected或WFConnection模式。
注意事项
- 确保两台节点的Pacemaker权限足够执行
drbdadm命令(一般root权限没问题); - 如果你配置了DRBD的主从模式,要确保Pacemaker先切换主节点状态,再执行重连,避免数据冲突;
- 建议先在测试环境验证脚本和配置,再部署到生产环境。
内容的提问来源于stack exchange,提问作者bakasan
相关产品推荐
相关产品推荐

