DRBD

一、什麼是DRBD?
DRBD 是由內核模塊和相關腳本而構成,用以構建高可用性的集羣。其實現方式是通過網絡來鏡像整個設備。您可以把它看作是一種網絡RAID。
二、drbd 的應用範圍是什麼?除此之外,創建高可用性集羣還需要什麼?
       Drbd 負責接收數據,把數據寫到本地磁盤,然後發送給另一個主機。另一個主機再將數據存到自己的磁盤中。其他所需的組件有集羣成員服 務,如TurboHA 或 心跳連接,以及一些能在塊設備上運行的應用程序。
例如:
    --裸I/O
    --文件系統及fsck
    --具有恢復能力的數據庫。
三、它是如何工作的?
       每個設備(drbd 提供了不止一個設備)都有一個狀態,可能是‘主’狀態或‘輔助’狀態。在帶有主要設備的節點上,應用程序應能運行和訪問設 備(/dev/nbX)。每次寫入都會發往本地低層設備和帶有‘輔助’狀態設備的節點中。次要設備只能簡單地把數據寫入它的低層塊設備上。
讀取數據通常在本地進行。
       如果主要節點發生故障,心跳將會把輔助設備轉換到主狀態,並啓動其上的應用程序。(如果您將它和無日誌FS 一起使用,則需要運行fsck)。
如果發生故障的節點恢復工作,它就會成爲新的輔助節點,而且必須使自己的內容與主節點的內容保持同步。當然,這些操作不會干擾到後臺的服務。
四、drbd 同現在的HA 集羣有什麼關係?
       大部分現行高可用性集羣(如:惠普、康柏等等)使用的是共享存儲器,因此存儲器連接多個節點(用共享的SCSI 總線或光纖通道就可以做到)。
