lustre1.6.5+drbd主备切换

简介:
前些日子把lustre安装完毕了,考虑到了如果一个节点死了怎么办?所以就想到了主辅切换,开始就想到了两个工具,第一个就是iscsitarget网络共享磁盘,第二个就是drbd,因为出于对drbd熟悉一点,就先测试drbd,中途遇到不少问题,慢慢的一一解决了!这次测试我开了不5台虚拟机,为了完全模拟生产环境。如你测试可以相应的少开虚拟机。

mds   :192.168.6.20
mds1  :192.168.6.21
ost   :192.168.6.22
ost1  :192.168.6.23
client:192.168.6.24

mds mds1 ost ost2  每台机器都有  1G 的 sdb硬盘 用于测试!
需要 安装软件 drbd-8.3.0  hearbeat-2.30   

1.首先在每台机器上编译内核安装lustre 如有不会的请看我上篇写的文章lustre 安装:  [url]http://deidara.blog.51cto.com/400447/125071[/url] 因为我出于方便就把 两个deb包考过来安装,在每台机器上安装!

2.在mds mds1 上编译安装drbd 
shell $> tar zxvf drbd-8.3.0.tar.gz
shell $> cd drbd-8.3.0
shell $> make clean
shell $> make KDIR=/usr/src/linux-2.6.22 (注意这个地方必须是你编译lustre的内核,如果不是,你从网上下载 linux-2.6.22内核,然后打上lustre补丁,make modules后才能正常编译 drbd不然会报错!)
shell $> groupadd haclient    建立组不然会提示警告
shell $> chgrp haclient /sbin/drbdsetup
shell $> chmod o-x /sbin/drbdsetup
shell $> chmod u+s /sbin/drbdsetup
安装drbd 如果有问题,可以看我的blog :
[url]http://deidara.blog.51cto.com/400447/105875[/url]

3.配置mds mds1 上的 drbd.conf
查找 after "r2";
注释掉这一行,因为我们 只需要 r0
修改默认的  . amd {
    device     /dev/drbd0;
    disk       /dev/hde5;
    address    192.168.22.11:7788;
    flexible-meta-disk  internal;

 on alf {
    device    /dev/drbd0;
    disk      /dev/hdc5;
    address   192.168.22.12:7788;
    meta-disk internal;
  }
}

改为

on mds {
    device     /dev/drbd0;
    disk       /dev/sdb;
    address    192.168.6.20:7788;
    flexible-meta-disk  internal;

  . mds1 {
    device    /dev/drbd0;
    disk      /dev/sdb;
    address   192.168.6.21:7788;
    meta-disk internal;
  }
}
最后,把 后边的 全部注释掉或者删掉! mds与mds1配置一样!

5,调试drbd 手动切换 drbd 主辅
在mds与mds1上 执行
mds  $> drbdadm create-md r0   #“r0”是我们在drbd.conf里定义的,初始化
mds1 $> drbdadm create-md r0
mds  $> /etc/init.d/drbd start
mds1 $> /etc/init.d/drbd start
mds  $> cat /proc/drbd


显示了drbd当前的状态.第一行的st表示两台主机的状态,都是”备机”状态.
ds是磁盘状态,都是”不一致”状态. 
mds $> drbdsetup /dev/drbd0 primary -o
mds $> cat /proc/drbd
就可以看到主备机状态分别是”主/备”,主机磁盘状态是”实时”,备机状态是”不一致”.且数据开始同步
稍等一会,在数据同步完后,再查看一下drbd1的DRBD状态
mds $>cat /proc/drbd

