項目:一次測試環境下的高可用NFS文件服務器(DRBD+heartbeat+NFS)

什麼是DRBD?

    分佈式複製塊設備。當你將數據寫入本地的DRBD設備上的文件系統時,數據同時會被髮送到遠程端的另一邊的DRBD設備文件系統裏,保障數據實時同步,當本地的DRBD設備突然故障,遠程節點還保留一份一模一樣的數據,根據這個特性,可以結合heatbeat的ha開源軟件,實現高可用!

    我們都把DRBD理解是網絡raid1磁盤陣列。

    DRBD底層設備可以是

        1)一塊磁盤,或者一個分區。

        2)raid設備。

        3)邏輯卷lvm。

        4)任何塊設備。

    DRBD支持三種不同的複製協議。協議A,協議B,協議C。

    協議A,異步複製協議。此協議只要本地寫操作完成,就認爲DRBD整個流程的寫操作就完成。

    協議B,內存同步複製協議。本地寫操作完成,並檢測到數據到達DRBD的另一邊, 就認爲DRBD整個流程的寫操作就完成。  

    協議C,同步複製協議。當本地DRBD設備寫操作和遠程DRBD設備寫操作都完成了,就認爲DRBD整個流程的寫操作就完成。最長用的是協議C,測試環境下也是用的協議C,它可以提供保證的數據一致性和可靠性。需要的磁盤I/O最高。

    heartbeat是一個開源項目。提供linux可靠,可用和可服務性。核心,就是採用心跳檢測機制。

如果心跳線或網絡出現問題,容易出現腦裂現象!這也是制約該技術大規模部署應用的原因。

    

實驗環境準備

    1.關閉防火牆。

    2.hosts文件。

    3.ntp對時。

    4.準備兩臺機器primary和secondary。

    5.每臺機器上單獨拿一塊硬盤或單獨分區做爲DRBD底層設備(大小建議一樣)。

    6.網卡兩塊,兩個網段,其中一網段是數據通信並heartbeat對外提供VIP的網段,另外一段做爲重要的心跳線,heartbeat的核心。

    7.primary上 eth0:192.168.4.10  eth1:10.0.54.10

    8.secondary上 eth0:192.168.4.11  eth1:10.0.54.11


 兩臺機器上都關閉iptables和selinux

[root@primary ~]# service iptables stop
[root@primary ~]# setenforce 0
[root@zprimary ~]# sed -i /SELINUX=/s/permissive/disabled/ /etc/selinux/config

[root@secondary ~]# service iptables stop
[root@secondary ~]# setenforce 0
[root@secondary ~]# sed -i /SELINUX=/s/permissive/disabled/ /etc/selinux/config

 修改hosts文件

[root@primary ~]#vim /etc/hosts
primary     192.168.4.10
secondary  192.168.4.11

[root@secondary ~]#vim /etc/hosts
primary     192.168.4.10
secondary  192.168.4.11

  ntp對時

[root@primary ~]#ntpdate ntp.api.bz
[root@secondary ~]#ntpdate ntp.api.bz

  分區如下:/dev/vdb1   大小8G

fdisk /dev/vdb    #分區省略

安裝DRBD和配置

  安裝包下載地址:http://oss.linbit.com/drbd/

  安裝依賴包

[root@primary ~]#yum install gcc gcc-c++ make glibc flex kernel-devel kernel-headers
[root@secondary ~]#yum install gcc gcc-c++ make glibc flex kernel-devel kernel-headers

  這裏提供安裝包8.4.3(兩機器同樣的操作)

[root@primary ~]#tar zxvf drbd-8.4.3.tar.gz
[root@primary ~]#cd drbd-8.4.3
    ./configure --prefix=/usr/local/drbd --with-km
    make && make install
    mkdir -p /usr/local/drbd/var/run/drbd
    cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d
    chkconfig drbd on
    
[root@primary ~]#modprobe drbd      #加載drbd.ko模塊
[root@primary ~]#lsmod |grep drbd   #查看

  兩臺機器創建硬件設備DRBD

[root@primary ~]#mknod /dev/drbd0 b 147 0

  兩臺下載NFS包(注意不需要自己開啓NFS服務,下面搭建heartbeat會來完成)

[root@primary ~]#yum install -y nfs*
[root@primary ~]#vim /etc/exports
/data 192.168.4.0/255.255.255.0(rw,no_root_squash,no_all_squash,sync)
[root@primary ~]#mkdir /data
[root@primary ~]#/etc/init.d/rpcbind start
[root@primary ~]#chkconfig rpcbind on
[root@primary ~]#chkconfig nfs off
修改DRBD文件配置
[root@primary ~]#vim /usr/local/drbd/etc/drbd.conf
resource r0 {                   #創建的資源名稱,和下面創建與之對應
protocol C;                     #採用C協議

startup { wfc-timeout 0; degr-wfc-timeout 120; }
disk { on-io-error detach; }
net {
        timeout 60;
        connect-int 10;
        ping-int 10;
        max-buffers 2048;
        max-epoch-size 2048;
}
syncer { rate 30M; }

on primary {
        device /dev/drbd0;
        disk  /dev/vdb1;
        address  192.168.4.10:7788;
        meta-disk internal;
}
on secondary {
        device /dev/drbd0;
        disk  /dev/vdb1;
        address  192.168.4.11:7788;
        meta-disk internal;
}
}

  兩臺創建資源r0

