DRBD詳細解說


一、DRBD介紹
DRBD(Distributed ReplicatedBlock Device)是一種基於軟件的,無共享,分布式塊設備復制的存儲解決方案,在服務器之間的對塊設備(硬盤,分區,邏輯卷等)進行鏡像。也就是說當某一個應用程序完成寫操作后,它提交的數據不僅僅會保存在本地塊設備上,DRBD也會將這份數據復制一份,通過網絡傳輸到另一個節點的塊設備上,這樣,兩個節點上的塊設備上的數據將會保存一致,這就是鏡像功能。
  
DRBD是由內核模塊和相關腳本而構成,用以構建高可用性的集群,其實現方式是通過網絡來鏡像整個設備。它允許用戶在遠程機器上建立一個本地塊設備的實時鏡像,與心跳連接結合使用,可以把它看作是一種網絡RAID,它允許用戶在遠程機器上建立一個本地塊設備的實時鏡像。
  
DRBD工作在內核當中,類似於一種驅動模塊。DRBD工作的位置在文件系統的buffer cache和磁盤調度器之間,通過tcp/ip發給另外一台主機到對方的tcp/ip最終發送給對方的drbd,再由對方的drbd存儲在本地對應磁盤 上,類似於一個網絡RAID-1功能。在高可用(HA)中使用DRBD功能,可以代替使用一個共享盤陣。本地(主節點)與遠程主機(備節點)的數據可以保 證實時同步。當本地系統出現故障時,遠程主機上還會保留有一份相同的數據,可以繼續使用。
二、DRDB的工作原理
DRBD是linux的內核的存儲層中的一個分布式存儲系統,可用使用DRBD在兩台Linux服務器之間共享塊設備,共享文件系統和數據。類似於一個網絡RAID-1的功能,
其工作原理的架構圖如下:
DRBD底層設備支持
DRBD需要構建在底層設備之上,然后構建出一個塊設備出來。對於用戶來說,一個DRBD設備,就像是一塊物理的磁盤,可以在上面內創建文件系統。
DRBD所支持的底層設備有以下這些類:
1)一個磁盤,或者是磁盤的某一個分區;
2)一個soft raid 設備;
3)一個LVM的邏輯卷;
4)一個EVMS(Enterprise Volume Management System,企業卷管理系統)的卷;
5)其他任何的塊設備。
DRBD工作原理
DRBD是一種塊設備,可以被用於高可用(HA)之中.它類似於一個網絡RAID-1功能.當你將數據寫入本地 文件系統時,數據還將會被發送到網絡中另一台主機上.以相同的形式記錄在一個文件系統中。 本地(主節點)與遠程主機(備節點)的數據可以保證實時同步.當本地系統出現故障時,遠程主機上還會 保留有一份相同的數據,可以繼續使用.在高可用(HA)中使用DRBD功能,可以代替使用一個共享盤陣.因為數據同時存在於本地主機和遠程主機上,切換時,遠程主機只要使用它上面的那份備份數據,就可以繼續進行服務了。
DRBD是如何工作的(工作機制)
(DRBD Primary)負責接收數據,把數據寫到本地磁盤並發送給另一台主機(DRBD Secondary),另一個主機再將數據存到自己的磁盤中。目前,DRBD每次只允許對一個節點進行讀寫訪問,但這對於通常的故障切換高可用集群來說已經足夠用了。以后的版本將支持兩個節點進行讀寫存取。
 
DRBD協議說明
1)數據一旦寫入磁盤並發送到網絡中就認為完成了寫入操作。
2)收到接收確認就認為完成了寫入操作。
3)收到寫入確認就認為完成了寫入操作。
DRBD與HA的關系
一個DRBD系統由兩個節點構成,與HA集群類似,也有主節點和備用節點之分,在帶有主要設備的節點上,應用程序和操作系統可以運行和訪問DRBD設備(/dev/drbd*)。在主節點寫入的數據通過DRBD設備存儲到主節點的磁盤設備中,同時,這個數據也會自動發送到備用節點對應的DRBD設備,最終寫入備用節點的磁盤設備上,在備用節點上,DRBD只是將數據從DRBD設備寫入到備用節點的磁盤中。現在大部分的高可用性集群都會使用共享存儲,而DRBD也可以作為一個共享存儲設備,使用DRBD不需要太多的硬件的投資。因為它在TCP/IP網絡中運行,所以,利用DRBD作為共享存儲設備,要節約很多成本,因為價格要比專用的存儲網絡便宜很多;其性能與穩定性方面也不錯
三、DRBD的特性(基本功能)
分布式復制塊設備(DRBD技術)是一種基於軟件的,無共享,復制的存儲解決方案,在服務器之間的對塊設備(硬盤,分區,邏輯卷等)進行鏡像。
 
