标签归档:drbd

一次Drbd同步故障定位过程

实验室有两台Dell R710做Redhat Cluster。一次电源改造升级,重启机器以后导致IP地址混乱(在启动脚本中重复添加了IP地址),使服务异常。在恢复服务的过程中先后启动了几次服务器,最后发现drbd不同步了,故事的悲剧开始上演了。好在最后发现是双网卡配置同网段的IP地址,且都连接到同一个交换机上,导致的drbd同步失败。

起初根据经验,如果Cluster出现故障,通常情况下重启一下机器就可以解决,但是反复倒腾了几个小时都没有搞定,包括直接强制重建md和重建逻辑卷。初始安装时,drbd安装成功,数据同步也成功. 重启其中一台机器后,发现drbd还是可以同步,但是被我倒腾了一番后就没有同步了,大体情况如下:

[root@AS-1 conf]# drbd-overview.pl 
  1:ompm       WFBitMapS      Secondary/Secondary UpToDate/Inconsistent C r— 
  2:omgm       WFBitMapS      Secondary/Secondary UpToDate/Inconsistent C r— 
  3:omem       NetworkFailure Secondary/Unknown   UpToDate/Inconsistent C r— 
  4:omrm       WFBitMapS      Secondary/Secondary UpToDate/Inconsistent C r— 
  5:ombm       WFConnection   Secondary/Unknown   UpToDate/Outdated     C r— 
 
机器配置:
AS-1:
    eth0: 192.168.1.100
    eth1: 192.168.1.110
    gw 192.168.1.1 eth0
AS-2:
    eth0: 192.168.1.101
    eth1: 192.168.1.111
    gw 192.168.1.1 eth0
 
drbd.conf 配置情况(只是表面管理的逻辑卷):
    drbd1:ompm  /dev/VolGroup00/lvompm
    drbd2:omgm  /dev/VolGroup00/lvomgm
    drbd3:omem  /dev/VolGroup00/lvomem
    drbd4:omrm  /dev/VolGroup00/lvomrm
    drbd5:ombm  /dev/VolGroup00/lvombm
    心跳线使用的是 eth1
 
将drbd 所有的resource都重新创建一遍,问题依旧。不过有的时候个别resource在同步,且同步非常慢,个别resource又StandAlone,总之状态多种多样,就是没有全部SyncSource的。正常情况下,启动drbd后,应该是所有resource都在进行SyncSource才对。看到居然出现“NetworkFailure”,其他办法都解决不了,那么就只好把问题锁定在它上面了。可能是eth0和eth1都处于同一个网段,切心跳线在eth1上,而不在eth0上,导致数据路由出现故障。
于是将心跳IP地址设置为eth0的地址,重新做一遍,问题依然没有解决。只要把eth1给停止掉了。
[root@AS-1 conf]# ifdown eth1
 
开始重建resource.
1. 备份Primary主机上的磁盘数据,或者你知道的最新的数据所在主机上执行备份
[root@AS-1 conf]# drbdadm primary ompm
[root@AS-1 conf]# drbdadm primary omgm
[root@AS-1 conf]# drbdadm primary omem
[root@AS-1 conf]# drbdadm primary omrm
[root@AS-1 conf]# drbdadm primary ombm
[root@AS-1 conf]# mount /dev/drbd1 /var/pm
[root@AS-1 conf]# mount /dev/drbd2 /var/gm
[root@AS-1 conf]# mount /dev/drbd3 /var/em
[root@AS-1 conf]# mount /dev/drbd4 /var/rm
[root@AS-1 conf]# mount /dev/drbd5 /var/bm
[root@AS-1 conf]# cp -r /var/pm /var/gm /var/em /var/rm /var/bm /root/temp
[root@AS-1 conf]# umount /var/pm
[root@AS-1 conf]# umount /var/gm
[root@AS-1 conf]# umount /var/em
[root@AS-1 conf]# umount /var/rm
[root@AS-1 conf]# umount /var/bm
[root@AS-1 conf]# 
 
