1. 程式人生 > >Heartbeat+DRBD+NFS 方案三

Heartbeat+DRBD+NFS 方案三

 

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

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

格式化磁碟

主備都安裝drbd以後,我們就開始格式化磁碟。這裡我把/dev/sdb直接分成主分割槽,大小為20G,在這基礎之上,做了LVM卷,劃分大小為10G。主備同時操作:

[[email protected] ~]# fdisk /dev/sdb
[[email protected] ~]# pvcreate /dev/sdb1
[[email protected] ~]# vgcreate nfsdisk /dev/sdb1
[[email protected] ~]# lvcreate -L 10G -n nfsvolume nfsdisk
[[email protected] ~]# 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了:·

[[email protected] ~]# drbdadm create-md r0
[[email protected] ~]# service  drbd start

[[email protected] ~]# drbdadm primary r0    # 到這裡報錯了,一看DRBD狀態,兩者不同步的狀態,所以無法切換到primary。
[[email protected] ~]# service  drbd status
drbd driver loaded OK; device status:
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by [email protected], 2016-01-12 13:27:11
m:res  cs         ro                   ds                         p  mounted  fstype
0:r0   Connected  Secondary/Secondary  Inconsistent/Inconsistent  C   # inconsisten是兩者資料不同步狀態。
[[email protected] ~]# drbdadm -- --overwrite-data-of-peer primary all   #不同步的話,我們在master節點執行這條命令。意思是讓備的資料和主的一致。
[[email protected] ~]# drbd-overview                 # 此時能夠看到同步狀態了
 0:r0/0  SyncSource Primary/Secondary UpToDate/Inconsistent
    [================>...] sync'ed: 86.3% (1408/10236)M

[[email protected] ~]# drbd-overview    # 這個時候的狀態表示同步成功。
 0:r0/0  Connected Primary/Secondary UpToDate/UpToDate
[[email protected] ~]# mkfs.ext4 /dev/drbd0   #格式化磁碟,待會準備使用
搭建heartbeat了

安裝heartbeat

採用yum安裝,

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

配置heartbeat

[[email protected] ~]# cp /usr/share/doc/heartbeat-3.0.4/ha.cf /etc/ha.d/
[[email protected] ~]#  cp /usr/share/doc/heartbeat-3.0.4/haresources /etc/ha.d/
[[email protected] ~]# cp /usr/share/doc/heartbeat-3.0.4/authkeys /etc/ha.d/
[[email protected] ~]# chmod 600 /etc/ha.d/authkeys    #必須是600許可權

[[email protected] ~]# grep -v ^# /etc/ha.d/haresources
nfsmaster  IPaddr::192.168.1.100/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/nfs::ext4   #drbddisk後面的r0是資源名,drbd配置檔案定義的。


[[email protected] ~]# 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

[[email protected] ~]# grep -v ^# /etc/ha.d/authkeys   #認證檔案
auth 1
1 sha1 HA_DB

[[email protected] ~]# 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

[[email protected] ~]# service  heartbeat start
[[email protected] ~]# 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已經在了,啟動成功
    

設定開機自啟動

[[email protected] ~]# chkconfig heartbeat on
[[email protected] ~]# chkconfig drbd on
測試drbd+heartbeat是否正常工作。
  1. 把master伺服器拔掉往下或者直接拔電源,模擬宕機狀態,看VIP是否會切換到backup上,如果能夠切換,說明成功。drbd狀態為primary/unknow
  2. 當master啟動後以後,Master不會搶佔backup的VIP以及drbd資源。。drbd狀態為primary/Secondary

下面開始說說NFS結合drbd+heartbeat做高可用吧。

 

NFS主備伺服器都安裝NFS

安裝NFS

我這裡使用的CentOs6.6預設是安裝了NFS的,如果你的沒有安裝,請使用下面的yum命令安裝:

[[email protected] ~]# yum -y install  nfs-utils nfs-utils-lib nfs4-acl-tools
[[email protected] ~]# rpm -qa nfs*
nfs-utils-lib-1.1.5-11.el6.x86_64
nfs-utils-1.2.3-70.el6_8.2.x86_64
nfs4-acl-tools-0.3.3-8.el6.x86_64

啟動NFS並配置它

[[email protected] ~]#  service rpcbind restart
[[email protected] ~]# service nfs start

[[email protected] nfs]# cat /etc/exports 
/nfs  192.168.1.0/255.255.255.0(rw,sync,no_root_squash)
  # 共享哪個目錄 ,允許哪些client連線,具有什麼屬性對這個目錄。

[[email protected] ~]# showmount -e 192.168.1.100   # 檢視是否有共享目錄
Export list for 192.168.1.7:
/nfs 192.168.1.*

NFS的exports配置檔案需要copy到backup 伺服器上。

客戶端掛載它
客戶端需要安裝nfs庫,不然會提示下面這樣的報錯:

[[email protected] ~]# mount -t nfs 192.168.1.7:/nfs /database/
mount: wrong fs type, bad option, bad superblock on 192.168.1.7:/nfs,
       missing codepage or helper program, or other error
       (for several filesystems (e.g. nfs, cifs) you might
       need a /sbin/mount.<type> helper program)
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

出現上面的報錯後,安裝nfs-utils

[[email protected] ~]# yum -y install nfs-utils

安裝完之後掛載nfs,使用vip

[[email protected] ~]# showmount -e 192.168.1.100
clnt_create: RPC: Program not registered    #出現這個錯誤的話,去nfs伺服器上確認是否NFS服務正常啟動,重啟下即可
[[email protected] ~]# showmount -e 192.168.1.100
Export list for 192.168.1.100:
/nfs 192.168.1.0/255.255.255.0

[[email protected] ~]# mount -t nfs 192.168.1.100:/nfs /database/
[[email protected] ~]# df -hT
Filesystem         Type   Size  Used Avail Use% Mounted on
/dev/sda2          ext4    28G  2.9G   24G  11% /
tmpfs              tmpfs  491M     0  491M   0% /dev/shm
/dev/sda1          ext4   283M   28M  240M  11% /boot
192.168.1.100:/nfs nfs    9.8G   23M  9.2G   1% /database
  # 掛載成功。

模擬Nfs-server故障

我們把NFSmaster關機,此時客戶端不管是df ,還是進入到/database下面,都是卡死的。解決辦法是在/etc/mtab裡面刪除最後一行:

[[email protected] ~]# cat /etc/mtab
/dev/sda2 / ext4 rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs rw 0 0
/dev/sda1 /boot ext4 rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
vmware-vmblock /var/run/vmblock-fuse fuse.vmware-vmblock rw,nosuid,nodev,default_permissions,allow_other 0 0
nfsd /proc/fs/nfsd nfsd rw 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
192.168.1.100:/nfs /database nfs rw,addr=192.168.1.100 0 0       #刪除這一行即可。

由此可見,這個heartbeat雖然會讓VIP進行漂移,但是呢nfs客戶端依然是不可用的。所以我們需要採用另外一種方法來來export共享目錄。

刪除export裡面的內容,使用命令exporfs申明要共享的目錄

我們刪除/etc/exports裡面的內容,然後通過exportfs來申明要共享的目錄。

[[email protected] ~]# > /etc/exports
[[email protected] ~]# exportfs -o rw,sync,all_squash,mp,fsid=2 192.168.1.0/24:/nfs/   

上面這種exportfs的方法同樣可以申明共享目錄,nfsclient也同樣正常使用。

高可用方案

