構建Heartbeat+DRBD+NFS高可用文件共享存儲

DRBD的介紹:

Distributed Replicated Block Device(DRBD)是一個用軟件實現的、無共享的、服務器之間鏡像塊設備內容的存儲複製解決方案。 

數據鏡像:實時、透明、同步(所有服務器都成功後返回)、異步(本地服務器成功後返回)

工具:   drbdadm:高級管理工具,管理/etc/drbd.conf,向drbdsetupdrbdmeta發送指令,   drbdsetup:配置裝載進kernelDRBD模塊,平時很少直接用   drbdmeta:管理META數據結構,平時很少直接用。   在DRBD中,資源是特指某複製的存儲設備的所有方面。包括資源名稱、DRBD設備(/dev/drbdm,這裏m是設備最小號,最大號可到147)、磁盤配置(使本地數據可以爲DRBD所用)、網絡配置(與對方通信)   每個資源有個角色,是PrimarySecondary,下面簡稱」   主角色的DRBD設備可以不受限制的讀和寫,比如創建和映射文件系統、對於塊設備raw或直接IO訪問。   備角色的DRBD設備接受來自對方的所有修改,但是不能被應用程序讀寫,甚至只讀也不行。   角色可以改變。 

DRBD功能

  單主模式:典型的高可靠性集羣方案。   復主模式:需要採用共享cluster文件系統,如GFSOCFS2。用於需要從2個節點併發訪問數據的場合,需要特別配置。   複製模式:3種模式:   協議A:異步複製協議。本地寫成功後立即返回,數據放在發送buffer中,可能丟失。   協議B:內存同步(半同步)複製協議。本地寫成功並將數據發送到對方後立即返回,如果雙機掉電,數據可能丟失。   協議C:同步複製協議。本地和對方寫成功確認後返回。如果雙機掉電或磁盤同時損壞,則數據可能丟失。   一般用協議C。選擇協議將影響流量,從而影響網絡時延。   有效的同步:按線性而不是當初寫的順序同步塊。同步損壞時間內的不一致數據。   在線的設備檢驗:一端順序計算底層存儲,得到一個數字,傳給另一端,另一端也計算,如果不一致,則稍後進行同步。建議一週或一月一次。   複製過程的一致性檢驗:加密後,對方若不一致則要求重傳。防止網卡、緩衝等問題導致位丟失、覆蓋等錯誤。   Split brain:當網絡出現暫時性故障,導致兩端都自己提升爲Primary。兩端再次連通時,可以選擇email通知,建議手工處理這種情況。   當數據寫在緩衝區裏,沒有真正寫到磁盤上時,系統崩潰會導致數據丟失。而disk flush是指將數據真正寫到磁盤上後才返回。   有些帶電池的硬盤控制器,如帶電池的帶點出Dell PERC Raid卡,不但自帶緩存而且自帶電池,會在系統意外斷電或者崩潰後將最後的數據寫入磁盤,對這類控制器,可以使用disk flush,從而在保證性能的前提下提高了數據的安全性。   磁盤錯誤處理策略:   傳遞給上層:可能造成文件系統remounting成只讀,不推薦。   對上層屏蔽:用另一端的相應塊進行讀寫,應用不中斷。可以在任何方便的時候再切換。   不一致的(inconsistent)數據:不能以任何方式訪問和使用的數據。如正在同步時的目標節點數據,這些數據不能識別,不能mount,甚至不能通過磁盤的自動檢測。   過期的(outdated)數據:在備機上的數據,與主機一致,但不需要同步。如主備機網絡中斷後,備機上的數據就是過期的。   DRBD有接口允許應用程序在網絡中斷時將備機數據標識爲過期的。DRBD拒絕將這個節點提升爲主角色。這些管理接口在Heartbeat框架上得到完整實現。   一旦過期資源的複製鏈接恢復,他的過期標誌自動清除,接着進行後臺同步。 

工作原理

在高可用(HA)中使用DRBD功能,可以代替使用一個共享盤.因爲數據同時存在於本地主機和遠程主機上  切換時,遠程主機只要使用它上面的那份備份數據,就可以繼續進行服務了

注意: 主機名一定要設置,hostshostname 分區要單獨的分區,而且是沒有格式化的 文件系統只能同時掛載一個,而且是在主節點進行,格式化也只能是在主節點

配置步驟:

一、DRBD的實現

1.配置主機名和host文件
[[email protected] ~]# vim /etc/sysconfig/network

hostname masternfs
hostname slavenfs   (主機名立即生效)
[[email protected] resource.d]# vim /etc/hosts