2. 在所有主机上执行
[root@AS-1 conf]# service drbd stop
[root@AS-1 conf]# lvremove -f /dev/VolGroup00/lvompm
[root@AS-1 conf]# lvremove -f /dev/VolGroup00/lvomgm
[root@AS-1 conf]# lvremove -f /dev/VolGroup00/lvomem
[root@AS-1 conf]# lvremove -f /dev/VolGroup00/lvomrm
[root@AS-1 conf]# lvremove -f /dev/VolGroup00/lvombm
[root@AS-1 conf]# lvcreate -L 512M -n lvompm VolGroup00
[root@AS-1 conf]# lvcreate -L 2G -n lvomgm VolGroup00
[root@AS-1 conf]# lvcreate -L 2G -n lvomem VolGroup00
[root@AS-1 conf]# lvcreate -L 2G -n lvomrm VolGroup00
[root@AS-1 conf]# lvcreate -L 2G -n lvombm VolGroup00
[root@AS-1 conf]# drbdadm — –force create-md ompm
[root@AS-1 conf]# drbdadm — –force create-md omgm
[root@AS-1 conf]# drbdadm — –force create-md omem
[root@AS-1 conf]# drbdadm — –force create-md omrm
[root@AS-1 conf]# drbdadm — –force create-md ombm
[root@AS-1 conf]# service drbd start
 
3. 在Primary主机上执行
[root@AS-1 conf]# drbdsetup /dev/drbd1 primary -o
[root@AS-1 conf]# drbdsetup /dev/drbd2 primary -o
[root@AS-1 conf]# drbdsetup /dev/drbd3 primary -o
[root@AS-1 conf]# drbdsetup /dev/drbd4 primary -o
[root@AS-1 conf]# drbdsetup /dev/drbd5 primary -o
[root@AS-1 conf]# drbd-overview.pl 
  1:ompm       SyncSource Primary/Secondary UpToDate/Inconsistent C r— 
  2:omgm       SyncSource Primary/Secondary UpToDate/Inconsistent C r— 
  3:omem       SyncSource Primary/Secondary UpToDate/Inconsistent C r— 
  4:omrm       SyncSource Primary/Secondary UpToDate/Inconsistent C r— 
  5:ombm       SyncSource Primary/Secondary UpToDate/Inconsistent C r— 
看到所有resource都处于SyncSource状态,问题终于解决了。
 
4. 等到所有状态都显示Connected 以后,就可以格式磁盘,恢复数据了。
[root@AS-1 conf]# mkfs.ext3 -j /dev/drbd1
[root@AS-1 conf]# mkfs.ext3 -j /dev/drbd2
[root@AS-1 conf]# mkfs.ext3 -j /dev/drbd3
[root@AS-1 conf]# mkfs.ext3 -j /dev/drbd4
[root@AS-1 conf]# mkfs.ext3 -j /dev/drbd5
[root@AS-1 conf]# cp -r /root/temp/* /var
 
如果文件归属的用户不是root,还需要修改文件属主
[root@AS-1 conf]# chown ldap:ldap /var/pm
 
至此,数据得以恢复同步和还原了。
 
这里主要是因为网络配置的问题,导致的drbd无法同步。当然,如果只是遇到脑裂(split brain),可以不这么费事,可以参考如下方式解决。(参考:http://www.chineselinuxuniversity.net/articles/18270.shtml)

首先确定哪一边应该作为解决问题后的primary,通常选用数据最新的一方:
 
1. 在将作为secondary的节点上执行:
[root@AS-1 conf]# drbdadm secondary Resource_name
[root@AS-1 conf]# drbdadm — –discard-my-data connect Resource_name
 
2. 在将作为primary的节点上执行(如果这个节点当前的连接状态为WFConnection的话,则不用执行)
[root@AS-1 conf]# drbdadm connect Resource_name
 
通常情况下这样的操作完成以后,drbd会自动开始同步。查看方法:
[root@AS-1 conf]# cat /pro/drbd