1 NFS高可用解決方案之DRBD+heartbeat搭建

preface

NFS做爲業界經常使用的共享存儲方案,被衆多公司採用。我司也不列外,使用NFS做爲共享存儲,爲前端WEB server提供服務,主要存儲網頁代碼以及其餘文件。html

高可用方案

說道NFS,不得不說它的同步技術,同步技術有兩種,前端

  • 第一種就是藉助RSYNC+inotify來實現主從同步數據。
  • 第二種藉助DRBD,實現文件同步。
    上訴兩種方案都沒有實現高可用,只是實現了二者數據同步。可是業務要求NFS服務器必須是高可用,因此咱們在第二種同步方案的基礎上,在結合heartbeat來實現高可用。
    具體架構以下:
    image

動手搭建

咱們看看咱們的服務器信息:node

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。

上面全部的基礎工做我就不記錄命令了,很是簡單。mysql

搭建DRBD

drbd的原理不贅述了,能夠參考個人另外一篇博文:http://www.cnblogs.com/liaojiafa/p/6118425.html 。這裏咱們採用C協議(backup端網絡接收到後寫入磁盤再返回OK狀態給Master)。
開始動手配置它吧。linux

在nfs主備服務器都敲下面的命令sql

安裝DRBDvim

[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

格式化磁盤api

主備都安裝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作高可用吧。

相關文章
相關標籤/搜索