DRBD+HeartBeat+NFS:配置NFS的高可用

DRBD+HeartBeat+NFS:配置NFS的高可用,第1张

DRBD+HeartBeat+NFS:配置NFS的高可用

DRBD+心跳+NFS:配置NFS的高可用性

描述:

上周,我学习了DRBD的安装和配置。今天研究DRBD的第一个应用,用DRBD+心跳+NFS:配置NFS的高可用,作为集群中的底层共享存储。

NFS主要在网络服务器上存储程序代码和一些图片文件。




引用:

http://network.51cto.com/art/201010/230237_all.htm

http://showerlee.blog.51cto.com/2047005/1212185





环境:

[root@scj ~]# cat /etc/issue CentOS release 6.4 (Final) Kernel \r on an \m [root@scj ~]# uname -r 2.6.32-358.el6.i686 DBM135 192.168.186.135 DBM135.51.com 主 DRBD+心跳+NFS DBM134 192.168.186.134 DBM134.51.com 二级 DRBD+心跳+NFS VIP 192.168.186.150






DRBD的准备和安装:

参考:http://732233048.blog.51cto.com/9323668/1665979




安装和配置heartbeat:

安装心跳:(DBM135,DBM134)

在这里,使用yum安装HeartBeat(推荐)

Centos6.4默认没有心跳包,需要安装epel源码。

[root@scj ~]# cd /usr/local/src/ [root@scj src]# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm [root@scj src]# rpm -ivh epel-release-6-8.noarch.rpm  [root@scj src]# yum -y install heartbeat Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again

注意:yum在安装时报告了一个错误。解决方案是:

[root@scj ~]#vi /etc/yum.repos.d/epel.repo #将所有baseurl行的注释去掉 #将所有mirrorlist行注释掉 [root@scj src]# yum -y install heartbeat

注意:在yum安装HeartBeat时,第一次安装总会出现问题,需要第二次安装才能成功(不知道为什么)

yum安装HeartBeat时,nfs相关的软件包会和rpcbind一起安装。


配置心跳:(DBM135,DBM134)

Heartbeat配置共涉及以下几个文件: /etc/ha.d/ha.cf          #主配置文件 /etc/ha.d/haresources    #资源文件 /etc/ha.d/authkeys       #认证相关 /etc/ha.d/resource.d/killnfsd      #nfs启动脚本,由HeartBeat管理      编辑主配置文件ha.cf [root@dbm135 ~]# vi /etc/ha.d/ha.cf (dbm135) logfile         /var/log/ha-log #定义HA的日志名及存放位置 logfacility     local0 keepalive       2 #心跳发送时间间隔为2秒 deadtime        10 #死亡时间为10秒,备用节点10秒内没有检测到主机心跳,确认对方故障 ucast           eth0 192.168.186.134 #ucast           eth1 xxx.xxx.xxx.xxx #IP地址指定为对方IP #使用内网和外网两条心跳线,确保心跳的高可用 auto_failback   off #服务器正常后由新主服务器接管资源,另一台服务器放弃该资源,因为切换一次成本很高 node           dbm135.51.com dbm134.51.com #定义节点,指定主机名 hostname [root@dbm134 ~]# vi /etc/ha.d/ha.cf (dbm134) logfile         /var/log/ha-log #定义HA的日志名及存放位置 logfacility     local0 keepalive       2 #心跳发送时间间隔为2秒 deadtime        10 #死亡时间为10秒,备用节点10秒内没有检测到主机心跳,确认对方故障 ucast           eth0 192.168.186.135 #ucast           eth1 xxx.xxx.xxx.xxx #IP地址指定为对方IP #使用内网和外网两条心跳线,确保心跳的高可用 auto_failback   off #服务器正常后由新主服务器接管资源,另一台服务器放弃该资源,因为切换一次成本很高 node           dbm135.51.com dbm134.51.com #定义节点,指定主机名 hostname

编辑认证文件authkeys:(dbm135,dbm134)

[root@scj ~]# vi /etc/ha.d/authkeys auth 1 1 crc #需要将 /etc/ha.d/authkeys设为600的权限 [root@scj ~]# chmod 600 /etc/ha.d/authkeys

编辑群集资源文件haresources:(DBM135,DBM134)

[root@scj ~]# vi /etc/ha.d/haresources dbm135.51.com IPaddr::192.168.186.150/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/data::ext4 killnfsd ##两台主机dbm135和dbm134的此文件内容一模一样,不要擅自把dbm134修改为dbm134.51.com ##主机名设置为此时的主节点(Primary)的主机名,即dbm135.51.com ##Ipaddr:绑定虚拟ip,且绑定在eth0上 ##drbddisk:指定drbd的资源r0,进行主备切换 ##Filesystem:指定drbd的设备/dev/drbd0,挂载点/data,文件系统ext4,进行drbd设备的挂载 ##killnfsd:指定nfs的启动脚本,由heartbeat管理 ##drbd在进行主备切换时,HeartBeat会执行这个资源文件里指定的这四个脚本文件,如下图