192.168.1.100 masternfs

192.168.1.200 slavenfs

[[email protected] ~]# scp /etc/hosts 192.168.1.200:/etc/

2.新建磁盤分區
fdisk -l (查看一下)
fdisk /dev/sdb (分區)(分區步驟簡略)
partprobe /dev/sdb (使分區生效)
cat /proc/partitions (查看分區)
3.安裝drbd的軟件包(需要在網上下載軟件包,http://mirrors.163.com

[[email protected] ~]# rpm -ivh drbd83-8.3.12-1.el5.centos.i386.rpm (主的軟件包)

[[email protected] ~]# rpm -ivh kmod-drbd83-8.3.12-1.el5.centos.i686.rpm --force --nodeps (模塊的支持,安裝時需要解決依賴關係)

[[email protected] ~]# rpm -e drbd83-8.3.8-1.el5.centos (如何卸載軟件包)

[[email protected] ~]# scp masternfs:*.rpm ./ (拷貝到另一個設備上安裝)

4.編輯配置參數,可以查看安裝後的文件包

[[email protected] ~]# vim /etc/drbd.conf (編輯這個主配置參數)

:r /usr/share/doc/drbd83-8.3.12/drbd.conf (讀取這個文件夾)

[[email protected] ~]# cp -f /usr/share/doc/drbd83*/drbd.conf /etc/ (不然同步的時候會出錯)

cp -f /usr/share/doc/drbd83*/drbd.conf /etc/(把配置文件複製到/etc

[[email protected] ~]# cd /etc/drbd.d/ (主配置目錄)

[[email protected] drbd.d]# ll

總計 4

-rwxr-xr-x 1 root root 1418 2012-01-29 global_common.conf


cp global_common.conf global_common.conf.bak (備份一下,如果配置出錯,可以改)
[[email protected] drbd.d]# vim global_common.conf (拷貝一下編輯好的)

global {

        usage-count yes;

        # minor-count dialog-refresh disable-ip-verification

}

common {

        protocol C;

        startup {

                wfc-timeout  120;

                degr-wfc-timeout 120;

         }

        disk {

                  on-io-error detach;

                  fencing resource-only;

          }

        net {

                cram-hmac-alg "sha1";

                shared-secret  "mydrbdlab";

         }

        syncer {

                  rate  100M;

         }

}

[[email protected] drbd.d]# vim web.res(此網頁是自己要創建的後綴要是.res,此網頁是定義資源的

vim  web.res

resource  web {

        on masternfs{

        device   /dev/drbd0;

        disk    /dev/sdb1;

        address  192.168.1.100:7789;

        meta-disk       internal;

        }   

        on slavenfs {

        device   /dev/drbd0;

        disk    /dev/sdb1;

        address  192.168.1.200:7789;

        meta-disk       internal;

        }   

}

5.配置參數完成,拷貝到另一個機器上

[[email protected] drbd.d]# scp /etc/drbd.d/* slavenfs:/etc/drbd.d/ (拷貝資源文件和公共的文件)

[[email protected] drbd.d]# scp /etc/drbd.conf slavenfs:/etc/ (拷貝主配置文件)

6.drbd作爲服務需要啓動,但啓動之前要同步才能啓動。

[[email protected] drbd.d]# drbdadm create-md web (同步兩個節點都要執行)

Writing meta data...

initializing activity log

NOT initialized bitmap

New drbd meta data block successfully created. (提示成功)

7.開啓服務就連接上了

[[email protected] ~]# service drbd start (兩邊的同時)

[[email protected] drbd.d]# cat /proc/drbd    drbd-overview (兩種方式查看設備啓動的狀態)

 0:web  Connected Secondary/Secondary Inconsistent/Inconsistent C r-----

8.把節點一作爲一個主設備

[[email protected] drbd.d]# drbdadm -- --overwrite-data-of-peer primary web (設置爲主的)

9.在主設備上格式化文件系統 -L 是改卷標的可不加

[[email protected] drbd.d]# mkfs -t ext3 -L drbhua /dev/drbd0

10.新建掛載點,掛載上去

[[email protected] drbd.d]# mkdir /mnt/hua/

[[email protected] drbd.d]# mount /dev/drbd0 /mnt/hua/

[[email protected] drbd.d]# cd /mnt/hua/

[[email protected] hua]# ll

總計 16

drwx------ 2 root root 16384 12-30 22:24 lost+found

[[email protected] hua]# cp /etc/passwd ./ (拷貝一個文件用於測試,)

11.測試,需要把節點二備份的變成主的,則需要先把主的變成備份的

[[email protected] hua]# umount /mnt/hua/ (需要先卸載才能變成備份的)

[[email protected] ~]# drbdadm secondary web (變成備份的)

12.節點二上變成主的

[[email protected] ~]# drbdadm primary web (另一個)

[[email protected] ~]# mount /dev/drbd0 /mnt/hua/ 

[[email protected] ~]# cd /mnt/hua/ (進去查看可以查看文件已經有了)

[[email protected] hua]# ll

total 20

drwx------ 2 root root 16384 Dec 30  2012 lost+found

-rw-r--r-- 1 root root  1553 Dec 30  2012 passwd  (文件已經存在)

二.NFS上的配置

1.安裝nfs軟件,略

2.編輯共享的文件,兩節點都做下面的配置

[[email protected] ~]# vim /etc/exports 

/web *(rw)   (編輯的內容)

[[email protected] ~]# service nfs start 

[[email protected] ~]# showmount -e slavenfs (兩邊都配置完後,查看一下共享的文件是否已經可以看到)

[[email protected] ~]# vim /etc/init.d/nfs (把這個文件的值改一下)

122         killproc nfsd -9
#/etc/init.d/nfs 腳本中的stop 部分中的killproc
#nfsd -2 修改爲 -9
三、heartbeat的安裝配置

1實現heartbeat高可用需要一些軟件實現,需要安裝上去

[[email protected] ~]# mount /dev/cdrom /mnt/cdrom/

[[email protected] ~]# yum localinstall heartbeat-2.1.4-9.el5.i386.rpm heartbeat-pils-2.1.4-10.el5.i386.rpm heartbeat-stonith-2.1.4-10.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm libnet-1.1.4-3.el5.i386.rpm --nogpgcheck (localinstall本地安裝,--nogpgcheck,無簽名檢測)

2.查看

[[email protected] ~]# rpm -pql heartbeat-2.1.4-9.el5.i386.rpm (查看解壓後的文件夾有那些。)

[[email protected] ~]# cd /etc/ha.d/ (這個目錄是heartbeat的主配置目錄)

[[email protected] ha.d]# cd /usr/share/doc/heartbeat-2.1.4/ (安裝後的配置文件)

3.[[email protected] heartbeat-2.1.4]# cp ha.cf authkeys haresources  /etc/ha.d/ (把配置文件拷貝過來)

4.[[email protected] ha.d]# vim ha.cf  (編輯這個心跳文件參數,編輯如下)

ucast  eth0 192.168.1.100 (對方的ip地址,另一臺寫1.200

auto_failback off

213 node    masternfs  

214 node    slavenfs (兩個節點的地址)

5[[email protected] ~]# dd if=/dev/random bs=512 count=1 |openssl md5 (隨機產生一個參數用md5加密)

0+1 records in

0+1 records out

128 bytes (128 B) copied, 0.000308478 seconds, 415 kB/s

9bf2f23aae3a63c16ea681295ffd7666

6[[email protected] ha.d]# vim authkeys (編輯認證文件)

auth 3

3 md5 9bf2f23aae3a63c16ea681295ffd7666

[[email protected] ha.d]# chmod 600 authkeys  (改變它的權限爲600,不然重啓不成功)

7.配置資源文件,把參數直接追加進去了
echo "masternfs IPaddr::192.168.1.150/24/eth0 drbddisk::web Filesystem::/dev/drbd0::/web::ext3 killnfsd" >> haresources
解釋:192.168.1.150,是虛擬ip地址,/web是共享的文件
8.還需要創建一個文件關於nfs的,要受到heartbeat的控制

[[email protected] ha.d]# cd /etc/ha.d/resource.d/

[[email protected] resource.d]# touch killnfsd
chmod 755 /etc/ha.d/resource.d/killnfsd  (改變它的權限)
echo "killall -9 nfsd; /etc/init.d/nfs restart; exit 0 " >> /etc/ha.d/resource.d/killnfsd (把參數追加上去)


8.把配置拷貝到節點二上去,唯一改變的是心跳網卡地址

9.啓動heartbeat服務,兩邊都啓動

service heartbeat start
chkconfig heartbeat on

10.查看是主節點還是從節點,如下圖所示,當heartbeats 停止時主設備變成了備份的,而另一端變成了主的



11.拷貝文件驗證
[[email protected] web]# ls
inittab lost+found--------驗證此時文件仍然存在

12.ifconfig 查看網卡,發現多了一個,虛擬網卡,主要是把資源徵用了