好了,磁盘状态都是”实时”,表示数据同步完成了.
你现在可以把主机上的DRBD设备挂载到一个目录上进行使用.备机的DRBD设备无法被挂载,因为它是
用来接收主机数据的,由DRBD负责操作.
在mds 执行
mds $> mkfs.lustre --reformat --fsname=testfs --mdt --mgs --failnode=mds1 /dev/drbd0
### 创建 lustre文件系统 reformat 参数是格式化,fsname 文件名字 --failnode参数是  lustre failover 功能~
mds $> mount -t lustre /dev/drbd0 /opt  (挂载到/opt 目录)
DRBD的主备机切换有时,你需要将DRBD的主备机互换一下.可以执行下面的操作: 
在主机上,先要卸载掉DRBD设备
mds $> umount /opt
将主机降级为”备机”
mds $> drbdadm secondary r0
mds $> cat /proc/drbd
version: 8.3.0 (api:88/proto:86-89)
GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by root@mds, 2009-01-14 02:05:53
 0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r---
    ns:132 nr:20480 dw:20612 dr:270 al:5 bm:15 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
已经降到了备机
在mds1上执行
mds1 $> drbdadm primary r0
mds1 即为升为 主!

6,在mds 和 mds1 安装使用 hearbeat,让drbd 手动切换为自动切换,hearbeat我出于升力气,就apt-get 安装了,大家可以使用源码包安装
shell $> apt-get install hearbeat
shell $> cd /usr/share/doc/heartbeat
shell $> gunzip ha.cf.gz
shell $> gunzip haresources.gz
shell $> mv ha.cf haresouroes authkeys /etc/ha.d/
shell $> chmod 600 authkeys
shell $> vim authkeys
auth 1
1 crc
把这两行注释去掉
shell $> vim ha.cf
debugfile /var/log/ha-debug
logfile    /var/log/ha-log
logfacility    local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport    694
auto_failback off
node    mds
node    mds1
ping 192.168.6.1
respawn hacluster /usr/lib/heartbeat/ipfail
shell $> vim haresouroes
mds 192.168.6.25 drbddisk::r0 Filesystem::/dev/drbd0::/opt::lustre

7.最后的调试,于查看日志!
mds  $> /etc/init.d/hearbeat start
mds  $> tailf /var/log/messges


mds1 $> /etcinit.d/hearbeat start
mds  $> tailf /var/log/messages
Jan 15 21:40:11 mds kernel: [ 4000.216541] Lustre: MGS MGS started
Jan 15 21:40:11 mds kernel: [ 4000.240713] Lustre: Enabling user_xattr
Jan 15 21:40:11 mds kernel: [ 4000.242264] Lustre: 8634:0:(mds_fs.c:460:mds_init_server_data()) RECOVERY: service testfs-MDT0000, 1 recoverable clients, last_transno 57
Jan 15 21:40:11 mds kernel: [ 4000.268658] Lustre: MDT testfs-MDT0000 now serving dev (testfs-MDT0000/130da46d-1bef-9e79-4da2-a0e5005f60ab), but will be in recovery for at least 5:00, or until 1 client reconnect. During this time new clients will not be allowed to connect. Recovery progress can be monitored by watching /proc/fs/lustre/mds/testfs-MDT0000/recovery_status.
Jan 15 21:40:11 mds kernel: [ 4000.268691] Lustre: 8634:0:(lproc_mds.c:262:lprocfs_wr_group_upcall()) testfs-MDT0000: group upcall set to /usr/sbin/l_getgroups
Jan 15 21:40:11 mds kernel: [ 4000.268709] Lustre: testfs-MDT0000.mdt: set parameter group_upcall=/usr/sbin/l_getgroups
Jan 15 21:40:11 mds kernel: [ 4000.269073] Lustre: 8634:0:(mds_lov.c:1008:mds_notify()) MDS testfs-MDT0000: in recovery, not resetting orphans . testfs-OST0000_UUID
Jan 15 21:40:11 mds kernel: [ 4000.269079] Lustre: 8634:0:(mds_lov.c:1008:mds_notify()) Skipped 1 previous similar message
Jan 15 21:40:11 mds kernel: [ 4000.287049] Lustre: Server testfs-MDT0000 . device /dev/drbd0 has started
Jan 15 21:40:11 mds Filesystem[8579]: INFO:  Success
我们可以看到很多信息,看到最后一行,已经 Success文件系统已经被挂载,
mds $> cat /proc/drbd
version: 8.3.0 (api:88/proto:86-89)
GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by root@mds, 2009-01-14 00:39:29
 0: cs:WFConnection ro:Primary/Secondary ds:UpToDate/UpToDate C r---
    ns:20596 nr:660 dw:788 dr:20750 al:5 bm:10 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:12
