DRBD簡(jiǎn)介

簡(jiǎn)介

什么是DRBD

DRBD (Distributed Replicated Block Device,分布式復(fù)制塊設(shè)備) 是由內(nèi)核模塊和相關(guān)腳本構(gòu)成,用以構(gòu)建高可用性的集群。其實(shí)現(xiàn)方式是通過網(wǎng)絡(luò)來鏡像整個(gè)設(shè)備??梢钥醋鍪且环N網(wǎng)絡(luò)RAID1
Distributed Replicated Block Device(DRBD)是一種基于軟件的,無共享,復(fù)制的存儲(chǔ)解決方案,在服務(wù)器之間的對(duì)塊設(shè)備(硬盤,分區(qū),邏輯卷等)進(jìn)行鏡像。DRBD工作在內(nèi)核 當(dāng)中的,類似于一種驅(qū)動(dòng)模塊。DRBD工作的位置在文件系統(tǒng)的buffer cache和磁盤調(diào)度器之間,通過tcp/ip發(fā)給另外一臺(tái)主機(jī)到對(duì)方的tcp/ip最終發(fā)送給對(duì)方的drbd,再由對(duì)方的drbd存儲(chǔ)在本地對(duì)應(yīng)磁盤 上,類似于一個(gè)網(wǎng)絡(luò)RAID-1功能。在高可用(HA)中使用DRBD功能,可以代替使用一個(gè)共享盤陣。本地(主節(jié)點(diǎn))與遠(yuǎn)程主機(jī)(備節(jié)點(diǎn))的數(shù)據(jù)可以保 證實(shí)時(shí)同步。當(dāng)本地系統(tǒng)出現(xiàn)故障時(shí),遠(yuǎn)程主機(jī)上還會(huì)保留有一份相同的數(shù)據(jù),可以繼續(xù)使用。DRBD的架構(gòu)如下圖

Paste_Image.png
簡(jiǎn)單說一下DRBD主要功能,DRBD 負(fù)責(zé)接收數(shù)據(jù),把數(shù)據(jù)寫到本地磁盤,然后通過網(wǎng)絡(luò)將同樣的數(shù)據(jù)發(fā)送給另一個(gè)主機(jī),另一個(gè)主機(jī)再將數(shù)據(jù)存到自己的磁盤中。

DRBD 的工作原理

 每個(gè)設(shè)備(drbd 提供了不止一個(gè)設(shè)備)都有一個(gè)狀態(tài),可能是‘主’狀態(tài)或者‘從’狀態(tài) 在主節(jié)點(diǎn)上,應(yīng)用程序應(yīng)能運(yùn)行和訪問DRBD設(shè)備。每次寫入都會(huì)發(fā)往本地磁盤設(shè)備和從節(jié)點(diǎn)設(shè)備中。從節(jié)點(diǎn)只能簡(jiǎn)單地把數(shù)據(jù)寫入它的磁盤設(shè)備上。讀取數(shù)據(jù)通常在本地進(jìn)行。如果主節(jié)點(diǎn)發(fā)生故障,心跳(heartbeat或corosync)將會(huì)把從節(jié)點(diǎn)轉(zhuǎn)換為主狀態(tài),并啟動(dòng)其上的應(yīng)用程序。如果發(fā)生故障的節(jié)點(diǎn)恢復(fù)工作,它會(huì)成為新的從節(jié)點(diǎn),而且必須使自己的內(nèi)容與主節(jié)點(diǎn)的內(nèi)容保持同步。當(dāng)然,這些才做可能不會(huì)干擾到后臺(tái)的服務(wù)

底層設(shè)備支持

DRBD需要構(gòu)建在底層設(shè)備之上,然后構(gòu)建出一個(gè)塊設(shè)備出來。對(duì)于用戶來說,一個(gè)DRBD設(shè)備,就像是一塊物理的磁盤,可以在上面內(nèi)創(chuàng)建文件系統(tǒng)。DRBD所支持的底層設(shè)備有以下這些類:

  1. 一個(gè)磁盤,或者是磁盤的某一個(gè)分區(qū);
  2. 一個(gè)soft raid 設(shè)備;
  3. 一個(gè)LVM的邏輯卷;
  4. 一個(gè)EVMS(Enterprise Volume Management System,企業(yè)卷管理系統(tǒng))的卷;
  5. 其他任何的塊設(shè)備。

配置簡(jiǎn)介

全局配置項(xiàng)(global)
基本上我們可以做的也就是配置usage-count是yes還是no了,usage-count參數(shù)其實(shí)只是為了讓linbit公司收集目前drbd的使用情況。當(dāng)drbd在安裝和升級(jí)的時(shí)候會(huì)通過http協(xié)議發(fā)送信息到linbit公司的服務(wù)器上面。

公共配置項(xiàng)(common)
這里的common,指的是drbd所管理的多個(gè)資源之間的common。配置項(xiàng)里面主要是配置drbd的所有resource可以設(shè)置為相同的參數(shù)項(xiàng),比如protocol,syncer等等。
</b>
DRBD設(shè)備
DRBD的虛擬塊設(shè)備。它有一個(gè)主設(shè)備號(hào)為147的設(shè)備,默認(rèn)的它的次要號(hào)碼編從0開始。在一組主機(jī)上,drbd的設(shè)備的設(shè)備名稱為/dev/drbdN,這個(gè)N通常和他的次設(shè)備號(hào)一致。
</b>
資源配置項(xiàng)(resource)
resource 項(xiàng)中配置的是drbd所管理的所有資源,包括節(jié)點(diǎn)的ip信息,底層存儲(chǔ)設(shè)備名稱,設(shè)備大小,meta信息存放方式,drbd對(duì)外提供的設(shè)備名等等。每一個(gè) resource中都需要配置在每一個(gè)節(jié)點(diǎn)的信息,而不是單獨(dú)本節(jié)點(diǎn)的信息。并且資源名只能使用純ascii碼而且不能使用空白字符用于表示資源名稱。實(shí) 際上,在drbd的整個(gè)集群中,每一個(gè)節(jié)點(diǎn)上面的drbd.conf文件需要是完全一致的。
另外,resource還有很多其他的內(nèi)部配置項(xiàng):
net:網(wǎng)絡(luò)配置相關(guān)的內(nèi)容,可以設(shè)置是否允許雙主節(jié)點(diǎn)(allow-two-primaries)等。
startup:?jiǎn)?dòng)時(shí)候的相關(guān)設(shè)置,比如設(shè)置啟動(dòng)后誰作為primary(或者兩者都是primary:become-primary-on both)
syncer: 同步相關(guān)的設(shè)置??梢栽O(shè)置“重新”同步(re-synchronization)速度(rate)設(shè)置,也可以設(shè)置是否在線校驗(yàn)節(jié)點(diǎn)之間的數(shù)據(jù)一致性 (verify-alg 檢測(cè)算法有md5,sha1以及crc32等)。數(shù)據(jù)校驗(yàn)可能是一個(gè)比較重要的事情,在打開在線校驗(yàn)功能后,我們可以通過相關(guān)命令(drbdadm verify resource_name)來啟動(dòng)在線校驗(yàn)。在校驗(yàn)過程中,drbd會(huì)記錄下節(jié)點(diǎn)之間不一致的block,但是不會(huì)阻塞任何行為,即使是在該不一致的 block上面的io請(qǐng)求。當(dāng)不一致的block發(fā)生后,drbd就需要有re-synchronization動(dòng)作,而syncer里面設(shè)置的rate 項(xiàng),主要就是用于re-synchronization的時(shí)候,因?yàn)槿绻写罅坎灰恢碌臄?shù)據(jù)的時(shí)候,我們不可能將所有帶寬都分配給drbd做re- synchronization,這樣會(huì)影響對(duì)外提提供服務(wù)。rate的設(shè)置和還需要考慮IO能力的影響。如果我們會(huì)有一個(gè)千兆網(wǎng)絡(luò)出口,但是我們的磁盤 IO能力每秒只有50M,那么實(shí)際的處理能力就只有50M,一般來說,設(shè)置網(wǎng)絡(luò)IO能力和磁盤IO能力中最小者的30%的帶寬給re- synchronization是比較合適的(官方說明)。另外,drbd還提供了一個(gè)臨時(shí)的rate更改命令,可以臨時(shí)性的更改syncer的rate 值:
drbdsetup /dev/drbd0 syncer -r 100M
這樣就臨時(shí)的設(shè)置了re-synchronization的速度為100M。不過在re-synchronization結(jié)束之后,你需要通過
drbdadm adjust resource_name
來讓drbd按照配置中的rate來工作。

