设为首页 收藏本站
查看: 846|回复: 0

[经验分享] DRBD+HeartBeat+NFS:配置NFS的高可用

[复制链接]

尚未签到

发表于 2019-1-6 13:05:55 | 显示全部楼层 |阅读模式
DRBD+HeartBeat+NFS:配置NFS的高可用

  说明:

      上周研究了DRBD的安装和配置,今天研究下DRBD的第一个应用,利用DRBD+HeartBeat+NFS:配置NFS的高可用,作为集群中的底端共享存储
      NFS主要存储WEB服务器上的程序代码和一些图片文件
  

  

  

  参考:
      http://network.运维网.com/art/201010/230237_all.htm
  http://showerlee.blog.运维网.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
dbm135192.168.186.135dbm135.51.comprimaryDRBD+HeartBeat+NFS
dbm134192.168.186.134dbm134.51.comsecondaryDRBD+HeartBeat+NFS
VIP192.168.186.150


  

  

  

  

  准备工作和安装DRBD:

  参考:http://732233048.blog.运维网.com/9323668/1665979
  

  

  

  安装配置HeartBeat:

  安装HeartBeat:(dbm135,dbm134)
  这里采用yum的方式安装HeartBeat(推荐)
  centos6.4默认不带HeartBeat软件包,需要安装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一起安装
  

  配置HeartBeat:(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主备切换时,若nfs已启动,则此脚本会重启nfs服务,因为NFS服务切换后,必须重新mount一下nfs共享出来的目录,否则会出现stale NFS file handle的错误
[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)
      注意:nfs相关软件包,在安装HeartBeat时作为依赖包已经安装好了
[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来启动  

  

  启动HeartBeat:(dbm135,dbm134)

  注意:先在主节点上启动(dbm135是primary)
[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秒,即可正常使用
  测试一:远端服务器是否可以成功挂载
  nfs服务端,dbm135,Primary:
[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
##挂载成功  

  测试二:主节点DRBD服务重启
  在主节点把DRBD服务重启,看Secondary节点的变化,192.168.186.131挂载是否仍正常
  

  测试三:主节点DRBD服务stop掉
  在主节点把DRBD服务stop,看Secondary节点的变化,192.168.186.131挂载是否仍正常
  

  测试四:主节点nfs服务stop掉
  在主节点把nfs服务stop,看Secondary节点的变化,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 &     #放在后台运行
##别忘了设置开机自动启动  

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

  测试六:把主节点服务器关机或重启
  把主节点服务器关机或重启,看Secondary节点的变化,192.168.186.131挂载是否仍正常;等主节点重新启动后,看Secondary节点(新主节点)的变化
##主节点关机后主备节点切换正常,客户端挂载正常
##主节点恢复正常后,主备节点不会再去切换,由Secondary节点(新主节点)继续对外提供服务  

  测试七:模拟脑裂
  把主节点的eth0关掉(ifdown eth0),再把eth0启动(ifup eth0),此时两个节点都变成了StandAlone状态
##解决脑裂的方法
##备用节点:
[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/  注意:在解决脑裂时,把上面所有步骤都操作完后,有时候客户端会挂载正常,有时候则挂载不正常;若不正常,可以尝试把主节点的heartbeat服务重启一下
  

  

  

  

  

  

  

  

  

  

  

  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-659960-1-1.html 上篇帖子: heartbeat+ldirectory实现LVS-DR负载均衡器的高可用 下篇帖子: HA双机热备的实现(heartbeat)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表