分布式復(fù)制塊設(shè)備(DRBD)是在90年代末由Philipp Reisner和LarsEllenberg設(shè)想和開發(fā)的。開發(fā)者是為了創(chuàng)建一個Linux安全標(biāo)準(zhǔn),以最低成本提供最佳的安全保障。分布式復(fù)制塊設(shè)備的當(dāng)前版本可以與Linux的普通版本一起使用,用于在被動系統(tǒng)和主動系統(tǒng)之間進(jìn)行存儲數(shù)據(jù)的同步復(fù)制。數(shù)據(jù)可以在兩個系統(tǒng)同時讀取和輸入。分布式復(fù)制塊設(shè)備還支持資源級別防護(hù)。分布式復(fù)制塊設(shè)備(DRBD)工程與一組稱為Heartbeat的管理程序一起使用。它已經(jīng)被收集到Linux的一些發(fā)行版中,目前流行的Linux中只有Centos有預(yù)編譯好的安裝包和對應(yīng)內(nèi)核。
分布式復(fù)制塊設(shè)備(DRBD)是LINBIT信息技術(shù)有限責(zé)任公司的一個注冊商標(biāo),總部設(shè)在奧地利維也納。該軟件已通過通用公共許可證(GNUGPL)發(fā)布,它可以在許可協(xié)議允許的范圍內(nèi)自由分發(fā)和修改。
二、DRBD的工作原理
三、DRBD的使用
DRBD需要構(gòu)建在底層設(shè)備之上,然后構(gòu)建出一個塊設(shè)備出來。對于用戶來說,一個DRBD設(shè)備,就像是一塊物理的磁盤,可以在商脈內(nèi)創(chuàng)建文件系統(tǒng)。DRBD所支持的底層設(shè)備有以下這些類:
(1)一個磁盤,或者是磁盤的某一個分區(qū)
(2)一個soft raid 設(shè)備
(3)一個LVM的邏輯卷
(4)一個EVMS(Enterprise Volume Management System,企業(yè)卷管理系統(tǒng))的卷
(5)其他任何的塊設(shè)備
我們的線上環(huán)境采取的第一種,即用單獨的磁盤來做的DRBD。
四、DRBD的配置過程
我查閱了網(wǎng)上大量的教程類文間,感覺寫得不算是詳細(xì);今天我登陸到服務(wù)器上,發(fā)現(xiàn)我的DRBD+Heartbeat已經(jīng)穩(wěn)定運行了161天(海量圖片文件服務(wù)器),相當(dāng)?shù)姆€(wěn)定和高效。如果沒有線上環(huán)境的同學(xué)也不要著急,大家完全可以根據(jù)我的文章用VMwareworkstation6.0+Centos5.x系統(tǒng)實現(xiàn)這個實驗,達(dá)到熟練掌握的目的。需要注意的地方我會重點說明,整個測試過程參考生產(chǎn)服務(wù)器。
服務(wù)器1:centos1.7788.com,單獨拿一塊硬盤sdb作DRBD
服務(wù)器2:centos2.7788.com,單獨拿一塊硬盤sdb作DRBD
網(wǎng)絡(luò)拓補很簡單:
centos1.7788.cometh0:192.168.4.191,物理bridge連接,eth1:10.0.0.1,這個可以采用虛擬網(wǎng)段VM5
centos2.7788.cometh0:192.168.4.192,物理bridge連接,eth1:10.0.0.2,這個可以采用虛擬網(wǎng)段VM5
VIP:192.168.4.194,這個是通過Heartbeat來實現(xiàn)的,原理跟Keepalived類似,它通過在某臺服務(wù)器的eth0:0上綁定,如果遇到故障就轉(zhuǎn)移,達(dá)到高HA的目的;這個同時也是對外提供服務(wù)的IP。
Hosts的配置在二臺機(jī)器上一樣,不需要太復(fù)雜,只配置心跳部分即可,即:
centos1.7788.com 192.168.4.191 centos1
centos2.7788.com 192.168.4.192 centos2
另外關(guān)于時間同步一說,蠻多哥哥說要ntpdate,其實也沒什么必要;不過為了線上環(huán)境的嚴(yán)謹(jǐn),這步就做一下吧,ntpdatentp.api.bz。
◆DRBD的安裝和配置
DRBD官方網(wǎng)站:http://www.linux-ha.org/DRBD
源碼下載地址: http://oss.linbit.com/drbd
FAQ: http://www.linux-ha.org/DRBD/FAQ
目前流行的Linux中只有Centos有預(yù)編譯好的安裝包和對應(yīng)內(nèi)核.
如果不想用Centos可以選擇從源碼安裝.
DRBD有兩種安裝模式:直接編譯進(jìn)內(nèi)核 或 作為一個可加載的內(nèi)核模塊編譯.
以下使用的是CentOS 5.2 i386 系統(tǒng)安裝與測試:
1. 安裝依賴庫.
yum install gcc gcc-c++ make glibc flex
2. 在primary和secondary上都使用相同的安裝方法:
3. 安裝完主要生成命令: “drbdsetup”, “drbdadmin”
和配置文件: /etc/drbd.conf
啟動文件: /etc/init.d/drbd
模塊文件: drbd.ko (在編譯好的安裝包目錄下的drbd下可以找到)
所有命令和配置文件都可以在源碼包編譯成功的目錄下面找到.
./scripts/drbd.conf是最原始的配置文件, 當(dāng)/etc/drbd.conf被破壞, 可以直接拷貝覆蓋掉.
4. drbd采用的是模塊控制的方式, 所以先要加載drbd.ko 模塊.
5. 先確認(rèn)兩臺要鏡像的機(jī)器是否正常, 之間的網(wǎng)絡(luò)是否通暢, 需要加載的硬盤是否處于umount狀態(tài).
6. 在兩臺主機(jī)上都創(chuàng)建硬件設(shè)備drbd.
7. 二臺機(jī)器將/dev/sdb1互為鏡相(兩臺機(jī)器配置相同).
8. 配置drbd.
DRBD運行時,會讀取一個配置文件/etc/drbd.conf.
這個文件里描述了DRBD設(shè)備與硬盤分區(qū)的映射關(guān)系, 和DRBD的一些配置參數(shù)
9.drbd的啟動, 激活前面配置的drbd資源 “r0″. (兩個節(jié)點都要執(zhí)行)
在啟動DRBD之前,你需要分別在兩臺主機(jī)的hdb1分區(qū)上, 創(chuàng)建供DRBD記錄信息的數(shù)據(jù)塊.
分別在兩臺主機(jī)上執(zhí)行:
現(xiàn)在可以啟動drbd了, 分別在兩臺主機(jī)上執(zhí)行.
設(shè)置drbd開機(jī)自動啟動.
現(xiàn)在可以查看drbd當(dāng)前的狀態(tài), 然后在centos1上執(zhí)行:
第一行的’st’表示兩臺主機(jī)的狀態(tài),都是”備機(jī)”狀態(tài).
‘ds’是磁盤狀態(tài),都是”不一致”狀態(tài).
這是由于,DRBD無法判斷哪一方為主機(jī),以哪一方的磁盤數(shù)據(jù)作為標(biāo)準(zhǔn)數(shù)據(jù).
所以,我們需要初始化一個主機(jī), 那么需要在centos1上執(zhí)行.
10.初始化centos1(這步只要在主節(jié)點上操作)
第一次設(shè)置主節(jié)點時用 drbdadm 命令會失敗, 所以先用drbdsetup 來做, 以后就可以用drbdadm了.
再次查看drbd當(dāng)前的狀態(tài).
現(xiàn)在主備機(jī)狀態(tài)分別是’主/備’, 主機(jī)磁盤狀態(tài)是’實時’, 備機(jī)狀態(tài)是’不一致’.
在第3行, 可以看到數(shù)據(jù)正在同步中, 即主機(jī)正在將磁盤上的數(shù)據(jù), 傳遞到備機(jī)上.
現(xiàn)在的進(jìn)度是0.3%.
設(shè)置完之后的第一次同步耗時比較長, 因為需要把整個分區(qū)的數(shù)據(jù)全部同步一遍.
第一次同步完成之后, 就可以對drbd的設(shè)備創(chuàng)建文件系統(tǒng)了:
稍等一段時間, 在數(shù)據(jù)同步完后, 再查看一下兩臺機(jī)器的DRBD狀態(tài):
現(xiàn)在磁盤狀態(tài)都是’實時’, 表示數(shù)據(jù)同步完成了.
#查看drbd的實時狀態(tài),我喜歡用service drbd status
11.drbd的使用.
現(xiàn)在可以把主機(jī)上的DRBD設(shè)備掛載到一個目錄上進(jìn)行使用.
備機(jī)的DRBD設(shè)備無法被掛載, 因為它是用來接收主機(jī)數(shù)據(jù)的, 由DRBD負(fù)責(zé)操作.
在centos1主服務(wù)器上執(zhí)行:
現(xiàn)在, 就可以對 /d 分區(qū)進(jìn)行讀寫操作了.
注意: secondary節(jié)點上不允許對drbd設(shè)備進(jìn)行任何操作, 包括只讀.
所有的讀寫操作只能在primary節(jié)點上進(jìn)行.
只有當(dāng)primary節(jié)點掛掉之后, secondary節(jié)點才能提升成為primary節(jié)點, 繼續(xù)進(jìn)行讀寫操作.
五、Heartbeat的配置過程
真實的服務(wù)器之間的連接用交叉線連接,本著簡單高效的原則,直接購買即可。
1. 安裝, 在兩臺主機(jī)都同樣的安裝.
2. 二個節(jié)的配置的配置文件都是一樣, 文件內(nèi)容如下
2. 編輯雙機(jī)互聯(lián)驗證文件: authkeys
3. 編輯集群資源文件: haresources
4.編輯腳本文件killnfsd,目的其實就是為了重啟nfs服務(wù)。這是因為NFS服務(wù)切換后,必須重新mount一下nfs共享出來的目錄,否則會出現(xiàn)stale NFS file handle的錯誤。
5. 在二個節(jié)點啟動Heartbeat即可,先在主節(jié)點啟動
六、測試由于我的線上環(huán)境已經(jīng)很穩(wěn)定了,這個測試結(jié)果是讓大家進(jìn)行的,讓大家熟悉DRBD+Heartbeat;我建議做完此步后再做測試,看Heartbeat是否能做到真正的熱切換。 測試一、在另一臺FreeBSD8下掛載192.168.4.194:/d,向里面寫數(shù)據(jù)時,忽然重新啟動主DRBD,看此時寫數(shù)據(jù)有影響不,發(fā)現(xiàn)DRBD+Heartbeat正常切換還是需要些時間的; 測試二、正常狀態(tài)下關(guān)機(jī)Primary機(jī),然后看數(shù)據(jù)有無問題,觀察DRBD的status;然后等主機(jī)啟動后,再觀察變化,然后再關(guān)機(jī)secondary,然后再啟動,觀察DRBD變化及Heartbeat起作用了沒。 測試三、假設(shè)此時把primary的eth0 給ifdown了, 然后直接在secondary上進(jìn)行主的提升,并也給mount了, 發(fā)現(xiàn)在primary上測試拷入的文件確實同步過來了。之后把primary的 eth0 恢復(fù)后, 發(fā)現(xiàn)沒有自動恢復(fù)主從關(guān)系, 經(jīng)過支持查詢,發(fā)現(xiàn)出現(xiàn)了drbd檢測出現(xiàn)了Split-Brain 的狀況, 兩個節(jié)點各自都standalone了,故障描術(shù)如下:Split-Brain detected, dropping connection!這個即時傳說中的腦裂了,DRBD官方推薦手動恢復(fù)(生產(chǎn)環(huán)境下出現(xiàn)這個機(jī)率的機(jī)會很低的,誰會去故障觸動生產(chǎn)中的服務(wù)器)以下手動恢復(fù)Split-Brain狀況:i. 在secondary上:
ii.在primary上:
測試四、假設(shè)Primary因硬件損壞了,需要將Secondary提生成Primay主機(jī),如何處理,方法如下:在primaty主機(jī)上,先要卸載掉DRBD設(shè)備.[root@centos1 /]# umount /d將主機(jī)降級為”備機(jī)”
現(xiàn)在,兩臺主機(jī)都是”備機(jī)”.在備機(jī)centos2上, 將它升級為”主機(jī)”.
現(xiàn)在centos2成為主機(jī)了.至此,整個實驗結(jié)束了;建議大家多做測試和總結(jié),幾十遍后就會完全掌握其用法,祝大家Happy先了。