zoukankan      html  css  js  c++  java
  • 1 NFS高可用解决方案之DRBD+heartbeat搭建

    preface

    NFS作为业界常用的共享存储方案,被众多公司采用。我司也不列外,使用NFS作为共享存储,为前端WEB server提供服务,主要存储网页代码以及其他文件。

    高可用方案

    说道NFS,不得不说它的同步技术,同步技术有两种,

    • 第一种就是借助RSYNC+inotify来实现主从同步数据。
    • 第二种借助DRBD,实现文件同步。
      上诉两种方案都没有实现高可用,只是实现了两者数据同步。但是业务要求NFS服务器必须是高可用,所以我们在第二种同步方案的基础上,在结合heartbeat来实现高可用。
      具体架构如下:
      image

    动手搭建

    我们看看我们的服务器信息:

    IP 角色
    192.168.1.4 NFS-Client(App-Server)
    192.168.1.7 NFS-Master
    192.168.1.8 NFS-Backup
    • 以上系统版本都是CentOs6.6
    • heartbeat的VIP为192.168.1.100
    • 我们实验室环境采用都是单张网卡,所以heartbeat监听eth0
    基础工作要到位
    • 确保所有服务器时间同步。
    • 确保所有服务器的防火墙,Selinux关闭了。
    • 且主机名配置到位,能够根据主机名知道服务器角色。
    • 确保所有服务器hosts里面能够解析任意一台服务器的hostname。

    上面所有的基础工作我就不记录命令了,非常简单。

    搭建DRBD

    drbd的原理不赘述了,可以参考我的另一篇博文:http://www.cnblogs.com/liaojiafa/p/6118425.html 。这里我们采用C协议(backup端网络接收到后写入磁盘再返回OK状态给Master)。
    开始动手配置它吧。

    在nfs主备服务器都敲下面的命令

    安装DRBD

    [root@nfsmaster ~]# yum -y update kernel kernel-devel
    [root@nfsmaster ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
    [root@nfsmaster ~]# yum -y install drbd84-utils kmod-drbd84
    

    格式化磁盘

    主备都安装drbd以后,我们就开始格式化磁盘。这里我把/dev/sdb直接分成主分区,大小为20G,在这基础之上,做了LVM卷,划分大小为10G。主备同时操作:

    [root@nfsmaster ~]# fdisk /dev/sdb
    [root@nfsmaster ~]# pvcreate /dev/sdb1
    [root@nfsmaster ~]# vgcreate nfsdisk /dev/sdb1
    [root@nfsmaster ~]# lvcreate -L 10G -n nfsvolume nfsdisk
    [root@nfsmaster ~]# lvdisplay     # 刚才创建LVM卷的信息
      --- Logical volume ---
      LV Path                /dev/nfsdisk/nfsvolume
      LV Name                nfsvolume
      VG Name                nfsdisk
      LV UUID                ub6vWZ-kX6r-zNdz-mzRy-7z1w-QsKb-ke8QBO
      LV Write Access        read/write
      LV Creation host, time nfsmaster, 2016-12-03 16:06:41 +0800
      LV Status              available
      # open                 0
      LV Size                10.00 GiB
      Current LE             2560
      Segments               1
      Allocation             inherit
      Read ahead sectors     auto
      - currently set to     256
      Block device           253:0
    

    配置完成后,把master的drbd相关配置文件直接copy到backup上面就行了,我使用的是SCP。

    启动drbd
    磁盘创建成功后,开始启动drbd了:·

    [root@nfsbackup ~]# drbdadm create-md r0
    [root@nfsmaster ~]# service  drbd start
    
    [root@nfsmaster ~]# drbdadm primary r0    # 到这里报错了,一看DRBD状态,两者不同步的状态,所以无法切换到primary。
    [root@nfsmaster ~]# service  drbd status
    drbd driver loaded OK; device status:
    version: 8.4.7-1 (api:1/proto:86-101)
    GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by mockbuild@Build64R6, 2016-01-12 13:27:11
    m:res  cs         ro                   ds                         p  mounted  fstype
    0:r0   Connected  Secondary/Secondary  Inconsistent/Inconsistent  C   # inconsisten是两者数据不同步状态。
    [root@nfsmaster ~]# drbdadm -- --overwrite-data-of-peer primary all   #不同步的话,我们在master节点执行这条命令。意思是让备的数据和主的一致。
    [root@nfsmaster ~]# drbd-overview                 # 此时能够看到同步状态了
     0:r0/0  SyncSource Primary/Secondary UpToDate/Inconsistent
    	[================>...] sync'ed: 86.3% (1408/10236)M
    
    [root@nfsmaster ~]# drbd-overview    # 这个时候的状态表示同步成功。
     0:r0/0  Connected Primary/Secondary UpToDate/UpToDate
    [root@nfsmaster ~]# mkfs.ext4 /dev/drbd0   #格式化磁盘,待会准备使用
    
    搭建heartbeat了

    安装heartbeat

    采用yum安装,

    [root@nfsmaster ~]#  rpm -vih http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
    [root@nfsmaster ~]# yum -y install heartbeat heartbeat-devel heartbeat-stonith heartbeat-pils
    

    配置heartbeat

    [root@nfsmaster ~]# cp /usr/share/doc/heartbeat-3.0.4/ha.cf /etc/ha.d/
    [root@nfsmaster ~]#  cp /usr/share/doc/heartbeat-3.0.4/haresources /etc/ha.d/
    [root@nfsmaster ~]# cp /usr/share/doc/heartbeat-3.0.4/authkeys /etc/ha.d/
    [root@nfsmaster ~]# chmod 600 /etc/ha.d/authkeys    #必须是600权限
    
    [root@nfsmaster ~]# grep -v ^# /etc/ha.d/haresources
    nfsmaster  IPaddr::192.168.1.100/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/nfs::ext4   #drbddisk后面的r0是资源名,drbd配置文件定义的。
    
    
    [root@nfsmaster ~]# grep -v ^# /etc/ha.d/ha.cf   #主配置文件
    logfile /var/log/ha-log          #指定heartbeat日志文件的位置
    keepalive 1                        # 心跳发送时间间隔
    deadtime 5                # 备用节点5s内没有检测到master机的心跳,确认对方故障
    warntime 2                 # 警告2次
    initdead 10                 # 守护进程启动30s后,启动服务资源。
    ucast eth0 192.168.1.8      # 另一台主机节点eth0的地址,注意是另一台。
    auto_failback off    # 当primary节点切换到secondary节点之后,primary节点恢复正常,不进行切回操作,因为切换一次mysql master成本很高。
    node nfsmaster     # 定义两个节点的主机名,一行写一个。
    node nfsbackup
    respawn hacluster /usr/lib64/heartbeat/ipfail      #开启dopd功能
    respawn hacluster /usr/lib64/heartbeat/dopd
    apiauth ipfail gid=haclient uid=hacluster
    apiauth dopd gid=haclient uid=hacluster
    
    [root@nfsmaster ~]# grep -v ^# /etc/ha.d/authkeys   #认证文件
    auth 1
    1 sha1 HA_DB
    
    [root@nfsmaster ~]# vim /etc/ha.d/resource.d/drbddisk   
     69                 $DRBDADM --force primary $RES && break   # 更改第69行,添加--force。
    
    

    配置完成后,把配置文件copy到backup上面即可。不过需要改动的是/etc/ha.d/ha.cf下面的ucast参数,还有/etc/ha.d/haresources下面的nfsmaster,改成nfsbackup,与主机名一致。

    启动heartbeat

    [root@nfsmaster ~]# service  heartbeat start
    [root@nfsmaster ~]# ip a|grep 'inet '
        inet 127.0.0.1/8 scope host lo
        inet 192.168.1.7/24 brd 192.168.1.255 scope global eth0
        inet 192.168.1.100/24 brd 192.168.1.255 scope global secondary eth0   # VIP已经在了,启动成功
        
    

    设置开机自启动

    [root@nfsmaster ~]# chkconfig heartbeat on
    [root@nfsmaster ~]# chkconfig drbd on
    
    测试drbd+heartbeat是否正常工作。
    1. 把master服务器拔掉往下或者直接拔电源,模拟宕机状态,看VIP是否会切换到backup上,如果能够切换,说明成功。drbd状态为primary/unknow
    2. 当master启动后以后,Master不会抢占backup的VIP以及drbd资源。。drbd状态为primary/Secondary

    下面开始说说NFS结合drbd+heartbeat做高可用吧。

  • 相关阅读:
    Java POI Word 写文档
    安装SQL Server Management Studio遇到的29506错误
    DataSet中的relation
    如何在Eclipse中配置Tomcat
    button与submit
    redis应用场景
    机器学习实战-KNN(K-近邻算法)详解
    python中的random扩展
    php函数实现文章列表显示的几秒前,几分钟前,几天前等方法
    HTML5的Video标签的属性,方法和事件汇总
  • 原文地址:https://www.cnblogs.com/liaojiafa/p/6129499.html
Copyright © 2011-2022 走看看