Drbd 也可以作爲一個共享的設備,但是它並不需要任何不常見的硬件。它在IP 網絡中運行,而且在價格上IP 網絡要比專用的存儲網絡經濟的多。
目前,drbd 每次只允許對一個節點進行讀寫訪問,這對於通常的故障切換高可用性集羣來講已經足夠用了。以後的版本將支持兩個節點進行讀寫存取。
這很有用,比如對GFS 來講就是如此。兼容性Drbd 可以在ide、SCSI 分區和整個驅動器之上運行,但不能在迴路模塊設備上運行。
(如果您硬要這樣做,它就會發生死鎖)。
Drbd 也不能在回送網絡設備中運行。(因爲它同樣會發生死鎖:所有請求都會被髮送設備佔用,發送流程也會阻塞在sock_sendmsg()中。有時,
接收線程正從網絡中提取數據塊,並試圖把它放在高速緩存器中;但系統卻要把一些數據塊從高速緩存器中取到磁盤中。
這種情況往往會在接收器的環境下發生,因爲所有的請求都已經被接收器塊佔用了。
五、安裝
下載軟件
最新的穩定版本爲0.6.11,您可從http://www.drbd.org/releases.html 下載它。
您可以從CVS 中得到最新的源文件。注意,有時代碼不能進行編譯。您可以通過cvs 或命令行界面得到它:
[philipp@alf drbd]$ export CVSROOT= : pserver : [email protected]
/var/lib/cvs/drbd
[philipp@alf drbd]$ cvs login
(Logging in to [email protected]
CVS password:[Press the return key]
[philipp@alf drbd]$ cvs -z9 checkout drbd
要獲取當前的開發分支,可以使用如下命令:
[philipp@alf drbd]$ cvs -z9 checkout -r rel-0_7-branch
六、編譯包
直接編譯即可。只需如下操作:
$ make
$make install
如果您想爲drbd 編譯不同版本的內核,您需要定義KERNVER(包括路徑)同時您也要定義drbd 的安裝路徑。
make KERNVER=2.4.22-7 KDIR=/usr/src/linux-2.4.22-7-include
make KERNVER=2.4.22-7 PREFIX=/local/lib/module/path/ install
測試加載drbd 模塊
如果這些都已經創建和安裝妥當,您就可以測試加載模塊了。
$ /sbin/insmod drbd
如果一切正常,您不會看見任何ERROR(錯誤)信息,用Ismod 程序可以驗證模塊是否已被加載。
dev2-98:~/rpm/SPECS # lsmod
Module Size Used by Tainted:PF
drbd 40140 0 (unused)
...
$ dmesg
...
drbd:initialised.Version:0.6.8(api:63/proto:62)
如果您看到了drbd,就表示一切正常。就可以繼續執行rmmod,並轉到舉例配置部分。
$ /sbin/rmmod drbd
問題未解決符號
如果在加載模塊時,出現瞭如下信息:
drbd.o:unresolved symbol sock_alloc
drbd.o:unresolved symbol proc_register
drbd.o:unresolved symbol schedule_timeout
...
這就表示您在內核中編譯了CONFIG_MODVERSIONS,而DRBD 模塊中沒有編譯MODVERSIONS,或者正好相反。這裏給出兩種解決方案:
用不帶MODVERSIONS 的系統: 更改您的內核配置, 刪掉CONFIG_MODVERSIONS 選項。(參見~linux/.config。)重建內核。
使用帶MODVERSIONS 模塊的系統:編輯~drbd/Makefile.vars,並將-DMODVERSIONS -DCONFIG_MODVERSIONS 添加到KERNFLAGS,最後重建DRBD。
七、命令的使用
drbdsetup
drbsetup 是drbd 程序套件中的底層配置工具。您可以使用該工具把低層模塊設備和drbd 設備聯繫起來、安裝drbd 設備對,
以便鏡像它們的低層模塊設備和檢查運行drbd 設備的配置。
使用drbdsetup 的例子
假設您的兩臺機器分別命名爲節點1(10.0.0.10)和節點2(10.0.0.20),您想在這兩臺機器上使用/dev/hdc6 作爲它們的低層設備。
那麼在節點2 上,您可以發出以下命令:
$ insmod drbd.o
$ drbdsetup /dev/nb0 disk /dev/hdc6
$ drbdsetup /dev/nb0 net 10.0.0.20 10.0.0.10 B
在節點1 上,您可以發出以下命令:
$ insmod drbd.o
$ drbdsetup /dev/nb0 disk /dev/hdc6
$ drbdsetup /dev/nb0 net 10.0.0.10 10.0.0.20 B
$ drbdsetup /dev/nb0 primary
此時,您就可以像在其他設備一樣使用/dev/nb0 了。
$ mkfs -b 4096 /dev/nb0
$ mount /dev/nb0 /mnt/mountpoint
    上例中使用了“B”協議。drbd 允許您選擇所需的協議,以控制如何將數據寫入輔助設備。
八、DRBD 協議
協議說明
A 數據一旦寫入磁盤併發送到網絡中就認爲完成了寫入操作。
B 收到接收確認就認爲完成了寫入操作。
C 收到寫入確認就認爲完成了寫入操作。
您還可以選擇其它參數來將數據傳輸給磁盤和網絡選項。更多詳情,請參見drbdsetup 手冊頁。
九、Config 和腳本的使用
drbd.conf 和腳本
在上面,我們介紹了drbdsteup 的使用。drbd 也允許您直接在drbd.conf 文件中進行設置。通過正確地設置該文件和使用init.d/drbd 腳本,
您能夠輕鬆讓drbd在機器啓動後正常運行起來。
drbd.conf 設置舉例
在本配置中,兩臺機器分別命名爲thost1 和thost2。thost1 的IP 地址是10.1.1.31,thost2 的IP 地址是10.1.1.32。
我們要在thost1 的/dev/hda7 和thost2的/dev/hda7 之間創建鏡像。下面是一個完成該操作的/etc/drbd.conf 文件範例:
       resource drbd0 {
       protocol=B
       fsck-cmd=fsck.ext2 -p -y
       on thost1 {
       device=/dev/nb0
       disk=/dev/hda7
       address=10.1.1.31
       port=7789
       }
       on thost2 {
       device=/dev/nb0
       disk=/dev/hda7
       address=10.1.1.32
       port=7789
       }
       }
腳本的使用
創建了drbd.conf 文件之後,在thost1 上運行如下命令:
$ /etc/rc.d/init.d/drbd start
在thost2 進行同樣的操作,
$ /etc/rc.d/init.d/drbd start
此時,兩臺設備之間就建立起一個鏡像,您可以查看/proc/drbd 進行覈實。
$ cat /proc/drbd
現在您可以在設備上創建一個文件系統,然後把它加載到thost1 上。
$ mkfs /dev/nb0
$ mount /dev/nb0 /mnt/disk
恭喜您,現在您已經使用drbd 創建了一個鏡像。要進一步創建高可用性的故障切換系統,請查看腳本子目錄,並可結合使用linux-ha.org 上提供的心跳軟件

##########   FAQ   ###########

十、其它問題
1、超時限制的工作原理是怎樣的呢?
   主節點在發出數據塊之後,會等待另一個節點在某一時間範圍內做出響應(該時間範圍可以通過drbdsetup 中的超時限制選項進行設置)。
   一旦另一個節點超過該時限仍未做出響應,主節點就會斷開連接並嘗試着重新再建立一個連接。
2、爲什麼超時限制短點好呢?
   如果另一個節點停機,主節點會就地等待,阻斷所有正在向DRBD 設備寫入數據的應用。這樣一來,一直要等到超時限制過後它纔會判斷出
   另一個節點已經停機,而您的應用就會停滯這麼長時間。
3、爲什麼短的超時限制會導致timeout/resync/connect 的情況發生呢?
   如果次節點的IO 子系統較慢,就會發生這種情況。
4、什麼是“延遲數據包”?
   爲改進這種狀況,我產生了“延遲期限”數據包的設想。當次節點意識到它將超時的時候,它就會發送這種數據包。
5、如果看到出現了timeout/resync/connect 情況時,您會怎麼辦?
   延長超時限制。(因爲connect-int 和pint-int 需要比超時限制更長,所以也要相應地延長它們)
6、tl-size
   對於syslog 中出現“transfer log too small”(傳輸日誌太小)這樣的信息,該採取的措施需要很大篇幅來描述。
7、SyncAll 只運行了一半,但我覺得它實在太慢了!
   您可以在運行時使用drbdsetup 工具裏的syncer 子命令來重新配置同步參數。請參見drbdsetup man page(手冊頁)瞭解更多信息。
十一、一般問題
1、問:首先,什麼是DRBD?
   DRBD 是Linux 操作系統的一個分佈式遠程塊設備。它允許您在遠程機器上建立一個本地塊設備的實時鏡像。與心跳連接結合使用,
   它可打造出高可用性的Linux 集羣。
2、問:哪裏可以下載DRBD?
   答:最新版本的DRBD 可以從LinBit Information Technologies GmbH 獲得。此外,DRBDD 還包括在許多Linux 發行版中
   例如DebianGNU/Linux 和其它程序。
3、問:DRBD 適用於哪種許可情形?
   答: DRBD 是依照General Public License Version 2 vom Juni 1991(GPL)發行的。因此在這種許可條件下,它可以自由分發和修改。
十二、編譯問題
問:在編譯drbd_syncer.c 時出現“structure has no member named `nice'”信息,這是爲什麼?
   答:如果您指的是:
   drbd_syncer.c:In function `drbd_syncer':
   drbd_syncer.c:409:structure has no member named `nice'
   drbd_syncer.c:439:structure has no member named `nice'
   drbd_syncer.c:452:structure has no member named `nice'
   make[1]:*** [drbd_syncer.o] Error 1
   make[1]:Leaving directory `/usr/local/src/drbd-0.6.3/drbd'
   Make*** [all] Error 2
   請使用下面的補丁:
   --- drbd_syncer.c Wed Oct 16 06:19:17 2002
   +++ drbd_syncer.c.orig Wed Oct 16 06:18:27 2002
   @@ -311,7 +311,7 @@
   #define SPEED_MIN(mdev-conf.sync_rate_min)
   #define SYNC_MARKS 10
   #define SYNC_MARK_STEP (3*HZ)
   -#if defined ( MAX_RT_PRIO ) || defined
   (CONFIG_MAX_RT_PRIO)
   +#if 1
   /* this should work for the O(1)scheduler */
   #define drbd_set_user_nice ( current,x ) set_user_nice ( current,
   (x))
   #else
十三、安裝和設置
1、問:我能加次級設備嗎(至少只讀)?
   答:DRBD 對此沒有限制,但是您的文件系統會變得非常混亂,因爲它無法瞭解底層設備的變化。總之,沒有ext2、ext3、reiserFS、JFS 或XFS,
它不能工作。如果您需要的不只是一個鏡像,而是共享文件系統,那您可以使用GFS 或OpenGFS,但它們速度較慢。這也是DRBD 不允許加載次級
設備的原因。因此如果您要加載次級設備,可以先把次級設置爲主設備。同時加載的話,兩個設備均不能工作。
2、問: DRBD 能使用兩個容量大小不同的設備嗎?
答: 一般情況下可以,但有些問題需要注意:
本地DRBD 使用的是配置的磁盤容量,與物理容量相等。如果沒有給出,則將被設置爲物理容量。連接時,設備容量將設置爲兩個節點中最小容量。
如果缺少常識的話,您可能會碰到一些問題:如果您先是在一個節點上使用drbd ,而且沒有配置好磁盤容量,之後又連接了一個容量較小的設備。
這時,drbd 設備容量在運行時就會變小。在系統記錄裏,您會發現一條信息提示“your size hint is bogus,please change to some value”
(您的容量信息不真實,請更改)。這樣一來就會讓設備頂級的文件系統造成混淆。
因此,如果您的設備容量不同,請明確地爲DRBD 設置所使用的容量。
3、問: XFS 能和DRBD 一起使用嗎?
答:XFS 使用動態塊大小,因此需要配備DRBD 0.7 或更高版本。
4、問:當我試着加載drbd 模塊時,遇到了下面的問題:
compiled for kernel version 2.4.18-4GB while this kernel is version 2.4.18-64GB-SMP.
答:您的實際內核與要在其上構建drbd 的內核的.config 不一致。在
SuSE Linux 上,您可以使用下面的命令進行配置:
cd /usr/src/linux/
make cloneconfig
make dep
通常,您不必重新編譯內核,只編譯drbd 即可。以後的DRBD 版本將在創建過程中解決這一問題。
十四、操作問題
1、問:爲什麼drbdsetup /dev/nb0 複製((完全同步))的速度那麼慢?
答:出於歷史原因,複製需要回寫數據。而在回寫數據時,很多物理設備的速度都非常慢。在更新的DRBD 版本中可能會解決這一問題。
2、問:爲什麼我的“load averag”(平均負載)那麼高?
答:平均負載定義爲給定的時間間隔內,runqueue 裏的平均進程數。如果進程具有以下特點,它就會被列入runqueue 中:
-- 不是在等待外部事件(如:在某些fd 上選擇)
-- 不是在等待它自己的事件(不是受呼“等待”)
-- 未被終止
注:所有等待磁盤io 的進程都會包括在內。所以,雖然系統實際可能近乎是空閒的,但如果有很多進程在等待磁盤io, “load average”就會很高。
例:關閉nfs 服務器,啓動100
ls /path/to/noncached/dir/on/nfs/mount-point
在客戶機上,雖然CPU 什麼也沒做,只要nfs 超時(可能是幾個星期),您還是會得到一個100+的“load average”。
您 可以通過其他方式(例如vmstat, sysstat/sar)來檢測您的系統負載,這樣可幫您找出系統的瓶頸所在。或者您還可以使用多個磁盤(不只是分區!) 或配備10.000rpm SCSI 磁盤的RAID,甚至是千兆以太網。即使在快速以太網設備中,您也很少會超過每秒6Mbyte。.((100 MBit/s 除去協議開銷等最多 可剩下12.5MByte/s)
3、問:
warning: Return code 255 from
/etc/ha.d/resource.d/datadisk
在使用帶心跳的數據磁盤腳本時出現這些信息說明了什麼?
答:退出碼255 很可能產生於導致死機的腳本,它有一個詳細的錯誤信息。捕獲腳本輸出,這是ha.cf 中的debugfile 指令iirc。.如果仍沒有用,
您可以手動操作,並查看所給出的錯誤信息。
4、數據磁盤會提示如“cannot promote to primary, synchronization running”
或“fsck failed”等等。
問:當節點從次級站點上升到主站點時,drbd 設備就不能加載到主站點
上了,但可以進行手動加載。.
答:DRBD 不會自動加載分區,腳本數據磁盤就是用來做這項工作的。
5、問:當心跳在節點1 上啓動並試着運行數據磁盤腳本以成爲RAID 陣列中的主節點時,出現故障,原因是它仍在同步。
答: 在ha.cf 中啓用“nice_failback on“,或者您還可以阻斷drbd init 腳本塊直到全部同步完成,請參見drbd.conf.A。
6、問:像st、ns、nr、dw、dr 等字段在/proc/drdb 中有什麼含義?
答:
表4. /proc/drbd
Field        說明                值:
cs       連接狀態             出現的值:
                   o Unconfigured:設備在等待配置。
                   o Unconnected:連接模塊時的過渡狀態。
                   o WFConnection:設備等待另一測的配置。
                   o WFReportParams:過渡狀態,等待新TCP 連接的第一個數據包時。.
                   o SyncingAll:正將主節點的所有模塊複製到次級節點上。.
                   o SyncingQuick:通過複製已被更新的模塊(因爲現在次級節點已經離開了集羣)來更新次級節點。
                   o Connected:一切正常。
                   o Timeout:過渡狀態。
st       狀態(設備的作用)    可能的值爲:
                   o 本地/遠程一級狀態
                   o 二級狀態
                   o 未知(這不是一種作用)
ns 網絡發送 模塊號碼
nr 網絡接收 模塊號碼
dw 磁盤寫入 模塊號碼
DR 磁盤讀取 模塊號碼
of 運行中(過時的)模塊號碼
pe 待解決的 模塊號碼
ua 未答覆的 模塊號碼(最好爲0)


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