首页 > 代码库 > 通过heartbeat配置lustre元数据服务器mds高可用

通过heartbeat配置lustre元数据服务器mds高可用

本次试验环境

OS:5台RHEL6.4  x86_64 最小化安装


图1为本次试验示意图 


其中上图DRBD为添加的5g硬盘,用来DRBD同步数据使用

oss1也添加一块5g的硬盘作为ost使用

MDS采用active-standby模式,示意图如下所示



所有节点的hosts文件如下


[root@mds1~]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4localhost4.localdomain4

::1         localhost localhost.localdomainlocalhost6 localhost6.localdomain6

 

# Public Entries

192.168.78.12   mds1

192.168.78.13   mds2

192.168.78.14   oss1

 

# LnetEntries

172.16.1.254    mds1-eth1

172.16.1.253    mds2-eth1

172.16.1.252    oss1-eth1

 

#HeartBeat Entries

10.1.1.1        mds1-eth2

10.1.1.2        mds2-eth2

 

# DRBD Entries

192.168.10.1    mds1-eth3

192.168.10.2    mds2-eth3


软件版本

lustre-2.4.3

heartbeat-3.0.4

drbd-8.4.4.tar.gz

 

一:首先在所有节点上安装lustre        

1.首先配置好本地yum源

下载好的lustre包如下所示


[root@mds1 lustre-2.4.3]# ls

e2fsprogs-1.42.9.wc1-7.el6.x86_64.rpm

e2fsprogs-libs-1.42.9.wc1-7.el6.x86_64.rpm

e2fsprogs-static-1.42.9.wc1-7.el6.x86_64.rpm

kernel-2.6.32-358.23.2.el6_lustre.x86_64.rpm

kernel-devel-2.6.32-358.23.2.el6_lustre.x86_64.rpm

kernel-firmware-2.6.32-358.23.2.el6_lustre.x86_64.rpm

kernel-headers-2.6.32-358.23.2.el6_lustre.x86_64.rpm

libcom_err-1.42.9.wc1-7.el6.x86_64.rpm

libss-1.42.9.wc1-7.el6.x86_64.rpm

lustre-2.4.3-2.6.32_358.23.2.el6_lustre.x86_64.x86_64.rpm

lustre-iokit-1.4.0-1.noarch.rpm

lustre-ldiskfs-4.1.0-2.6.32_358.23.2.el6_lustre.x86_64.x86_64.rpm

lustre-modules-2.4.3-2.6.32_358.23.2.el6_lustre.x86_64.x86_64.rpm

lustre-osd-ldiskfs-2.4.3-2.6.32_358.23.2.el6_lustre.x86_64.x86_64.rpm

lustre-source-2.4.3-2.6.32_358.23.2.el6_lustre.x86_64.x86_64.rpm

lustre-tests-2.4.3-2.6.32_358.23.2.el6_lustre.x86_64.x86_64.rpm

perf-2.6.32-358.23.2.el6_lustre.x86_64.rpm

python-perf-2.6.32-358.23.2.el6_lustre.x86_64.rpm

[root@mds1 lustre-2.4.3]#


开始安装lustre

[root@mds1 lustre-2.4.3]# yum -y --nogpgcheck install *.rpm && reboot

查看是否安装成功

uname -r

2.6.32-358.23.2.el6_lustre.x86_64


可看到内核已经更改,可知安装成功

2.配置LNET

本实验用eth1作为lnet

cd  /etc/modprobe.d

touch  lnet.conf

cat lnet.conf

options lnet networks=tcp0(eth1)

检查一下lnet配置是否正确



有上图可知,配置正确

3.在mds1,mds2上安装drbd

yum -y install flex kernel-devel libxslt

tar xzvfdrbd-8.4.4.tar.gz -C /usr/local/src

cd drbd-8.3.11

./configure--prefix=/usr \

--localstatedir=/var \

--sysconfdir=/etc \

--with-km

make

make install

测试drbd是否安装成功



如上图所示可知drbd安装成功

4.配置drbd

cd /etc/drbd.d/

vi  global_common.conf

把usage-count yes改为usage-count no;(不是必须)

在net {}里添加protocol C;


[root@mds1 drbd.d]# touch r0.res

[root@mds1 drbd.d]# cat r0.res

resource r0 {

        meta-disk       internal;

        device  /dev/drbd0;

        disk    /dev/sdb;

        on      mds1 {

                     address    192.168.10.1:7898;         //这里要直接使用IP地址

                     }

        on      mds2 {

                     address    192.168.10.2:7898;

                     }

}

[root@mds1 drbd.d]#


在启动drbd之前,需要分别在mds1和mds2上创建drbd元数据块



启动DRBD



chkconfig drbd on