DRBD鏡像數據的特性:
1)實時性:當某個應用程序完成對數據的修改時,復制功能立即發生
2)透明性:應用程序的數據存儲在鏡像塊設備上是獨立透明的,他們的數據在兩個節點上都保存一份,因此,無論哪一台服務器宕機,都不會影響應用程序讀取數據的操作,所以說是透明的。
3)同步鏡像和異步鏡像:同步鏡像表示當應用程序提交本地的寫操作后,數據后會同步寫到兩個節點上去;異步鏡像表示當應用程序提交寫操作后,只有當本地的節點上完成寫操作后,另一個節點才可以完成寫操作。
四、DRBD的用戶空間管理工具
為了能夠配置和管理drbd的資源,drbd提供了一些管理工具與內核模塊進行通信:
1)drbdadm:高級的DRBD程序管理套件工具。它從配置文件/etc/drbd.conf中獲取所有配置參數。drbdadm為drbdsetup和drbdmeta兩個命令充當程序的前端應用,執行drbdadm實際是執行的drbdsetup和drbdeta兩個命令。
2)drbdsetup:drbdsetup可以讓用戶配置已經加載在內核中運行的DRBD模塊,它是底層的DRBD程序管理套件工具。使用該命令時,所有的配置參數都需要直接在命令行中定義,雖然命令很靈活,但是大大的降低了命令的簡單易用性,因此很多的用戶很少使用drbdsetup。
3)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同步協議有三種:
1)協議A:異步復制協議
一旦本地磁盤寫入已經完成,數據包已在發送隊列中,則寫被認為是完成的。在一個節點發生故障時,可能發生數據丟失,因為被寫入到遠程節點上的數據可能仍在發送隊列。盡管,在故障轉移節點上的數據是一致的,但沒有及時更新。這通常是用於地理上分開的節點。
數據在本地完成寫操作且數據已經發送到TCP/IP協議棧的隊列中,則認為寫操作完成。如果本地節點的寫操作完成,此時本地節點發生故障,而數據還處在TCP/IP隊列中,則數據不會發送到對端節點上。因此,兩個節點的數據將不會保持一致。這種協議雖然高效,但是並不能保證數據的可靠性。
 
2)協議B:內存同步(半同步)復制協議
一旦本地磁盤寫入已完成且復制數據包達到了對等節點則認為寫在主節點上被認為是完成的。數據丟失可能發生在參加的兩個節點同時故障的情況下,因為在傳輸中的數據可能不會被提交到磁盤
數據在本地完成寫操作且數據已到達對端節點則認為寫操作完成。如果兩個節點同時發生故障,即使數據到達對端節點,這種方式同樣也會導致在對端節點和本地節點的數據不一致現象,也不具有可靠性。
 
3)協議C:同步復制協議
只有在本地和遠程節點的磁盤已經確認了寫操作完成,寫才被認為完成。沒有任何數據丟失,所以這是一個群集節點的流行模式,但I / O吞吐量依賴於網絡帶寬。只有當本地節點的磁盤和對端節點的磁盤都完成了寫操作,才認為寫操作完成。這是集群流行的一種方式,應用也是最多的,這種方式雖然不高效,但是最可靠。
以上三種協議中,一般使用協議C,但選擇C協議將影響流量,從而影響網絡時延。為了數據可靠性,在生產環境使用時須慎重選項使用哪一種協議。
七、DRBD的資源
在DRBD中,資源是所有可復制移動存儲設備的總稱,它包括:
1)資源名稱:資源名稱可以是除了空白字符以外的任意ASCII碼字符
2)DRBD設備:DRBD的虛擬塊設備。在雙方節點上,DRBD設備的設備文件命名方式;一般為/dev/drbdN,其主設備號147,N是次設備號
3)磁盤配置:DRBD內部應用需要本地數據副本,元數據。在雙方節點上,為各自提供的存儲設備。
4)網絡配置:雙方數據同步時所使用的網絡屬性;
八、DRBD的配置說明
----------全局配置項(global)----------
基本上我們可以做的也就是配置usage-count是yes還是no了,usage-count參數其實只是為了讓linbit公司收集目前drbd的使用情況。當drbd在安裝和升級的時候會通過http協議發送信息到linbit公司的服務器上面。
 