經過dbrd+heartbeat+NFS的搭建,以及exportfs的簡單使用,下面我們就開始做高可用了。
說道高可用,不得不說exportfs這個命令,如果我們使用exportfs這個命令來申明需要共享目錄的話,那麼我們就不需要到/etc/exports裡面再次新增這個要申明的目錄了。
對於NFS高可用,我們需要使用exportfs來關閉共享的目錄和開啟共享的目錄,這樣做的好處就需要修改/etc/exports檔案了,大大提高了方便性。對此,我們通過exportfs命令寫了一個指令碼,由heartbeat來接管這個指令碼,當nfsmaster伺服器宕機時,nfsbackup的heartbeat開始就執行指令碼,指令碼通過exportfs來共享目錄,此時VIP也已經飄過去了,所以nfsclient受影響很小。達到了高可用的目的。更多關於exportfs的資料,可以參考man exportfs。下面就看看這個指令碼的內容:

[[email protected] ~]# cat /etc/ha.d/resource.d/rsdata1.sh     #必須放在/etc/ha.d/resource.d下面
#!/bin/bash

FSID="1"
EXPORT_DIR="/nfs"         
EXPORT_OPTIONS="-o rw,sync,all_squash,mp,fsid=2"
EXPORT_CLIENT="192.168.1.0/24"

exportfs_usage() {
cat <<EOF
    USEAGE: $0 {start|stop}
EOF
}

exportfs_start()
{
    fn="/nfs"
    service rpcbind stop &>/dev/null
    service rpcbind start  &>/dev/null
    service nfs restart  &>/dev/null
        echo "=======nfs restart========"
    exportfs ${EXPORT_OPTIONS} ${EXPORT_CLIENT}:${EXPORT_DIR} 2>1&    #通過exportfs來申明共享目錄
    rc=$?
    if [ $rc -ne 0 ];then
        echo "export resource ${EXPORT_DIR} error"
        exit $rc
    else
            echo "export resource ok"
        exit 0
    fi
}

exportfs_stop()
{
    fn="/nfs"
    service rpcbind stop &>/dev/null
        service rpcbind start  &>/dev/null
    service nfs restart  &>/dev/null
        echo "=======nfs restart========"
    exportfs -u  ${EXPORT_CLIENT}:${EXPORT_DIT} 2>1&   通過exportfs來取消共享目錄
    rc=$?
    if [ $rc -ne 0 ];then
        echo "export resource ${EXPORT_DIR} error"
        exit $rc
    else
            echo "umount resource ok"
        exit 0
    fi
}

if [ $# -lt 1 ];then
    exportfs_usage
    exit 1
fi
case $1 in
    start)
    exportfs_start
    ;;
    stop)
    exportfs_stop
    ;;
    *)
    exit 1
    ;;
esac

這個指令碼必須賦予可執行許可權,且必須是LSB規範。同時在/etc/ha.d/haresources新增上這個指令碼

[[email protected] ~]# cat /etc/ha.d/haresources
nfsbackup  IPaddr::192.168.1.100/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/nfs::ext4  rsdata1.sh   #尾部新增rsdata1.sh這個指令碼名

上面的操作主備都需要操作。指令碼主備都要有。

測試高可用性

此時VIP在nfsmaster上面,我們在nfsclient端首先掛載NFS共享目錄後建立一些檔案:

[[email protected] /]# mount -t nfs 192.168.1.100:/nfs /database    #
[[email protected] /]# cd /database/
[[email protected] database]# touch {1..10}
[[email protected] database]# ls
1  10  2  3  4  5  6  7  8  9  lost+found  readme

關閉nfsmaster的電源,模擬宕機。此時等待VIP漂移到nfsbackup上面。待漂移到位後,我們繼續在nfsclient上操作:

[[email protected] database]# ls    # 可以檢視目錄下的檔案
1  10  2  3  4  5  6  7  8  9  lost+found  readme
[[email protected] database]# rm -f {1..5}     # 也可以刪除檔案。
[[email protected] database]# ls
10  6  7  8  9  lost+found  readme
到此NFS高可用就做完了。

 

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

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

格式化磁碟

主備都安裝drbd以後,我們就開始格式化磁碟。這裡我把/dev/sdb直接分成主分割槽,大小為20G,在這基礎之上,做了LVM卷,劃分大小為10G。主備同時操作:

[[email protected] ~]# fdisk /dev/sdb
[[email protected] ~]# pvcreate /dev/sdb1
[[email protected] ~]# vgcreate nfsdisk /dev/sdb1
[[email protected] ~]# lvcreate -L 10G -n nfsvolume nfsdisk
[[email protected] ~]# 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了:·

[[email protected] ~]# drbdadm create-md r0
[[email protected] ~]# service  drbd start

[[email protected] ~]# drbdadm primary r0    # 到這裡報錯了,一看DRBD狀態,兩者不同步的狀態,所以無法切換到primary。
[[email protected] ~]# service  drbd status
drbd driver loaded OK; device status:
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by [email protected], 2016-01-12 13:27:11
m:res  cs         ro                   ds                         p  mounted  fstype
0:r0   Connected  Secondary/Secondary  Inconsistent/Inconsistent  C   # inconsisten是兩者資料不同步狀態。
[[email protected] ~]# drbdadm -- --overwrite-data-of-peer primary all   #不同步的話,我們在master節點執行這條命令。意思是讓備的資料和主的一致。
[[email protected] ~]# drbd-overview                 # 此時能夠看到同步狀態了
 0:r0/0  SyncSource Primary/Secondary UpToDate/Inconsistent
    [================>...] sync'ed: 86.3% (1408/10236)M

[[email protected] ~]# drbd-overview    # 這個時候的狀態表示同步成功。
 0:r0/0  Connected Primary/Secondary UpToDate/UpToDate
[[email protected] ~]# mkfs.ext4 /dev/drbd0   #格式化磁碟,待會準備使用
搭建heartbeat了

安裝heartbeat

採用yum安裝,

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

配置heartbeat

[[email protected] ~]# cp /usr/share/doc/heartbeat-3.0.4/ha.cf /etc/ha.d/
[[email protected] ~]#  cp /usr/share/doc/heartbeat-3.0.4/haresources /etc/ha.d/
[[email protected] ~]# cp /usr/share/doc/heartbeat-3.0.4/authkeys /etc/ha.d/
[[email protected] ~]# chmod 600 /etc/ha.d/authkeys    #必須是600許可權

[[email protected] ~]# grep -v ^# /etc/ha.d/haresources
nfsmaster  IPaddr::192.168.1.100/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/nfs::ext4   #drbddisk後面的r0是資源名,drbd配置檔案定義的。


[[email protected] ~]# 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

[[email protected] ~]# grep -v ^# /etc/ha.d/authkeys   #認證檔案
auth 1
1 sha1 HA_DB

[[email protected] ~]# 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

[[email protected] ~]# service  heartbeat start
[[email protected] ~]# 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已經在了,啟動成功
    

設定開機自啟動

[[email protected] ~]# chkconfig heartbeat on
[[email protected] ~]# chkconfig drbd on
測試drbd+heartbeat是否正常工作。
  1. 把master伺服器拔掉往下或者直接拔電源,模擬宕機狀態,看VIP是否會切換到backup上,如果能夠切換,說明成功。drbd狀態為primary/unknow
  2. 當master啟動後以後,Master不會搶佔backup的VIP以及drbd資源。。drbd狀態為primary/Secondary

下面開始說說NFS結合drbd+heartbeat做高可用吧。

 

NFS主備伺服器都安裝NFS

安裝NFS

我這裡使用的CentOs6.6預設是安裝了NFS的,如果你的沒有安裝,請使用下面的yum命令安裝:

[[email protected] ~]# yum -y install  nfs-utils nfs-utils-lib nfs4-acl-tools
[[email protected] ~]# rpm -qa nfs*
nfs-utils-lib-1.1.5-11.el6.x86_64
nfs-utils-1.2.3-70.el6_8.2.x86_64
nfs4-acl-tools-0.3.3-8.el6.x86_64

啟動NFS並配置它

[[email protected] ~]#  service rpcbind restart
[[email protected] ~]# service nfs start