目前状态为secondary/secondary,还未进行同步,使用下面命令进行同步




 

有上图ds:UoToDate/UpToDate可知同步完成

 

首先在mds1上(因为此时mds1为primay)创建lustre文件系统

mkfs.lustre --fsname=lustre \

--mgs \

--mdt \

--failnode=mds2-eth1 \

--index=0  /dev/drbd0



把drbd主备状态恢复

drbdadm secondaryall

在mds1,mds2上创建目录/mdt

5.在mds1,mds2上安装heartbeat

本次实验我图省事用yum安装heartbeat(实际生产环境中建议自己编译heartbeat)

yum  -y  install heartbeat*

 

二:配置mds的高可用(active-standby模式)

在mds1节点上

cp/usr/share/doc/heartbeat-3.0.4/ha.cf /etc/ha.d/

cp/usr/share/doc/heartbeat-3.0.4/authkeys /etc/ha.d/

cp /usr/share/doc/heartbeat-3.0.4/haresources/etc/ha.d/



[root@mds1 ~]# grep -v "^#" /etc/ha.d/authkeys |grep ^[^$]

auth 1

1 crc

[root@mds1 ~]# ls -l /etc/ha.d/authkeys

-rw------- 1 root root 643 Oct 24 09:05 /etc/ha.d/authkeys

[root@mds1 ~]#

 

[root@mds1 ~]# grep -v "^#" /etc/ha.d/ha.cf |grep ^[^$]

debugfile /var/log/ha-debug

logfile /var/log/ha-log

logfacility     local0

keepalive 1

deadtime 15

warntime 5

initdead 60

udpport 694

ucast eth2 10.1.1.2                     //采用单播模式,在mds2上IP要改成对方的IP即10.1.1.1

auto_failback off

node    mds1

node    mds2

ping 192.168.78.2

respawn hacluster /usr/lib64/heartbeat/ipfail

apiauth ipfail gid=haclient uid=hacluster

[root@mds1 ~]#

 

[root@mds1 ~]# grep -v "^#" /etc/ha.d/haresources |grep^[^$]

mds1 drbddisk::r0 Filesystem::/dev/drbd0::/mdt::lustre

[root@mds1 ~]#


复制authkeys,ha.cf,haresources到mds2上

scp/etc/ha.d/ha.cf mds2:/etc/ha.d/

scp/ec/ha.d/authkeys mds2:/etc/ha.d/

scp/etc/ha.d/haresources mds2:/etc/ha.d/

分别在两台机器上启动heartbeat

/etc/init.d/heartbeatstart ; chkconfig heartbeat on



有上图后台日志可知,heartbeat启动成功,资源启动成功



由上图可知,lustre挂载成功

现在测试一下能否自动切换

第一种情况:mds1正常重启

在mds2上tail -f /var/log/messages &观察后台日志

正常重启是可以正常切换的



第二种情况:不正常关机(把mds2断电)

因为现在已经切换到mds2上了,所以这次在mds1上观察日志


drbd首先发现mds2 dead如上图所示



mds1又重新开始接管资源(上图)



此时的mds2的drbd状态为unkonwn

把mds2插电开机


mds2开机后drbd又开始同步,这是因为mds2为非正常关机,为了保持数据的一致性,所以又开始重新同步

 

三:配置oss

1.在oss1上创建lustre文件系统

mkfs.lustre--fsname=lustre \

--mgsnode=mds1-eth1@tcp0\

--mgsnode=mds2-eth1@tcp0\

--index=0 \

--ost /dev/sdb



创建/ost目录mkdir /ost1

vi /etc/fstab添加

/dev/sdb  /ost1 lustre   defaults,_netdev 0 0

挂载ost1分区mount /ost1 -v




在mds1上查看是否可以看到刚才的ost



有上图可看到刚才的ost并且为activate状态

四:客户端挂载

创建挂载目录/lustre

mkdir /lustre

挂载lustre



在/etc/fstab中添加挂载选项

mds1-eth1@tcp0:mds2-eth1@tcp0:/lustre  /ost lustre  defaults,_netdev 0 0

五:测试mds高可用是否正常

1.在客户端/lustre目录下创建一个测试目录和几个测试文件

mkdir /lustre/abcd

touch/lustre/sortware

目前mds服务运行在mds1上,现在把mds1关机,看是否还是可以继续往/lustre目录里写文件



由上图可知客户端发现连接到172.16.1.254@tcp0丢失,此时ll命令会卡住2到3秒钟后,目录abcd,文件software又再次出现,当然现在也可以往里写新文件



由上图hpc1日志可知连接被恢复连接到了mds2

 

至此lustre—mds高可用配置成功完成


本文出自 “永不止步” 博客,谢绝转载!

通过heartbeat配置lustre元数据服务器mds高可用