----------公共配置項(common)----------
這里的common,指的是drbd所管理的多個資源之間的common。配置項里面主要是配置drbd的所有resource可以設置為相同的參數項,比如protocol,syncer等等。
 
----------DRBD設備----------
DRBD的虛擬塊設備。它有一個主設備號為147的設備,默認的它的次要號碼編從0開始。在一組主機上,drbd的設備的設備名稱為/dev/drbdN,這個N通常和他的次設備號一致。
 
資源配置項(resource)
resource 項中配置的是drbd所管理的所有資源,包括節點的ip信息,底層存儲設備名稱,設備大小,meta信息存放方式,drbd對外提供的設備名等等。每一個 resource中都需要配置在每一個節點的信息,而不是單獨本節點的信息。並且資源名只能使用純ascii碼而且不能使用空白字符用於表示資源名稱。實 際上,在drbd的整個集群中,每一個節點上面的drbd.conf文件需要是完全一致的。另外,resource還有很多其他的內部配置項:
1)net:網絡配置相關的內容,可以設置是否允許雙主節點(allow-two-primaries)等。
2)startup:啟動時候的相關設置,比如設置啟動后誰作為primary(或者兩者都是primary:become-primary-on both)
3)syncer: 同步相關的設置。可以設置“重新”同步(re-synchronization)速度(rate)設置,也可以設置是否在線校驗節點之間的數據一致性 (verify-alg 檢測算法有md5,sha1以及crc32等)。數據校驗可能是一個比較重要的事情,在打開在線校驗功能后,我們可以通過相關命令(drbdadm verify resource_name)來啟動在線校驗。在校驗過程中,drbd會記錄下節點之間不一致的block,但是不會阻塞任何行為,即使是在該不一致的 block上面的io請求。當不一致的block發生后,drbd就需要有re-synchronization動作,而syncer里面設置的rate 項,主要就是用於re-synchronization的時候,因為如果有大量不一致的數據的時候,我們不可能將所有帶寬都分配給drbd做re- synchronization,這樣會影響對外提提供服務。rate的設置和還需要考慮IO能力的影響。如果我們會有一個千兆網絡出口,但是我們的磁盤 IO能力每秒只有50M,那么實際的處理能力就只有50M,一般來說,設置網絡IO能力和磁盤IO能力中最小者的30%的帶寬給re- synchronization是比較合適的(官方說明)。另外,drbd還提供了一個臨時的rate更改命令,可以臨時性的更改syncer的rate 值:
4)drbdsetup /dev/drbd0 syncer -r 100M
這樣就臨時的設置了re-synchronization的速度為100M。不過在re-synchronization結束之后,需要通過 drbdadm adjust resource_name 來讓drbd按照配置中的rate來工作。
 
----------角色----------
在drbd構造的集群中,資源具有角色的概念,分別為primary和secondary。
所有設為primary的資源將不受限制進行讀寫操作。可以創建文件系統,可以使用裸設備,甚至直接io。所有設為secondary的設備中不能掛載,不能讀寫。
 
----------數據同步協議----------
drbd有三種數據同步模式:同步,異步,半同步
1)異步:指的是當數據寫到磁盤上,並且復制的數據已經被放到我們的tcp緩沖區並等待發送以后,就認為寫入完成
2)半同步:指的是數據已經寫到磁盤上,並且這些數據已經發送到對方內存緩沖區,對方的tcp已經收到數據,並宣布寫入
3)同步:指的是主節點已寫入,從節點磁盤也寫入
 
drbd 的復制模型是靠protocol關鍵字來定義的:
protocol A表示異步;
protocol B表示半同步;
protocol C表示同步,
 
默認為protocol C。在同步模式下只有主、從節點上兩塊磁盤同時損害才會導致數據丟失。在半同步模式下只有主節點宕機,同時從節點異常停電才會導致數據丟失。
注意:drbd的主不會監控從的狀態所以有可能會造成數據重傳
 