[[email protected] nfs]# cat /etc/exports 
/nfs  192.168.1.0/255.255.255.0(rw,sync,no_root_squash)
  # 共享哪個目錄 ,允許哪些client連線,具有什麼屬性對這個目錄。

[[email protected] ~]# showmount -e 192.168.1.100   # 檢視是否有共享目錄
Export list for 192.168.1.7:
/nfs 192.168.1.*

NFS的exports配置檔案需要copy到backup 伺服器上。

客戶端掛載它
客戶端需要安裝nfs庫,不然會提示下面這樣的報錯:

[[email protected] ~]# mount -t nfs 192.168.1.7:/nfs /database/
mount: wrong fs type, bad option, bad superblock on 192.168.1.7:/nfs,
       missing codepage or helper program, or other error
       (for several filesystems (e.g. nfs, cifs) you might
       need a /sbin/mount.<type> helper program)
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

出現上面的報錯後,安裝nfs-utils

[[email protected] ~]# yum -y install nfs-utils

安裝完之後掛載nfs,使用vip

[[email protected] ~]# showmount -e 192.168.1.100
clnt_create: RPC: Program not registered    #出現這個錯誤的話,去nfs伺服器上確認是否NFS服務正常啟動,重啟下即可
[[email protected] ~]# showmount -e 192.168.1.100
Export list for 192.168.1.100:
/nfs 192.168.1.0/255.255.255.0

[[email protected] ~]# mount -t nfs 192.168.1.100:/nfs /database/
[[email protected] ~]# df -hT
Filesystem         Type   Size  Used Avail Use% Mounted on
/dev/sda2          ext4    28G  2.9G   24G  11% /
tmpfs              tmpfs  491M     0  491M   0% /dev/shm
/dev/sda1          ext4   283M   28M  240M  11% /boot
192.168.1.100:/nfs nfs    9.8G   23M  9.2G   1% /database
  # 掛載成功。

模擬Nfs-server故障

我們把NFSmaster關機,此時客戶端不管是df ,還是進入到/database下面,都是卡死的。解決辦法是在/etc/mtab裡面刪除最後一行:

[[email protected] ~]# cat /etc/mtab
/dev/sda2 / ext4 rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs rw 0 0
/dev/sda1 /boot ext4 rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
vmware-vmblock /var/run/vmblock-fuse fuse.vmware-vmblock rw,nosuid,nodev,default_permissions,allow_other 0 0
nfsd /proc/fs/nfsd nfsd rw 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
192.168.1.100:/nfs /database nfs rw,addr=192.168.1.100 0 0       #刪除這一行即可。

由此可見,這個heartbeat雖然會讓VIP進行漂移,但是呢nfs客戶端依然是不可用的。所以我們需要採用另外一種方法來來export共享目錄。

刪除export裡面的內容,使用命令exporfs申明要共享的目錄

我們刪除/etc/exports裡面的內容,然後通過exportfs來申明要共享的目錄。

[[email protected] ~]# > /etc/exports
[[email protected] ~]# exportfs -o rw,sync,all_squash,mp,fsid=2 192.168.1.0/24:/nfs/   

上面這種exportfs的方法同樣可以申明共享目錄,nfsclient也同樣正常使用。

高可用方案

經過dbrd+heartbeat+NFS的搭建,以及exportfs的簡單使用,下面我們就開始做高可用了。
說道高可用,不得不說exportfs這個命令,如果我們使用exportfs這個命令來申明需要共享目錄的話,那麼我們就不需要到/etc/exports裡面再次新增這個要申明的目錄了。
對於NFS高可用,我們需要使用exportfs來關閉共享的目錄和開啟共享的目錄,這樣做的好處就需要修改/etc/exports檔案了,大大提高了方便性。對此,我們通過exportfs命令寫了一個指令碼,由heartbeat來接管這個指令碼,當nfsmaster伺服器宕機時,nfsbackup的heartbeat開始就執行指令碼,指令碼通過exportfs來共享目錄,此時VIP也已經飄過去了,所以nfsclient受影響很小。達到了高可用的目的。更多關於exportfs的資料,可以參考man exportfs。下面就看看這個指令碼的內容:

[[email protected] ~]# cat /etc/ha.d/resource.d/rsdata1.sh     #必須放在/etc/ha.d/resource.d下面
#!/bin/bash

FSID="1"
EXPORT_DIR="/nfs"         
EXPORT_OPTIONS="-o rw,sync,all_squash,mp,fsid=2"
EXPORT_CLIENT="192.168.1.0/24"

exportfs_usage() {
cat <<EOF
    USEAGE: $0 {start|stop}
EOF
}

exportfs_start()
{
    fn="/nfs"
    service rpcbind stop &>/dev/null
    service rpcbind start  &>/dev/null
    service nfs restart  &>/dev/null
        echo "=======nfs restart========"
    exportfs ${EXPORT_OPTIONS} ${EXPORT_CLIENT}:${EXPORT_DIR} 2>1&    #通過exportfs來申明共享目錄
    rc=$?
    if [ $rc -ne 0 ];then
        echo "export resource ${EXPORT_DIR} error"
        exit $rc
    else
            echo "export resource ok"
        exit 0
    fi
}

exportfs_stop()
{
    fn="/nfs"
    service rpcbind stop &>/dev/null
        service rpcbind start  &>/dev/null
    service nfs restart  &>/dev/null
        echo "=======nfs restart========"
    exportfs -u  ${EXPORT_CLIENT}:${EXPORT_DIT} 2>1&   通過exportfs來取消共享目錄
    rc=$?
    if [ $rc -ne 0 ];then
        echo "export resource ${EXPORT_DIR} error"
        
            
           

相關推薦

Heartbeat+DRBD+NFS 方案

  NFS作為業界常用的共享儲存方案,被眾多公司採用。我司也不列外,使用NFS作為共享儲存,為前端WEB server提供服務,主要儲存網頁程式碼以及其他檔案。 高可用方案 說道NFS,不得不說它的同步技術,同步技術有兩種, 第一種就是藉助RSYNC+inotify來實

drbd+nfs+heartbeat高可用

網卡 pen type linux wget 心跳 scripts www i-o DRBD是一種基於軟件的、基於網絡的塊復制存儲解決方案 DRBD在IP網絡傳輸,所有在集中使用DRBD作為共享存儲設備,不需要任何硬件投資,可以節約很多成本 NFS1

centos7.5部署heartbeat+DRBD+mysql高可用方案

centos7.5部署drbd centos 7.5部署heartbe mysql高可用方案 heartbeat+DRBD+mysq 做雙機熱備方案需要用到Hearbeat和存儲設備(如果沒存儲設備,可以用DRBD代替,但是最好用存儲設備)。Heartbeat:如果熱備服務器在規定的時間內沒有

ansible安裝drbd+nfs+keepalived

nfs keepalived drbd keepalived不搶占 ansible管理機:192.168.8.35 名稱:kicktomcat主機: 192.168.8.234,192.168.8.235 VIP : 192.168.8.100系統版本: Centos7.2##### 實

Linux的企業-LVS(Lvs+ldirectord+heartbeat+drbd)

linux的企業 lvs(lvs+ldirectord+heartbeat+drbd)一.LVS、DR簡介 LVS 是Linux Virtual Server的簡稱,在實際環境中經常作為B/S結構的網絡應用中的負載均衡器來使用,工作在7層網絡模型中的,網絡層,也就是通常說的IP層,由於數據的處

mysql+heartbeat+drbd安裝

smo resource 準備 本機 nod 連續 mount ext4 operation 環境: 系統 IP地址 主機名 軟件包列表 centos6.5 192.168.200.101 ser

heartbeat+drbd監控腳本(自動發現問題,並郵件通知)

heartbeat+drbd監控腳本 監控heartbeat+drbd 生成環境有一些服務器是heartbeat+drbd做的高可用,但是有時候由於各種原因會產生問題(比如腦裂),而且沒有及時發現。所以做了腳本是對heartbeat、drbd服務狀態進行監控、對drbd分區掛載目錄進行監

docker容器日誌收集方案方案 filebeat+journald本地日誌收集)

其實方案三和方案二日誌採集套路一樣,但是還是有點差別。 差別就在於日誌格式如下:   ​ 為了方便對比吧日誌貼上來 Nov 16 10:51:58 localhost 939fe968a91d[4721]: 2018-11-16 02:51:58.89

基於STM32影象處理的機器人自動充電解決方案---

接上一篇基於STM32影象處理的機器人自動充電解決方案---二                                                                               第4章 自主導航與避障設計  4.1自主導航設計

報表重構方案

報表重構初步方案三 1.什麼是需求可定製化抽取資料庫資料生成報表?            開發可隨時根據使用者的需求,讓使用者下載所需要的資料,並將資料整理成如PDF、CSV、XLS、TXT等

IT基礎架構規劃方案(IT基礎軟體和系統規劃)

根據對某集團的實際調研,獲取了企業業務應用系統的建設情況,隨著企業資訊化建設的推進,需要對各種資訊化管理系統和應用系統的伺服器選型進行選型規劃,根據不同的系統對服務 某集團資訊化應用目標是:搭建整合、統一平臺,規避流程、規避風險,實現高效協作,有效支撐決策、實現多維度矩陣管控、實現無邊界的資訊應用。

DRBD+NFS+Keepalived高可用環境

1、前提條件 準備兩臺配置相同的伺服器 2、安裝DRBD [[email protected] ~]# yum -y update kernel kernel-devel [[email protected] ~]# rpm -Uvh http://www.elrepo.org/e

淘寶穿衣搭配演算法_方案

ReplaceItem1.java將原先的matchsets中的產品替換為它的分詞結果,分詞結果以空格隔開,產品與產品間用逗號隔開,輸出結果ToTerms1.txt。為了之後比較每個產品與預測產品的相似度,排除方案二中出現多可替代產品,而造成該搭配的相似度虛高的

中小型資料庫 RMAN CATALOG 備份恢復方案()

      在前兩篇文章中描述了中小型資料庫使用RMAN catalog設計備份與恢復方案,並給出了所有相關的指令碼來從某種車程度上模擬Oracle Data Guard以減少硬體故障帶來Prod伺服器上資料庫損失。在這邊文章中主要描述Prod資料庫的變遷在Bak serve

HeartBeat-DRBD rpm安裝包生成

開發十年,就只剩下這套架構體系了! >>>   

工作中遇到的99%SQL優化,這裡都能給你解決方案()

-- 示例表 CREATE TABLE `employees` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(24) NOT NULL DEFAULT '' COMMENT '姓名', `age` int(20) NOT NULL D

nfs高可用架構之DRBD+heartbeat

一:軟體簡介 Heartbeat介紹 官方站點:http://linux-ha.org/wiki/Main_Pageheartbeat可以資源(VIP地址及程式服務)從一臺有故障的伺服器快速的轉移到另一臺正常的伺服器提供服務,heartbeat和keepalived相似,h

DRBD+Heartbeat+NFS高可用圖文實操

實驗環境:CentOS 6.5 (64位) 伺服器:drbd1  192.168.18.132  伺服器:drbd2  192.168.18.133 一.DRBD環境搭建 1.hosts解析 #v

linux高級技巧:heartbeat+lvs(

-1 調用 inux src inet6 腳本 heartbeat 我們 etc 之前我們把LVS和heartbeat都單獨進行了測試,是時候進行合並了 1.LVS+heartbeat: 首先顯示我們的控制臺:

經驗分享:套簡單的迷宮地圖生成方案

最好 .html ref 展示 方便 灰色 bob 創建 特點 轉自:http://www.gameres.com/754927.html 概述:文章基於一種基礎的地圖,來討論三套不同的地圖生成方案。 文章不會出現跟代碼相關的內容,會以較為通俗的語句和不少簡單的示