DRBD+Heartbeat+NFS配置高可用性網絡

一.DRBD簡介

    分佈式複製塊設備(DRBD技術)是一種基於軟件的,無共享,複製的存儲解決方案,在服務器之間的對塊設備(硬盤,分區,邏輯卷等)進行鏡像。

    DRBD鏡像數據具有實時性,透明性與同步鏡像和異步鏡像等特點

    DRBD的兩種模式,單主模式與雙主模式

    1.單主模式是不論任何資源在任何特定的時間,集羣之中只存在一個主節點,並且只能在主模式下操作數據,這個模式可以在任何文件系統中使用。

    2.雙主模式是在DRBD8.0之後才加入的新特性,它是在集羣中有兩個主節點,這種模式需要一個集羣文件系統,利用分佈工的鎖機制進行管理,如:GFS和OCFS2

DRBD提供了三種複製方式,我們先看下DRBD在LINUX的I/0堆棧中的位置

 

    1.協議A:本地磁盤寫入成功,數據包已在發送隊列中,就被認爲是完成操作,通俗點講就是在主節點寫入已經成功後,但是數據包還在發送隊列中,並沒有到達備用節點,就被主節點認爲是完成了全部的讀寫操作,顯然可能在備用節點如果發生故障時,並沒有收到數據包,主節點也認爲數據已經發送成功,顯然不合理,這種主要用在地理上分開的節點!

簡言之:數據一旦寫入磁盤併發送到網絡中就認爲完成了寫入操作

    2.協議B:本地磁盤已寫入完成且複製數據包達到了對等節點,則被認爲是完成操作。但是如果在節點往磁盤寫數據時時候,發生故障的話,數據還是不能在對等節點上寫入磁盤成功。

 簡言之:收到接收確認就認爲完成了寫入操作

    3.協議C:在本地和遠程節點的磁盤都已經確認了寫入操作完成才被認爲操作完成。這是羣集節點的流行模式,但I/0吞吐量依賴於網絡帶寬。

 簡言之:收到一定程度確認才認爲完成寫入操作

 

二.實例            

1.拓撲圖

  

 

 

    2.實驗要求

   本實驗使用Heartbeat,NFS與DRBD技術來實現兩個節點之間的數據的同步,並且通過Heardbeat實現故障轉移,保證服務的不間斷!

3.IP地址配置

     按照拓撲圖的規劃,對IP地址進行配置

4.DRBD配置

  節點一:drbd1.a.com

    1> 修改主機名

     [[email protected] ~]# vim /etc/sysconfig/network      主機名修改如下

     HOSTNAME=drbd1.a.com

     [[email protected] ~]# hostname drbd1.a.com          不用註銷,重新登錄即可修改

    2> 同步系統時間RTC

       [[email protected] ~]# hwclock -s

    3> 配置服務器可相互解析

        [[email protected] ~]# vim /etc/hosts      添加如下內容

          192.168.2.10       drbd1.a.com

          192.168.2.20       drbd2.a.com

    4> 安裝DRBD軟件

    [[email protected] ~]# rpm -ivh drbd83-8.3.8-1.el5.centos.i386.rpm   //主文件安裝

        [[email protected] ~]# rpm -ivh kmod-drbd83-8.3.8-1.el5.centos.i686.rpm //內核文件安裝

    5> 加載內核

       [[email protected] ~]# modprobe drbd

    6> 配置主文件

       [[email protected] ~]# vim /etc/drbd.conf     在末行模式下輸入如下命令

       

 

   將得到如下內容

   

 

  7> 創建一個共享空間

     

 

  8> 配置全局文件

     [[email protected] ~]# cd /etc/drbd.d

     [[email protected] drbd.d]# cp global_common.conf global_common.conf.bak  //備份文件

     [[email protected] drbd.d]# vim global_common.conf    修改如下

       

    global {

        usage-count no;                           //取消DRBD使用者統計

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

}

common {

        protocol C;                              //使用協議C

        startup {

                wfc-timeout  120;               //啓動延遲

                degr-wfc-timeout 120;

         }

        disk {                                 //fence防腦裂

                  on-io-error detach;

                  fencing resource-only;

          }

        net {

                cram-hmac-alg "sha1";           //主備節點使用的通信算法

                shared-secret  "mydrbdlab";

         }

        syncer {

                  rate  100M;                   //主備節點同步速率

         }

}

 

    9> 定義資源

       [[email protected] ~]# vim web.res

 

 

節點二:drbd2.a.com配置

      1> 修改主機名

     [[email protected] ~]# vim /etc/sysconfig/network      主機名修改如下

     HOSTNAME=drbd2.a.com

     [[email protected] ~]# hostname drbd2.a.com          不用註銷,重新登錄即可修改

    2> 同步系統時間RTC

       [[email protected]~]# hwclock -s

    3> 配置服務器可相互解析

        [[email protected] ~]# vim /etc/hosts      添加如下內容

          192.168.2.10       drbd1.a.com

          192.168.2.20       drbd2.a.com

    4> 安裝DRBD軟件

    [[email protected] ~]# rpm -ivh drbd83-8.3.8-1.el5.centos.i386.rpm   //主文件安裝

        [[email protected] ~]# rpm -ivh kmod-drbd83-8.3.8-1.el5.centos.i686.rpm //內核文件安裝

    5> 加載內核

       [[email protected] ~]# modprobe drbd

    6> 配置主文件

       [[email protected] ~]# vim /etc/drbd.conf     在末行模式下輸入如下命令

       

 

   將得到如下內容

   

 

  7> 創建一個共享空間

    

 

  8> 配置全局文件

     [[email protected] ~]# cd /etc/drbd.d

     [[email protected] drbd.d]# cp global_common.conf global_common.conf.bak  //備份文件

     [[email protected] drbd.d]# vim global_common.conf    修改如下

       

    global {

        usage-count no;                           //取消DRBD使用者統計

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

}

common {

        protocol C;                              //使用協議C

        startup {

                wfc-timeout  120;               //啓動延遲

                degr-wfc-timeout 120;

         }

        disk {                                 //fence防腦裂

                  on-io-error detach;

                  fencing resource-only;

          }

        net {

                cram-hmac-alg "sha1";           //主備節點使用的通信算法

                shared-secret  "mydrbdlab";

         }

        syncer {

                  rate  100M;                   //主備節點同步速率

         }

}

 

    9> 定義資源

       [[email protected] ~]# vim web.res

 

 

  5.在節點1 與節點2上初始化資源web

   [[email protected] ~]# drbdadm create-md web

      Writing meta data...

      initializing activity log

      NOT initialized bitmap

      New drbd meta data block successfully created.

   [[email protected] ~]# drbdadm create-md web

      Writing meta data...

       initializing activity log

       NOT initialized bitmap

       New drbd meta data block successfully created.

  6.啓動drbd服務

注意兩個節點要一起啓動,否則在啓動時會處於一直等待狀態

[[email protected] ~]# service drbd start

[[email protected] ~]# service drbd start

  7.查看節點狀態

    在節點一上查看

    [[email protected] ~]# drbd-overview 

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

    在節點二上查看    

   [[email protected] ~]# drbd-overview 

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

 web:資源名

 Secondary/Secondary:自身狀態/另外節點狀態

  由上面的兩個節點的狀態可看到,兩個節點都是備用節點,我們需要手動調整

   8.將drbd1.a.com調整爲主節點

     [[email protected] ~]# drbdadm -- --overwrite-data-of-peer primary web

   9.再次查看狀態

     節點一

      [[email protected] ~]# drbd-overview 

       0:web  Connected Primary/Secondary UpToDate/UpToDate C r---- 

      節點二

      [[email protected] ~]# drbd-overview 

      0:web  Connected Secondary/Primary UpToDate/UpToDate C r----

可以看出drbd1.a.com已經成爲主節點了

10.在主節點上創建文件系統

      [[email protected] ~]# mkfs.ext3 -L drbdweb /dev/drbd0         L:卷名

   11.測試

     1> 在主節點上創建掛載點,掛載後,寫入一個文件

      [[email protected] ~]# mkdir /mnt/drbd

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

        [[email protected] ~]# cd /mnt/drbd

        [[email protected] drbd]# touch index.html

        [[email protected] drbd]# ll

        total 16

        -rw-r--r-- 1 root root     0 Jan 20 18:09 index.html

        drwx------ 2 root root 16384 Jan 20 18:07 lost+found

        [[email protected] drbd]# 

     2> 將drbd1.a.com配置成從節點,將drbd2.a.com配置成主節點

        節點一

        [[email protected] drbd]# cd 

        [[email protected] ~]# 

        [[email protected] ~]# umount /mnt/drbd

        [[email protected] ~]# drbdadm secondary web

        [[email protected] ~]# drbdadm role web

        Secondary/Primary        

        [[email protected] ~]#  

       節點二

        [[email protected] ~]# drbdadm primary web

        [[email protected] ~]# drbd-overview 

        0:web  Connected Primary/Secondary UpToDate/UpToDate C r---- 

     3> 在節點二掛載,查看是否有內容

        [[email protected] ~]# mkdir /mnt/drbd

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

        [[email protected] ~]# ll /mnt/drbd/

       total 16

       -rw-r--r-- 1 root root     0 Jan 20 18:09 index.html    //可以看到已經寫入成功

       drwx------ 2 root root 16384 Jan 20 18:07 lost+found