编辑nfs脚本文件killnfsd:(DBM135,DBM134)

killnfsd脚本文件的角色:

当drbd在活动和备用之间切换时,如果nfs没有启动,这个脚本将启动nfs。

当drbd在active和standby之间切换时,如果启动nfs,这个脚本会重启nfs服务,因为nfs服务切换后,NFSmount共享的目录需要重新挂载,否则会出现NFS文件句柄失效的错误。

[root@scj ~]#vi /etc/ha.d/resource.d/killnfsd killall -9 nfsd; /etc/init.d/nfs restart; exit 0 [root@scj ~]#chmod 755 /etc/ha.d/resource.d/killnfsd [root@scj ~]# cd /etc/ha.d/resource.d/ [root@scj resource.d]# ll drbddisk Filesystem killnfsd IPaddr  -rwxr-xr-x 1 root root 3162 Sep 27  2013 drbddisk -rwxr-xr-x 1 root root 1903 Dec  2  2013 Filesystem -rwxr-xr-x 1 root root 2273 Dec  2  2013 IPaddr -rwxr-xr-x 1 root root   49 Jun 30 12:02 killnfsd ##四个脚本文件都存在



配置NFS:(DBM135,DBM134)

注意:安装HeartBeat时,nfs相关软件包已作为依赖包安装。

[root@scj ~]# vi /etc/exports /data 192.168.186.0/255.255.255.0(rw,no_root_squash,sync) [root@scj ~]# chkconfig rpcbind on [root@scj ~]# chkconfig nfs off        #nfs不需要设置开机自动启动,因为nfs的启动由heartbeat管理 [root@scj ~]# /etc/init.d/rpcbind start Starting rpcbind:                                          [  OK  ] ##nfs不需要启动,会由heartbeat来启动



开始心跳:(DBM135,DBM134)

注意:首先在主节点上启动(DBM135是主节点)

[root@scj ~]# /etc/init.d/heartbeat start [root@scj ~]#chkconfig heartbeat on [root@scj ~]# ps -ef | grep heartbeat root      1854     1  0 12:33 ?        00:00:00 heartbeat: master control process root      1858  1854  0 12:33 ?        00:00:00 heartbeat: FIFO reader       root      1859  1854  0 12:33 ?        00:00:00 heartbeat: write: ucast eth0 root      1860  1854  0 12:33 ?        00:00:00 heartbeat: read: ucast eth0  root      2057  2034  0 12:33 ?        00:00:00 /bin/sh /usr/share/heartbeat/ResourceManager takegroup IPaddr::192.168.186.150/24/eth0 root      2283     1  0 12:33 ?        00:00:00 /bin/sh /usr/lib/ocf/resource.d//heartbeat/IPaddr start root      2286  2283  0 12:33 ?        00:00:00 /usr/libexec/heartbeat/send_arp -i 200 -r 5 -p /var/run/resource-agents/send_arp-192.168.186.150 eth0 192.168.186.150 auto not_used not_used root      2471  2057  0 12:33 ?        00:00:00 /bin/sh /usr/share/heartbeat/ResourceManager takegroup IPaddr::192.168.186.150/24/eth0 root      2566  1352  0 12:33 pts/1    00:00:00 grep heartbeat [root@dbm135 ~]# ps -ef | grep nfs       #查看主节点上的nfs是否启动 root      2493     2  0 17:59 ?        00:00:00 [nfsd4] root      2494     2  0 17:59 ?        00:00:00 [nfsd4_callbacks] root      2495     2  0 17:59 ?        00:00:00 [nfsd] root      2496     2  0 17:59 ?        00:00:00 [nfsd] root      2497     2  0 17:59 ?        00:00:00 [nfsd] root      2498     2  0 17:59 ?        00:00:00 [nfsd] root      2499     2  0 17:59 ?        00:00:00 [nfsd] root      2500     2  0 17:59 ?        00:00:00 [nfsd] root      2501     2  0 17:59 ?        00:00:00 [nfsd] root      2502     2  0 17:59 ?        00:00:00 [nfsd] root      2530  1528  0 17:59 pts/1    00:00:00 grep nfs




测试:

注:经过反复测试,发现主备切换一般需要1-3秒,用户可以接受。

客户端挂载nfs共享目录,服务器在主/备用切换后不需要重新挂载。只需要等待1-3秒就可以正常使用。

测试1:远程服务器可以成功挂载吗?

nfs服务器,dbm135,主服务器:

[root@dbm135 ~]# cd /data/ [root@dbm135 data]# ll total 16 -rw-r--r-- 1 root root     0 Jun 30 10:15 file1 -rw-r--r-- 1 root root     0 Jun 30 10:15 file2 -rw-r--r-- 1 root root     0 Jun 30 10:15 file3 -rw-r--r-- 1 root root     0 Jun 30 10:15 file4 -rw-r--r-- 1 root root     0 Jun 30 10:15 file5 -rw-r--r-- 1 root root     0 Jun 30 18:01 file6 drwx------ 2 root root 16384 Jun 30 10:14 lost+found

