脚本解决drbd脑裂问题

5.模拟心跳down机实验以及恢复

5.1 在目前主机上面建立crontab任务

问题:drbd脑裂问题,当心跳线断掉的时候,两个节点同时可以对外提供服务,通过corosync管理服务机制出现问题,双方都对外提供服务,会导致最终数据产生不一致。
按照上面实验filer01作为主机对外提供服务,在filer01上面添加crontab任务,当检测到自己网卡down掉,或者是心跳线出现问题,在验证属于自己问题后,将集群服务停掉,自动退出集群节点。

[root@filer01 ~]# cat drbd.sh

#!/bin/bash

#env > /root/bbb

/sbin/ifconfig | grepeth1

if [ $? = 0 ]

then

 echo " $(date +%F/%H:%M) : eth1 OK"

else

 echo "$(date +%F/%H:%M): eth1 down ,stop service" >> /root/fail.txt

 pkill corosync

fi

ping -c1192.168.11.223 &> /dev/null

if [ $? = 0 ]

then

 echo " $(date +%F/%H:%M) : ping OK"

else

 ping -c1 192.168.11.1 &> /dev/null

 if [ $? = 0 ]

 then

      echo "$(date +%F/%H:%M) : ping 11.1OK 223 failed" >> /root/alter.txt

 else

     echo"$(date +%F/%H:%M): ping failed , stop service " >> /root/fail.txt

     pkillcorosync

 fi

fi

添加到crontab,时时检测问题。

[root@filer01 ~]#crontab -l

* * * * * sh/root/drbd.sh &


5.2 进行filer01 down机实验


在filer01上面down掉网卡,通过检测到网卡down之后。
[root@filer01 ~]#ifdown eth1
Filer01会自动关闭corosync服务,脱离集群,这个时候通过
https://192.168.10.248:446
查看openfiler时正常对外提供服务的,一直ping 虚拟IP(192.168.10.248)也查看到没有超时的状况,符合我们本来的需求。
当filer01恢复的时候,需要重新添加到集群里面。
以下操作需要在filer01上面执行:
首先设置filer01作为备机出现
[root@filer01 ~]# drbdadm secondary all(在drbd.conf中设置的名称,可以用all)
[root@filer01 ~]# drbdadm disconnect all   (备机断掉可以用all)
[root@filer01 ~]# drbdadm ----discard-my-data connect all  (同步数据连接上)
现在查看drbd的状态会发现时 diskless/uptodate 解决diskless需要运行下面命令
[root@filer01 ~]#   drbdadmattach all (解决diskless问题)
[root@filer01 ~]# drbdadm invalidate all(从头重新同步数据,这个持续时间会很长)
通过以上恢复步骤,filer01会重新添加进来,然后记住手动启动起来corosync服务

然后主备的身份完成切换了,如果需要更换回到filer01,需要手动将filer02的网卡down掉按照上述过程重新切换回去即可。


你可能感兴趣的:(脑裂,drbd,corosync,diskless)