drbd詳解

目錄
 一、DRBD簡介
 二、DRBD的特性
 三、DRBD的用戶空間管理工具
 四、DRBD的模式
 五、DRBD的同步協議
 六、DRBD的資源
 七、DRBD的配置文件詳解
 八、實戰,使用drbd+mysql+Corosync來實現mysql的高可用集羣解決方案
 

一、DRBD簡介
DRBD:叫做分佈式複製塊設備,這是一種基於軟件,無共享,複製的解決方案。在服務器之間的塊設備(包括硬盤、分區、邏輯卷)進行鏡像。也就是說當某一個應用程序完成寫操作後,它提交的數據不僅僅會保存在本地塊設備上,DRBD也會將這份數據複製一份,通過網絡傳輸到另一個節點的塊設備上,這樣,兩個節點上的塊設備上的數據將會保存一致,這就是鏡像功能。


二、DRBD的特性
DRBD具有如下特性:
1)實時性:當某個應用程序完成對數據的修改時,複製功能立即發生
2)透明性:應用程序的數據存儲在鏡像塊設備上是獨立透明的,他們的數據在兩個節點上都保存一份,因此,無論哪一臺服務器宕機,都不會影響應用程序讀取數據的操作,所以說是透明的。
3)同步鏡像和異步鏡像:同步鏡像表示當應用程序提交本地的寫操作後,數據後會同步寫到兩個節點上去;異步鏡像表示當應用程序提交寫操作後,只有當本地的節點上完成寫操作後,另一個節點纔可以完成寫操作。


三、drbd的用戶空間管理工具
爲了能夠配置和管理drbd的資源,drbd提供了一些管理工具與內核模塊進行通信
drbdadm:高級的DRBD程序管理套件工具。它從配置文件/etc/drbd.conf中獲取所有配置參數。drbdadm爲drbdsetup和drbdmeta兩個命令充當程序的前端應用,執行drbdadm實際是執行的drbdsetup和drbdeta兩個命令。

drbdsetup:drbdsetup可以讓用戶配置已經加載在內核中運行的DRBD模塊,它是底層的DRBD程序管理套件工具。使用該命令時,所有的配置參數都需要直接在命令行中定義,雖然命令很靈活,但是大大的降低了命令的簡單易用性,因此很多的用戶很少使用drbdsetup。

drbdmeta:drbdmeta允許用戶創建、轉儲、還原和修改drbd的元數據結構。這個命令也是用戶極少用到。


四、DRBD的模式
DRBD有2中模式,一種是DRBD的主從模式,另一種是DRBD的雙主模式
1、DRBD的主從模式
這種模式下,其中一個節點作爲主節點,另一個節點作爲從節點。其中主節點可以執行讀、寫操作;從節點不可以掛載文件系統,因此,也不可以執行讀寫操作。在這種模式下,資源在任何時間只能存儲在主節點上。這種模式可用在任何的文件系統上(EXT3、EXT4、XFS等等)。默認這種模式下,一旦主節點發生故障,從節點需要手工將資源進行轉移,且主節點變成從節點和從節點變成主節點需要手動進行切換。不能自動進行轉移,因此比較麻煩。
爲了解決手動將資源和節點進行轉移,可以將DRBD做成高可用集羣的資源代理(RA),這樣一旦其中的一個節點宕機,資源會自動轉移到另一個節點,從而保證服務的連續性。

2、DRBD的雙主模式
這是DRBD8.0之後的新特性
在雙主模式下,任何資源在任何特定的時間都存在兩個主節點。這種模式需要一個共享的集羣文件系統,利用分佈式的鎖機制進行管理,如GFS和OCFS2。部署雙主模式時,DRBD可以是負載均衡的集羣,這就需要從兩個併發的主節點中選取一個首選的訪問數據。這種模式默認是禁用的,如果要是用的話必須在配置文件中進行聲明。