在另一台主机192.168.186.131上挂载nfs服务器共享的目录:

[root@scj131 ~]# showmount -e 192.168.186.150         #150是虚拟ip Export list for 192.168.186.150: /data 192.168.186.0/255.255.255.0 [root@scj131 ~]# mount 192.168.186.150:/data /data [root@scj131 ~]# cd /data/ [root@scj131 data]# ll total 16 -rw-r--r-- 1 root root     0 Jun 30  2015 file1 -rw-r--r-- 1 root root     0 Jun 30  2015 file2 -rw-r--r-- 1 root root     0 Jun 30  2015 file3 -rw-r--r-- 1 root root     0 Jun 30  2015 file4 -rw-r--r-- 1 root root     0 Jun 30  2015 file5 -rw-r--r-- 1 root root     0 Jun 30  2015 file6 drwx------ 2 root root 16384 Jun 30  2015 lost+found ##挂载成功


测试2:重启主节点的DRBD服务

在主节点重新启动DRBD服务,看看从节点改变后192.168.186.131挂载是否还正常。


测试3:主节点的DRBD服务停止。

在主节点上停止DRBD服务,看看从节点改变后192.168.186.131挂载是否还正常。


测试4:主节点的nfs服务停止

在主节点上停止nfs服务,看看从节点改变后192.168.186.131挂载是否还正常。

##把主节点的nfs服务stop掉后,Secondary节点没有任何变换,且192.168.186.131不能正常挂载了 ##解决方法: [root@dbm135 ~]#vi /opt/monitor/nfs/monitornfs.sh #!/bin/bash #监控nfs服务的运行情况 while true do     drbdstatus=`cat /proc/drbd 2> /dev/null  | grep ro | tail -n1 | awk -F':' '{print $4}' | awk -F'/' '{print $1}'`   #判断drbd的状态     nfsstatus=`/etc/init.d/nfs status | grep -c running`    #判断nfs是否运行     if [ -z  $drbdstatus ];then         sleep 10         continue     elif [ $drbdstatus == 'Primary' ];then     #若drbd是Primary状态         if [ $nfsstatus -eq 0 ];then           #若nfs未运行             /etc/init.d/nfs start &> /dev/null   #启动nfs服务             /etc/init.d/nfs start &> /dev/null             newnfsstatus=`/etc/init.d/nfs status | grep -c running`     #再次判断nfs是否成功启动             if [ $newnfsstatus -eq 0 ];then         #若nfs未运行,也就是无法启动                 /etc/init.d/heartbeat  stop &> /dev/null        #将heartbeat服务stop掉,目的是自动切换到另一台备用机                 /etc/init.d/heartbeat  stop &> /dev/null             fi         fi     fi     sleep 5 done ##注意:不要将此监控脚本放到/data/目录下,挂载drbd设备时,会把此脚本覆盖掉 [root@dbm135 ~]# chmod  u+x /opt/monitor/nfs/monitornfs.sh [root@dbm135 ~]#nohup bash /opt/monitor/nfs/monitornfs.sh &     #放在后台运行 ##别忘了设置开机自动启动


测试:主节点的心跳服务停止或重新启动。

在主节点停止或重启心跳服务,看看副节点更改后192.168.186.131挂载是否还正常。

##可以通过如下命令,查看Secondary节点的变化 [root@dbm134 ~]# cat /proc/drbd       #查看节点是否由Secondary切换为Primary [root@dbm134 ~]# df -h                #查看drbd设备是否成功挂载 [root@dbm134 ~]# ps -ef | grep nfs    #查看nfs服务是否启动或重启(进程号发生变化) ##测试后,发现主备节点切换正常,客户端挂载正常


测试6:关闭或重启主节点服务器。

关闭或重启主节点服务器,查看192.168.186.131挂载是否正常。主节点重启后,再看次节点的变化(新的主节点)。

##主节点关机后主备节点切换正常,客户端挂载正常 ##主节点恢复正常后,主备节点不会再去切换,由Secondary节点(新主节点)继续对外提供服务


测试7:模拟分裂大脑

关闭主节点的eth0(ifdowneth0),然后启动eth0(ifupperth0)。此时,两个节点都成为独立节点。

##解决脑裂的方法 ##备用节点: [root@dbm134 ~]# drbdadm secondary r0 [root@dbm134 ~]# drbdadm disconnect all [root@dbm134 ~]# drbdadm -- --discard-my-data connect r0  ##主节点: [root@dbm135 ~]# drbdadm disconnect all [root@dbm135 ~]# drbdadm connect r0 [root@dbm135 ~]# drbdsetup /dev/drbd0 primary [root@dbm135 ~]# mount /dev/drbd0 /data/

注意:解决裂脑时,以上步骤全部完成后,有时客户端会正常挂载,有时会异常挂载;如果不正常,可以尝试重启主节点的心跳服务。













欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/782360.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存