角色、模式和數(shù)據(jù)同步協(xié)議

角色
在drbd構(gòu)造的集群中,資源具有角色的概念,分別為primary和secondary。
所有設(shè)為primary的資源將不受限制進(jìn)行讀寫操作??梢詣?chuàng)建文件系統(tǒng),可以使用裸設(shè)備,甚至直接io。所有設(shè)為secondary的設(shè)備中不能掛載,不能讀寫
模式
drbd也有drbd mode:?jiǎn)沃髂P停ㄖ鲝模p主模型(drbd只有在8.0以后的版本才支持雙主模型)
在單主模型下drbd可以使用任意的文件系統(tǒng)
單在雙主模型下只能使用集群文件系統(tǒng),常用的開源的集群文件系統(tǒng)有:ocfs2和gfs2
數(shù)據(jù)同步協(xié)議
drbd有三種數(shù)據(jù)同步模式:同步,異步,半同步
異步:指的是當(dāng)數(shù)據(jù)寫到磁盤上,并且復(fù)制的數(shù)據(jù)已經(jīng)被放到我們的tcp緩沖區(qū)并等待發(fā)送以后,就認(rèn)為寫入完成
半同步:指的是數(shù)據(jù)已經(jīng)寫到磁盤上,并且這些數(shù)據(jù)已經(jīng)發(fā)送到對(duì)方內(nèi)存緩沖區(qū),對(duì)方的tcp已經(jīng)收到數(shù)據(jù),并宣布寫入
同步:指的是主節(jié)點(diǎn)已寫入,從節(jié)點(diǎn)磁盤也寫入
</b>
drbd 的復(fù)制模型是靠protocol關(guān)鍵字來定義的:protocol A表示異步;protocol B表示半同步;protocol C表示同步,默認(rèn)為protocol C。在同步模式下只有主、從節(jié)點(diǎn)上兩塊磁盤同時(shí)損害才會(huì)導(dǎo)致數(shù)據(jù)丟失。在半同步模式下只有主節(jié)點(diǎn)宕機(jī),同時(shí)從節(jié)點(diǎn)異常停電才會(huì)導(dǎo)致數(shù)據(jù)丟失。
注意:drbd的主不會(huì)監(jiān)控從的狀態(tài)所以有可能會(huì)造成數(shù)據(jù)重傳

metadata

DRBD將數(shù)據(jù)的各種信息塊保存在一個(gè)專用的區(qū)域里,這些metadata包括了
a,DRBD設(shè)備的大小
b,產(chǎn)生的標(biāo)識(shí)
c,活動(dòng)日志
d,快速同步的位圖
metadata的存儲(chǔ)方式有內(nèi)部和外部?jī)煞N方式,使用哪種配置都是在資源配置中定義的
內(nèi)部meta data
內(nèi)部metadata存放在同一塊硬盤或分區(qū)的最后的位置上
優(yōu)點(diǎn):metadata和數(shù)據(jù)是緊密聯(lián)系在一起的,如果硬盤損壞,metadata同樣就沒有了,同樣在恢復(fù)的時(shí)候,metadata也會(huì)一起被恢復(fù)回來
缺點(diǎn):metadata和數(shù)據(jù)在同一塊硬盤上,對(duì)于寫操作的吞吐量會(huì)帶來負(fù)面的影響,因?yàn)閼?yīng)用程序的寫請(qǐng)求會(huì)觸發(fā)metadata的更新,這樣寫操作就會(huì)造成兩次額外的磁頭讀寫移動(dòng)。
外部meta data
外部的metadata存放在和數(shù)據(jù)磁盤分開的獨(dú)立的塊設(shè)備上
優(yōu)點(diǎn):對(duì)于一些寫操作可以對(duì)一些潛在的行為提供一些改進(jìn)
缺點(diǎn):metadata和數(shù)據(jù)不是聯(lián)系在一起的,所以如果數(shù)據(jù)盤出現(xiàn)故障,在更換新盤的時(shí)候就需要認(rèn)為的干預(yù)操作來進(jìn)行現(xiàn)有node對(duì)心硬盤的同步了
如果硬盤上有數(shù)據(jù),并且硬盤或者分區(qū)不支持?jǐn)U展,或者現(xiàn)有的文件系統(tǒng)不支持shrinking,那就必須使用外部metadata這種方式了。
可以通過下面的命令來計(jì)算metadata需要占用的扇區(qū)數(shù)

split brain腦裂

split brain實(shí)際上是指在某種情況下,造成drbd的兩個(gè)節(jié)點(diǎn)斷開連接,都以primary的身份來運(yùn)行。當(dāng)drbd某primary節(jié)點(diǎn)連接對(duì)方節(jié)點(diǎn)準(zhǔn)備 發(fā)送信息的時(shí)候如果發(fā)現(xiàn)對(duì)方也是primary狀態(tài),那么會(huì)立刻自行斷開連接,并認(rèn)定當(dāng)前已經(jīng)發(fā)生split brain了,這時(shí)候他會(huì)在系統(tǒng)日志中記錄以下信息:“Split-Brain detected,dropping connection!”當(dāng)發(fā)生split brain之后,如果查看連接狀態(tài),其中至少會(huì)有一個(gè)是StandAlone狀態(tài),另外一個(gè)可能也是StandAlone(如果是同時(shí)發(fā)現(xiàn)split brain狀態(tài)),也有可能是WFConnection的狀態(tài)。
如果我們?cè)谂渲梦募信渲昧俗詣?dòng)解決split brain(好像linbit不推薦這樣做),drbd會(huì)自行解決split brain問題,可通過如下策略進(jìn)行配置。
Discarding modifications made on the “younger” primary。在這種模式下,當(dāng)網(wǎng)絡(luò)重新建立連接并且發(fā)現(xiàn)了裂腦,DRBD會(huì)丟棄最后切換到主節(jié)點(diǎn)上的主機(jī)所修改的數(shù)據(jù)。
Discarding modifications made on the “older” primary. 在這種模式下,當(dāng)網(wǎng)絡(luò)重新建立連接并且發(fā)現(xiàn)了裂腦,DRBD丟棄首先切換到主節(jié)點(diǎn)上的主機(jī)后所修改的數(shù)據(jù)。
Discarding modifications on the primary with fewer changes.在這種模式下,當(dāng)網(wǎng)絡(luò)重新建立連接并且發(fā)現(xiàn)了裂腦,DRBD會(huì)比較兩臺(tái)主機(jī)之間修改的數(shù)據(jù)量,并丟棄修改數(shù)據(jù)量較少的主機(jī)上的所有數(shù)據(jù)。
Graceful recovery from split brain if one host has had no intermediate changes.在這種模式下,如果其中一個(gè)主機(jī)在腦裂期間并沒有數(shù)據(jù)修改,DRBD會(huì)自動(dòng)重新進(jìn)行數(shù)據(jù)同步,并宣布腦裂問題已解決。(這種情況幾乎不可 能存在)
注意:自動(dòng)裂腦自動(dòng)修復(fù)能不能被接受取決于個(gè)人應(yīng)用??紤] 建立一個(gè)DRBD的例子庫(kù)。在“丟棄修改比較少的主節(jié)點(diǎn)的修改”興許對(duì)web應(yīng)用好過數(shù)據(jù)庫(kù)應(yīng)用。與此相反,財(cái)務(wù)的數(shù)據(jù)庫(kù)則是對(duì)于任何修改的丟失都是不能 容忍的,這就需要不管在什么情況下都需要手工修復(fù)裂腦問題。因此需要在啟用裂腦自動(dòng)修復(fù)前考慮你的應(yīng)用情況。
如果沒有配置 split brain自動(dòng)解決方案,我們可以手動(dòng)解決。首先我們必須要確定哪一邊應(yīng)該作為解決問題后的primary,一旦確定好這一點(diǎn),那么我們同時(shí)也就確定接受 丟失在split brain之后另外一個(gè)節(jié)點(diǎn)上面所做的所有數(shù)據(jù)變更了。當(dāng)這些確定下來后,我們就可以通過以下操作來恢復(fù)了:
</b>
1、首先在確定要作為secondary的節(jié)點(diǎn)上面切換成secondary并放棄該資源的數(shù)據(jù):
drbdadm secondary resource_name
drbdadm — –discard-my-data connect resource_name
2、在要作為primary的節(jié)點(diǎn)重新連接secondary(如果這個(gè)節(jié)點(diǎn)當(dāng)前的連接狀態(tài)為WFConnection的話,可以省略)
drbdadm connect resource_name
當(dāng)作完這些動(dòng)作之后,從新的primary到secondary的re-synchnorisation會(huì)自動(dòng)開始。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容