五、DRBD的同步協議
DRBD的複製功能就是將應用程序提交的數據一份保存在本地節點,一份複製傳輸保存在另一個節點上。但是DRBD需要對傳輸的數據進行確認以便保證另一個節點的寫操作完成,就需要用到DRBD的同步協議,DRBD同步協議有三種:
協議A:數據在本地完成寫操作且數據已經發送到TCP/IP協議棧的隊列中,則認爲寫操作完成。如果本地節點的寫操作完成,此時本地節點發生故障,而數據還處在TCP/IP隊列中,則數據不會發送到對端節點上。因此,兩個節點的數據將不會保持一致。這種協議雖然高效,但是並不能保證數據的可靠性。
協議B:數據在本地完成寫操作且數據已到達對端節點則認爲寫操作完成。如果兩個節點同時發生故障,即使數據到達對端節點,這種方式同樣也會導致在對端節點和本地節點的數據不一致現象,也不具有可靠性。
協議C:只有當本地節點的磁盤和對端節點的磁盤都完成了寫操作,才認爲寫操作完成。這是集羣流行的一種方式,應用也是最多的,這種方式雖然不高效,但是最可靠。

 

六、DRBD的資源
在DRBD中,資源是所有可複製移動存儲設備的總稱,它包括:
資源名稱:資源名稱可以是除了空白字符以外的任意ASCII碼字符
DRBD設備:DRBD的虛擬塊設備。在雙方節點上,DRBD設備的設備文件命名方式;一般爲/dev/drbdN,其主設備號147,N是次設備號
磁盤配置:DRBD內部應用需要本地數據副本,元數據。在雙方節點上,爲各自提供的存儲設備。
網絡配置:雙方數據同步時所使用的網絡屬性;

 

七、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的默認中進行繼承而無須定義。

[root@ha1 ~]# cat /etc/drbd.d/global_common.conf
global {
 usage-count yes;         //DRBD用於統計應用各個版本的信息。當新的版本的drbd被安裝就會和http server進行聯繫。當然也可以禁用該選項,默認情況下是啓
 # minor-count dialog-refresh disable-ip-verification  //這裏是global可以使用的參數
 #minor-count:32         //從(設備)個數,取值範圍1~255,默認值爲32。該選項設定了允許定義的resource個數,當要定義的resource超過了此選項的設定時,需要重新載入drbd內核模塊。
 #disable-ip-verification:no   //是否禁用ip檢查
 
}

