开发者社区> 科技小先锋> 正文

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,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
28117 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
15601 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
20184 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
14871 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
22248 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23538 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
36367 0
6965
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载