[root@primary ~]#drbdadm create-md r0
[root@secondary ~]#drbdadm create-md r0

  兩臺啓動DRBD,設置開機啓動

[root@primary ~]#service drbd start
[root@primary ~]#chkconfig  drbd on

  查看當前DRBD狀態

[root@primary ~]#cat /proc/drbd
或者
[root@primary ~]#service drbd status

  主上初始化

[root@primary ~]#drbdsetup /dev/drbd0 primary --force     #第一次設置
[root@primary ~]#drbdadm  primary r0

  在查看當前DRBD狀態

[root@primary ~]#cat /proc/drbd          #能看到primary機器上狀態已經變成primary了
  或者
[root@primary ~]#service drbd status

  格式化DRBD(只在主上操作,備用狀態的不允許對DRBD設備進行任何操作,包括只讀)

[root@primary ~]#mkfs.ext4 /dev/drbd0


  Heartbeat 安裝配置(兩臺設備)

[root@primary ~]#yum install -y heartbeat
        cd /usr/share/doc/heartbeat-3.0.4/
        cp ha.cf  haresources authkeys /etc/ha.d/

   修改primary(secondary的ip爲10.0.54.10)的ha.cf

[root@primary ~]#vim /etc/ha.d/ha.cf
logfile         /var/log/ha-log
logfacility     local0
keepalive       2
deadtime        5
ucast           eth1 10.0.54.11        #採用心跳網口對方ip
auto_failback   off
node            primary secondary

  修改authkeys(兩個機器相同配置)

[root@primary ~]#vim /etc/ha.d/authkeys     #自選1 2 3 模式
  auth 1
  1 crc
 [root@primary ~]# chmod 600 /etc/ha.d/authkeys

  編輯haresources(這裏兩個主機相同配置,注:從上不要把primary改成secondary)

[root@primary ~]#vim /etc/ha.d/haresources      #VIP設置爲192.168.4.100,參考文件倒數後面的一個例題
primary IPaddr::192.168.4.100/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/data::ext4 killnfsd
[root@primary ~]#vim /etc/ha.d/resource.d/killnfsd
killall -9 nfsd; /etc/init.d/nfs restart; exit 0

[root@primary ~]#find / -name  drbddisk    #查看drbddisk腳本在哪,有的時候沒有該腳本。
[root@primary ~]#cp /usr/local/drbd/etc/ha.d/resource.d/drbddisk /etc/ha.d/resource.d/
[root@primary ~]#chmod 755 /etc/ha.d/resource.d/drbddisk

  重啓heartbeat(先主上開啓)

[root@primary ~]#/etc/init.d/heartbeat start

  測試,故障模擬及故障排查

[root@primary ~]#ping 192.168.4.100
PING 192.168.4.100 (192.168.4.100) 56(84) bytes of data.
64 bytes from 192.168.4.100: icmp_seq=1 ttl=64 time=0.026 ms
64 bytes from 192.168.4.100: icmp_seq=2 ttl=64 time=0.020 ms
64 bytes from 192.168.4.100: icmp_seq=3 ttl=64 time=0.016 m
[root@primary ~]#df -h       #主上自動掛載了
/dev/drbd0            7.8G   18M  7.4G   1% /data

找一臺客戶端A,掛載NFS
[root@room3pc0A ~]# showmount -e 192.168.4.100
Export list for 192.168.4.100:
/data 192.168.4.0/255.255.255.0
[root@room3pc0A ~]#vim /etc/fstab
192.168.4.100:/data /liuqingqing        nfs _netdev,defaults 0 0
[root@room3pc0A ~]#mkdir /liuqingqing
[root@room3pc0A ~]#mount -a
[root@room3pc0A ~]#df -h
192.168.4.100:/data   7.8G   18M  7.4G   1% /liuqingqing

故障模擬(直接把主關機)

[root@primary ~]#init 0
.....
.....
.....  等一會兒在ping 192.168.4.100
[root@secondary ~]#ping 192.168.4.100
PING 192.168.4.100 (192.168.4.100) 56(84) bytes of data.
64 bytes from 192.168.4.100: icmp_seq=1 ttl=64 time=0.016 ms
64 bytes from 192.168.4.100: icmp_seq=2 ttl=64 time=0.021 ms
[root@secondary ~]#df -h    #自動掛載在從上,實現了高可用。
/dev/drbd0            7.8G   18M  7.4G   1% /data
並且客戶端機器掛在的目錄,不受影響。


故障排查:
查看日誌
[root@primary ~]#tail -f /var/log/messege
[root@primary ~]#tail -f /var/log/ha-log
查看DRBD狀態(如,剛纔把主關掉之後,自己變成從了)
[root@primary ~]# cat /proc/drbd 
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@primary, 2016-09-21 09:13:16
 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

出現腦裂現象處理

        在secondary上操作

[root@secondary ~]#drbdadm secondary r0
[root@secondary ~]#drbdadm disconnect all
[root@secondary ~]#drbdadm --discard-my-data connect r0

        在primary上操作

[root@primary ~]#drbdadm disconnect all
[root@primary ~]#connect r0


最終在測試機器上運行沒問題,主備上對此測試。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章