-----------------------------------metadata----------------------------------
DRBD將數據的各種信息塊保存在一個專用的區域里,這些metadata包括了
1)DRBD設備的大小
2)產生的標識
3)活動日志
4)快速同步的位圖
metadata的存儲方式有內部和外部兩種方式,使用哪種配置都是在資源配置中定義的
內部meta data
內部metadata存放在同一塊硬盤或分區的最后的位置上
優點:metadata和數據是緊密聯系在一起的,如果硬盤損壞,metadata同樣就沒有了,同樣在恢復的時候,metadata也會一起被恢復回來
缺點:metadata和數據在同一塊硬盤上,對於寫操作的吞吐量會帶來負面的影響,因為應用程序的寫請求會觸發metadata的更新,這樣寫操作就會造成兩次額外的磁頭讀寫移動。
外部meta data
外部的metadata存放在和數據磁盤分開的獨立的塊設備上
優點:對於一些寫操作可以對一些潛在的行為提供一些改進
缺點:metadata和數據不是聯系在一起的,所以如果數據盤出現故障,在更換新盤的時候就需要認為的干預操作來進行現有node對心硬盤的同步了
如果硬盤上有數據,並且硬盤或者分區不支持擴展,或者現有的文件系統不支持shrinking,那就必須使用外部metadata這種方式了。
可以通過下面的命令來計算metadata需要占用的扇區數
 
---------------------------------------------split brain腦裂---------------------------------------------
split brain實際上是指在某種情況下,造成drbd的兩個節點斷開連接,都以primary的身份來運行。當drbd某primary節點連接對方節點准備 發送信息的時候如果發現對方也是primary狀態,那么會立刻自行斷開連接,並認定當前已經發生split brain了,這時候他會在系統日志中記錄以下信息:
"Split-Brain detected,dropping connection!"
當發生split brain之后,如果查看連接狀態,其中至少會有一個是StandAlone狀態,另外一個可能也是StandAlone(如果是同時發現split brain狀態),也有可能是WFConnection的狀態。
 
如果在配置文件中配置了自動解決split brain(好像linbit不推薦這樣做),drbd會自行解決split brain問題,可通過如下策略進行配置。
1)Discarding modifications made on the “younger” primary。在這種模式下,當網絡重新建立連接並且發現了裂腦,DRBD會丟棄最后切換到主節點上的主機所修改的數據。
2)Discarding modifications made on the “older” primary. 在這種模式下,當網絡重新建立連接並且發現了裂腦,DRBD丟棄首先切換到主節點上的主機后所修改的數據。
3)Discarding modifications on the primary with fewer changes.在這種模式下,當網絡重新建立連接並且發現了裂腦,DRBD會比較兩台主機之間修改的數據量,並丟棄修改數據量較少的主機上的所有數據。
4)Graceful recovery from split brain if one host has had no intermediate changes.在這種模式下,如果其中一個主機在腦裂期間並沒有數據修改,DRBD會自動重新進行數據同步,並宣布腦裂問題已解決。(這種情況幾乎不可 能存在)
 
特別注意:
自動裂腦自動修復能不能被接受取決於個人應用。考慮 建立一個DRBD的例子庫。在“丟棄修改比較少的主節點的修改”興許對web應用好過數據庫應用。與此相反,財務的數據庫則是對於任何修改的丟失都是不能 容忍的,這就需要不管在什么情況下都需要手工修復裂腦問題。因此需要在啟用裂腦自動修復前考慮你的應用情況。如果沒有配置 split brain自動解決方案,我們可以手動解決。首先我們必須要確定哪一邊應該作為解決問題后的primary,一旦確定好這一點,那么我們同時也就確定接受丟失在split brain之后另外一個節點上面所做的所有數據變更了。當這些確定下來后,就可以通過以下操作來恢復了:
1)首先在確定要作為secondary的節點上面切換成secondary並放棄該資源的數據:
drbdadm secondary resource_name
drbdadm — –discard-my-data connect resource_name
2)在要作為primary的節點重新連接secondary(如果這個節點當前的連接狀態為WFConnection的話,可以省略)
drbdadm connect resource_name
 
當作完這些動作之后,從新的primary到secondary的re-synchnorisation會自動開始。
九、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的默認中進行繼承而無須定義。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM