DRBD原理知識

DRBD(Distributed Relicated Block Device 分佈式複製塊設備), 能夠解決磁盤單點故障。通常狀況下只支持2個節點。緩存

大體工做原理以下圖:bash

2

通常狀況下文件寫入磁盤的步驟是: 寫操做 --> 文件系統 --> 內存緩存中 --> 磁盤調度器 --> 磁盤驅動器 --> 寫入磁盤。而DRBD的工做機制如上圖所示,數據通過buffer cache後有內核中的DRBD模塊經過tcp/ip協議棧通過網卡和對方創建數據同步。ssh

1、DRBD的工做模式

一、主從模型master/slave(primary/secondary)

這種機制,在某一時刻只容許有一個主節點。主節點的做用是能夠掛在使用,寫入數據等;從節點知識做爲主節點的鏡像,是主節點的備份。異步

這樣的工做機制的好處是能夠有效的避免磁盤出現單點故障,不會文件系統的錯亂。async

二、雙主模型 dula primary(primary/primary)

所謂雙主模型是2個節點均可以當作主節點來掛載使用。那麼,思考這樣一個問題?當第一個主節點對某一文件正在執行寫操做,此時另外一個節點也正在對同一文件也要執行寫操做,結果會如何呢??tcp

通常這種狀況會形成文件系統的錯亂,致使數據不能正常使用。緣由是:對文件的加鎖機制是由操做系統內核所管理的,一個節點對文件加速以後,另外一個節點並不知道對方的鎖信息。分佈式

解決辦法是:使用集羣文件系統。集羣文件系統使用分佈式文件鎖管理器,當一個節點對文件加鎖以後會經過某種機制來通知其餘節點鎖信息,從而實現文件鎖共享。ide

2、DRBD的複製模型

當某一進程對某一文件執行了寫操做時,寫操做在上圖執行到那個過程時就認爲文件已經同步完成。工具

複製協議:

A協議:異步複製(asynchronous)如上圖 文件寫操做執行到A點是就認爲寫入磁盤成功。性能好,數據可靠性差。性能

B協議:半同步複製(semi sync)如上圖 文件寫操做執行到B點是就認爲寫入磁盤成功。性能好,數據可靠性介於A和C之間。

C協議:同步複製( sync)如上圖 文件寫操做執行到C點是就認爲寫入磁盤成功。性能差,數據可靠性高。也是drbd默認使用的複製協議

3、drbd的配置(主從模式)

實驗環境:

2個節點:

172.16.10.50 director1.example.com

172.16.10.51 director2.example.com

一、準備工做

# drbd 2個節點之間通訊是基於主機名的
# 設置主機名和主機名解析文件

4

3

# 準備好大小相同的磁盤,這裏使用大小相同的分區代替。只需劃好分區就好,不須要格式化。

5

6

二、安裝軟件包

drbd共有兩部分組成:內核模塊和用戶空間的管理工具。
其中drbd內核模塊代碼已經整合進Linux內核2.6.33之後的版本中,所以,若是內核版本高於
此版本的話,只須要安裝管理工具便可;不然,您須要同時安裝內核模塊和管理工具兩個軟件包,
而且此二者的版本號必定要保持對應。

# 對應的內核模塊的名字分別爲 drbd-kmod
注意:
drbd和drbd-kmdl的版本要對應;另外一個是drbd-kmdl的版本要與當前系統的內核版本(uname -r)相
   對應。
下載地址:   直接安裝便可。


7

8

三、配置drbd

配置文件說明:

drbd的主配置文件爲/etc/drbd.conf;爲了管理的便捷性,目前一般會將些配置文件分紅多個部分,
且都保存至/etc/drbd.d/目錄中,
主配置文件中僅使用"include"指令將這些配置文件片段整合起來。一般,/etc/drbd.d目錄中的配置
文件爲global_common.conf和全部以.res結尾的文件。
其中global_common.conf中主要定義global段和common段,而每個.res的文件用於定義一個資源。 

在配置文件中,global段僅能出現一次,且若是全部的配置信息都保存至同一個配置文件中而不分開
爲多個文件的話,global段必須位於配置文件的最開始處。
目前global段中能夠定義的參數僅有minor-count, dialog-refresh, disable-ip-verification
  和usage-count。 

common段則用於定義被每個資源默認繼承的參數,能夠在資源定義中使用的參數均可以在common段
中定義。
實際應用中,common段並不是必須,但建議將多個資源共享的參數定義爲common段中的參數以下降配置
文件的複雜度。 

resource段則用於定義drbd資源,每一個資源一般定義在一個單獨的位於/etc/drbd.d目錄中的以.res結
尾的文件中。
資源在定義時必須爲其命名,名字能夠由非空白的ASCII字符組成。
每個資源段的定義中至少要包含兩個host子段,以定義此資源關聯至的節點,其它參數都可以從
    common段或drbd的默認中進行繼承而無須定義。配置過程:
###############下面的操做在director1.example.com上完成。

# 1 配置/etc/drbd.d/global-common.conf
global {
        usage-count no; # 是否爲drbd官方收集數據
        # minor-count dialog-refresh disable-ip-verification
}
# common是各個資源共用的選項
common {
        protocol C; # 複製協議

        handlers {
                pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh;
                /usr/lib/drbd/notify-emergency-reboot.sh;
                echo b > /proc/sysrq-trigger ; reboot -f";
                pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh;
                 /usr/lib/drbd/notify-emergency-reboot.sh;
                echo b > /proc/sysrq-trigger ; reboot -f";
                local-io-error "/usr/lib/drbd/notify-io-error.sh; 
                /usr/lib/drbd/notify-emergency-shutdown.sh;
                echo o > /proc/sysrq-trigger ; halt -f";
                # fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
                # split-brain "/usr/lib/drbd/notify-split-brain.sh root";
                # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
   # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
                # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
        }

        startup {
                #wfc-timeout 120;
                #degr-wfc-timeout 120;
        }

        disk {
                on-io-error detach; # 發生i/o錯誤的處理方法,detach將鏡像磁盤直接拔除
                #fencing resource-only;
        }

        net {
                cram-hmac-alg "sha1";
                shared-secret "mydrbdlab";
        }

        syncer {
                rate 1000M;
        }
}

二、定義一個資源/etc/drbd.d/test.res,內容以下:
resource test {
  on director1.example.com {
    device    /dev/drbd0;
    disk      /dev/sda3;
    address   172.16.10.50:7789;
    meta-disk internal;
  }
  on director2.example.com {
    device    /dev/drbd0;
    disk      /dev/sda3;
    address   172.16.10.51:7789;
    meta-disk internal;
  }
}

以上文件在兩個節點上必須相同,所以,能夠基於ssh將剛纔配置的文件所有同步至另一個節點。

scp  /etc/drbd.d/*  director2.example.com:/etc/drbd.d

在兩個節點上初始化已定義的資源並啓動服務

1)初始化資源,在 director1 和 director2上分別執行:
drbdadm create-md test 

2)啓動服務,在 director1 和 director2 上分別執行:
/etc/init.d/drbd start


完成以上2步驟後,查看啓動狀態:

9

10

完成以上操做後,繼續下面操做。同步metadata(元數據)

# 將director1.example.com 節點設置爲Primary。在要設置爲Primary的節點上執行以下命令:
drbdadm primary --force test

11

接下來建立文件系統,掛載使用

mke2fs -t ext4 -L DRBD /dev/drbd0
mount /dev/drbd0 /mnt/

12

配置完成。

3、主從節點切換

drbd主從模型只有主節點才能掛載使用。因此就會有升級降級的操做。對主Primary/Secondary模型的drbd服務來說,在某個時刻只能有一個節點爲Primary,所以,要切換兩個節點的角色,只能在先將原有的Primary節點設置爲Secondary後,才能原來的Secondary節點設置爲Primary。

具體使用以下:

13

14

這樣的切換需手動升級,降級。一般drbd會於HA一塊兒使用來達到自動切換的效果,此時drbd是HA的一種clone資源。

drbd的雙主模型,需藉助於集羣文件系統,在之後會詳細介紹。

相關文章
相關標籤/搜索