然后我们把mds关机~在mds1一直执行这 tailf /var/log/message查看日志
mds $> shutdown -h now
mds1 $> tailf /var/log/message
Jan 15 22:00:56 mds1 kernel: [ 5250.672618] drbd0: role( Secondary -> Primary ) 
Jan 15 22:00:56 mds1 Filesystem[5920]: INFO:  Resource is stopped
Jan 15 22:00:56 mds1 ResourceManager[5665]: info: Running /etc/ha.d/resource.d/Filesystem /dev/drbd0 /opt lustre start
Jan 15 22:00:56 mds1 Filesystem[5996]: INFO: Running start for /dev/drbd0 . /opt
Jan 15 22:00:57 mds1 kernel: [ 5251.766369] kjournald starting.  Commit interval 5 seconds
Jan 15 22:00:57 mds1 kernel: [ 5251.768068] LDISKFS-fs warning: maximal mount count reached, running e2fsck is recommended
Jan 15 22:00:57 mds1 kernel: [ 5251.771802] LDISKFS FS . drbd0, internal journal
Jan 15 22:00:57 mds1 kernel: [ 5251.771944] LDISKFS-fs: recovery complete.
Jan 15 22:00:57 mds1 kernel: [ 5251.776258] LDISKFS-fs: mounted filesystem with ordered data mode.
Jan 15 22:00:57 mds1 kernel: [ 5251.894315] kjournald starting.  Commit interval 5 seconds
Jan 15 22:00:57 mds1 kernel: [ 5251.899051] LDISKFS-fs warning: maximal mount count reached, running e2fsck is recommended
Jan 15 22:00:57 mds1 kernel: [ 5251.903082] LDISKFS FS . drbd0, internal journal
Jan 15 22:00:57 mds1 kernel: [ 5251.903095] LDISKFS-fs: mounted filesystem with ordered data mode.
Jan 15 22:00:57 mds1 kernel: [ 5252.158408] Lustre: MGS MGS started
可以看到 mds1  已经接管了,执行命令看一下~
mds1 $> cat /proc/drbd 
version: 8.3.0 (api:88/proto:86-89)
GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by root@mds1, 2009-01-14 00:39:29
 0: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r---
    ns:20596 nr:660 dw:788 dr:20750 al:5 bm:10 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:12
mds1 $> mount
root@mds1:~# mount
/dev/sda1 . / type ext3 (rw,relatime,errors=remount-ro)
tmpfs . /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
/proc . /proc type proc (rw,noexec,nosuid,nodev)
sysfs . /sys type sysfs (rw,noexec,nosuid,nodev)
varrun . /var/run type tmpfs (rw,nosuid,mode=0755)
varlock . /var/lock type tmpfs (rw,noexec,nosuid,nodev,mode=1777)
udev . /dev type tmpfs (rw,mode=0755)
tmpfs . /dev/shm type tmpfs (rw,nosuid,nodev)
devpts . /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
fusectl . /sys/fs/fuse/connections type fusectl (rw)
securityfs . /sys/kernel/security type securityfs (rw)
/dev/drbd0 . /opt type lustre (rw)     ---已经挂载上了

好了我们现在 把mds开机
开机后 
mds  $> cat /proc/drbd
version: 8.3.0 (api:88/proto:86-89)
GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by root@mds, 2009-01-14 02:05:53
 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r---
    ns:0 nr:12 dw:12 dr:0 al:0 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
好已经变为辅机了,

8,开机 启动
ln -s /etc/init.d/drbd /etc/rc2.d/S60drbd
ln -s /etc/init.d/drbd /etc/rc3.d/S60drbd
ln -s /etc/init.d/drbd /etc/rc4.d/S60drbd
ln -s /etc/init.d/drbd /etc/rc5.d/S60drbd

9,配置 ost ost1
shell $>mkfs.lustre --reformat --fsname=testfs --ost --mgsnode=mds@tcp0 --mgsnode=mds1@tcp0 /dev/sdb
## --mgsnode=mds@tcp0 --mgsnode=mds1@tcp0 意思是有一台正常就不会影响使用~
shell $> mount -t lustre /dev/sdb /opt

10,配置 client 
shell $> mount -t lustre mds@tcp0:mds1@tcp0:/testfs /opt
shell $> cd /opt
shell $> touch test
shell $> ls
test
shell $> dd if=/dev/zero of=test1 bs=1024 count=40000
执行后 在ost 与 ost1 上执行 df -lh 查看结果
ost  $> df -lh
/dev/sdb             1008M   34M  924M   4% /opt
ost1 $> df -lh
/dev/sdb             1008M   73M  885M   8% /opt

我们可以清楚看到 40M 的数据写到了  ost1上
再在 client 上执行 
client $> dd if=/dev/zero of=test2 bs=1024 count=40000
再去  两台 ost 上查看 结果数据写到了 ost  上

11,在线切换,看 ost 与 client 是否能正常工作~,因为刚刚做过切换测试,现在的 主机是 mds1,那么我就把 mds1关机,看mds接管后,是否正常~
mds1 $> shutdown -h now

ost  $> taif /var/log/message 在一台OST 上查看日志
Jan 15 22:24:33 ost kernel: [ 1424.924073] Lustre: Request x49 sent from MGC192.168.6.20@tcp to NID 192.168.6.21@tcp 100s ago has timed out (limit 100s).
Jan 15 22:26:13 ost kernel: [ 1524.787044] Lustre: Request x54 sent from MGC192.168.6.20@tcp to NID 192.168.6.21@tcp 100s ago has timed out (limit 100s).
Jan 15 22:26:13 ost kernel: [ 1524.787135] Lustre: Changing connection for MGC192.168.6.20@tcp to MGC192.168.6.20@tcp_0/192.168.6.20@tcp
Jan 15 22:26:13 ost kernel: [ 1524.802552] Lustre: 3501:0:(import.c:700:ptlrpc_connect_interpret()) MGS@MGC192.168.6.20@tcp_0 changed server handle from 0xcb3cb29f8eba6fc0 to 0x441e063eb5523617 - evicting.
Jan 15 22:26:13 ost kernel: [ 1524.803661] Lustre: MGC192.168.6.20@tcp: Reactivating import
Jan 15 22:26:13 ost kernel: [ 1524.803673] Lustre: MGC192.168.6.20@tcp: Connection restored to service MGS using nid 192.168.6.20@tcp

这里会有一段时间的,好服务已经切换到 mds上了 我们去 client去看一下。

client $> ls
test  test1  test2 
三个文件没有我呢题~

好了 热切换已经OK了,注意的是切换的时候会有一段时间不能读写是正常的!

注意了,测试的时候不要在虚拟机禁用网卡,因为你禁用网卡 eth0:0 这个虚拟IP并没有卸载掉,所以你在 开启网卡的时候会导致  drbd 都认为自己是 主服务器,会导致 drbd_split-brain错误,如果出现这个错误,在 当前 辅机器上执行(注意是当前, cat /proc/drbd查看)
drbdadm secondary r0   (我的是r0你的是多少就多少)
drbdadm disconnect r0
drbdadm -- --discard-my-data connect r0
在当前 主机上执行
drbdadm connect r0

我之演示的是 MDS 切换,OST 切换也是如此,
不过是 mkfs.lustre 创建文件系统的时候也要加,slave机器!
--failnode=ost_slave 
只有加了 slave才会接管~~!

好了再有不理解的地方希望可以多多交流!



本文转自Deidara 51CTO博客,原文链接:http://blog.51cto.com/deidara/126714,如需转载请自行联系原作者

相关文章
|
1天前
|
存储 Linux 块存储
DRBD+Heratbeat+NFS高可用文件共享存储
DRBD+Heratbeat+NFS高可用文件共享存储
|
关系型数据库 MySQL Linux
|
存储 网络安全 Perl