common {
 protocol C;      //指定複製協議,複製協議共有三種,爲協議A,B,C,默認協議爲協議C

 handlers {   該配置段用來定義一系列處理器,用來回應特定事件。
  # These are EXAMPLE handlers only.
  # They may have severe implications,
  # like hard resetting the node under certain circumstances.
  # Be careful when chosing your poison.

  # 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 {   該配置段用來更加精細地調節drbd屬性,它作用於配置節點在啓動或重啓時。常用選項有:
  # wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb
  wfc-timeout:該選項設定一個時間值,單位是秒。在啓用DRBD塊時,初始化腳本drbd會阻塞啓動進程的運行,直到對等節點的出現。該選項就是用來限制這個等待時間的,默認爲0,即不限制,永遠等待。
  degr-wfc-timeout:該選項也設定一個時間值,單位爲秒。也是用於限制等待時間,只是作用的情形不同:它作用於一個降級集羣(即那些只剩下一個節點的集羣)在重啓時的等待時間。
  outdated-wfc-timeout:同上,也是用來設定等待時間,單位爲秒。它用於設定等待過期節點的時間
 }

 disk {
  # on-io-error fencing use-bmbv no-disk-barrier no-disk-flushes   這裏是disk段內可以定義的參數
  # no-disk-drain no-md-flushes max-bio-bvecs                      這裏是disk段內可以定義的參數
  on-io-error: detach   //選項:此選項設定了一個策略,如果底層設備向上層設備報告發生I/O錯誤,將按照該策略進行處理。有效的策略包括:
    detach    //發生I/O錯誤的節點將放棄底層設備,以diskless mode繼續工作。在diskless mode下,只要還有網絡連接,drbd將從secondary node讀寫數據,而不需要failover(故障轉移)。該策略會導致一定的損失,但好處也很明顯,drbd服務不會中斷。官方推薦和默認策略。
    pass_on   //把I/O錯誤報告給上層設備。如果錯誤發生在primary節點,把它報告給文件系統,由上層設備處理這些錯誤(例如,它會導致文件系統以只讀方式重新掛載),它可能會導致drbd停止提供服務;如果發生在secondary節點,則忽略該錯誤(因爲secondary節點沒有上層設備可以報告)。該策略曾經是默認策略,但現在已被detach所取代。
    call-local-io-error  //調用預定義的本地local-io-error腳本進行處理。該策略需要在resource(或common)配置段的handlers部分,預定義一個相應的local-io-error命令調用。該策略完全由管理員通過local-io-error命令(或腳本)調用來控制如何處理I/O錯誤。
  fencing:              //該選項設定一個策略來避免split brain的狀況。有效的策略包括:
    dont-care:默認策略。不採取任何隔離措施。
    resource-only:在此策略下,如果一個節點處於split brain狀態,它將嘗試隔離對端節點的磁盤。這個操作通過調用fence-peer處理器來實現。fence-peer處理器將通過其它通信路徑到達對等節點,並在這個對等節點上調用drbdadm outdate res命令
    resource-and-stonith:在此策略下,如果一個節點處於split brain狀態,它將停止I/O操作,並調用fence-peer處理器。處理器通過其它通信路徑到達對等節點,並在這個對等節點上調用drbdadm outdate res命令。如果無法到達對等節點,它將向對等端發送關機命令。一旦問題解決,I/O操作將重新進行。如果處理器失敗,你可以使用resume-io命令來重新開始I/O操作。 
  
 }

 net {     //該配置段用來精細地調節drbd的屬性,網絡相關的屬性。常用的選項有:
  # sndbuf-size rcvbuf-size timeout connect-int ping-int ping-timeout max-buffers     這裏是net段內可以定義的參數
  # max-epoch-size ko-count allow-two-primaries cram-hmac-alg shared-secret   這裏是net段內可以定義的參數
  # after-sb-0pri after-sb-1pri after-sb-2pri data-integrity-alg no-tcp-cork   這裏是net段內可以定義的參數
  sndbuf-size:該選項用來調節TCP send buffer的大小,drbd 8.2.7以前的版本,默認值爲0,意味着自動調節大小;新版本的drbd的默認值爲128KiB。高吞吐量的網絡(例如專用的千兆網卡,或負載均衡中綁定的連接)中,增加到512K比較合適,或者可以更高,但是最好不要超過2M。
  timeout:該選項設定一個時間值,單位爲0.1秒。如果搭檔節點沒有在此時間內發來應答包,那麼就認爲搭檔節點已經死亡,因此將斷開這次TCP/IP連接。默認值爲60,即6秒。該選項的值必須小於connect-int和ping-int的值。
  connect-int:如果無法立即連接上遠程DRBD設備,系統將斷續嘗試連接。該選項設定的就是兩次嘗試間隔時間。單位爲秒,默認值爲10秒。
  ping-timeout:該選項設定一個時間值,單位是0.1秒。如果對端節點沒有在此時間內應答keep-alive包,它將被認爲已經死亡。默認值是500ms。
  max-buffers:該選項設定一個由drbd分配的最大請求數,單位是頁面大小(PAGE_SIZE),大多數系統中,頁面大小爲4KB。這些buffer用來存儲那些即將寫入磁盤的數據。最小值爲32(即128KB)。這個值大一點好。
  max-epoch-size:該選項設定了兩次write barriers之間最大的數據塊數。如果選項的值小於10,將影響系統性能。大一點好
  ko-count:該選項設定一個值,把該選項設定的值 乘以 timeout設定的值,得到一個數字N,如果secondary節點沒有在此時間內完成單次寫請求,它將從集羣中被移除(即,primary node進入StandAlong模式)。取值範圍0~200,默認值爲0,即禁用該功能。
  allow-two-primaries:這個是drbd8.0及以後版本才支持的新特性,允許一個集羣中有兩個primary node。該模式需要特定文件系統的支撐,目前只有OCFS2和GFS可以,傳統的ext3、ext4、xfs等都不行!
  cram-hmac-alg:該選項可以用來指定HMAC算法來啓用對端節點授權。drbd強烈建議啓用對端點授權機制。可以指定/proc/crypto文件中識別的任一算法。必須在此指定算法,以明確啓用對端節點授權機制,實現數據加密傳輸。
  shared-secret:該選項用來設定在對端節點授權中使用的密碼,最長64個字符。
  data-integrity-alg:該選項設定內核支持的一個算法,用於網絡上的用戶數據的一致性校驗。通常的數據一致性校驗,由TCP/IP頭中所包含的16位校驗和來進行,而該選項可以使用內核所支持的任一算法。該功能默認關閉。
 }

 syncer {   該配置段用來更加精細地調節服務的同步進程。常用選項有
  # rate after al-extents use-rle cpu-mask verify-alg csums-alg
  rate:設置同步時的速率,默認爲250KB。默認的單位是KB/sec,也允許使用K、M和G,如40M。注意:syncer中的速率是以bytes,而不是bits來設定的。配置文件中的這個選項設置的速率是永久性的,但可使用下列命令臨時地改變rate的值:drbdsetup /dev/drbdN syncer -r 100M。如果想重新恢復成drbd.conf配置文件中設定的速率,執行如下命令: drbdadm adjust resource
  verify-alg:該選項指定一個用於在線校驗的算法,內核一般都會支持md5、sha1和crc32c校驗算法。在線校驗默認關閉,必須在此選項設定參數,以明確啓用在線設備校驗。DRBD支持在線設備校驗,它以一種高效的方式對不同節點的數據進行一致性校驗。在線校驗會影響CPU負載和使用,但影響比較輕微。drbd 8.2.5及以後版本支持此功能。一旦啓用了該功能,你就可以使用下列命令進行一個在線校驗: drbdadm verify resource。該命令對指定的resource進行檢驗,如果檢測到有數據塊沒有同步,它會標記這些塊,並往內核日誌中寫入一條信息。這個過程不會影響正在使用該設備的程序。
如果檢測到未同步的塊,當檢驗結束後,你就可以如下命令重新同步它們:drbdadm disconnect resource   or   drbdadm connetc resource 
 }
}

common段是用來定義共享的資源參數,以減少資源定義的重複性。common段是非必須的。resource段一般爲DRBD上每一個節點來定義其資源參數的。
資源配置文件詳解
[root@ha1 ~]# cat /etc/drbd.d/web.res
resource web {       web爲資源名稱
 on ha1.xsl.com {                       on後面爲節點的名稱,有幾個節點就有幾個on段,這裏是定義節點ha1.xsl.com上的資源
  device   /dev/drbd0;    定義DRBD虛擬塊設備,這個設備不要事先不要格式化
  disk /dev/sda6;     定義存儲磁盤爲/dev/sda6,該分區創建完成之後就行了,不要進行格式化操作
  address 192.168.108.199:7789;  定義DRBD監聽的地址和端口,以便和對端進行通信
  meta-disk  internal;    該參數有2個選項:internal和externally,其中internal表示將元數據和數據存儲在同一個磁盤上;而externally表示將元數據和數據分開存儲,元數據被放在另一個磁盤上。
 }
 on ha2.xsl.com {      這裏是定義節點ha2.xsl.com上的資源
  device /dev/drbd0;
  disk /dev/sda6;
  address 192.168.108.201:7789;
  meta-disk internal;
 }
}
  

八、實戰,使用drbd+mysql+Corosync來實現mysql的高可用集羣解決方案
這一部分將在下篇介紹

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