DRBD,即Distributed Replicated Block Device分佈式複製塊設備。它是被設計成構建高可用集羣(HA)的一個構建組件的塊設備。它經過網絡實現塊設備數據實時鏡像。DRBD能夠被理解爲一種基於網絡的raid-1。node
從概述來看,DRBD有如下幾個特色vim
l DRBD是一種塊設備centos
2 可用於高可用集羣中(HA)api
3 經過網絡實現塊設備數據實時鏡像服務器
4 相似於一個網絡的raid-1網絡
工做特色:異步
l DRBD工做在內核空間,它鏡像複製的是二進制數據,這也是它速度快的根本緣由tcp
2 DRBD至少須要兩個節點來工做。分佈式
如上圖所示,左右兩部分至關於兩臺服務器,黑色箭頭表明了各個內核組件之間的數據流方向。橙色箭頭表明了經過網絡實現的從本地節點到遠程節點的實時塊設備數據流方向。ide
DRBD的三種複製模式:
l 協議A
即 異步複製協議。當本地磁盤寫入完成,而且拷貝數據包進入本地TCP發送緩衝區裏後,就認爲在主節點的本地寫操做完成。這種模式,在發生強制故障轉移的時候可能發生數據丟失的現象。協議A經常使用在長距離複製環境中。當它和DRBD代理結合使用的時候,它成爲一個有效的災難恢復解決方案。
l 協議B
即 內存同步複製協議。當本地磁盤寫入發生,而且拷貝數據包到達對等層節點時,就認爲在主節點中的本地寫操做完成。正常狀況下,在故障轉移事件中,寫入的數據不會丟失。然而,若是節點同時停電,主節點的數據存儲將發生不可逆的損壞,大部分最近在主節點中寫入完成的數據可能會丟失。
l 協議C
即 同步複製協議。只有當本地磁盤和遠程磁盤都確認寫入完成時,就認爲在主節點的本地寫操做完成。結果,即便一個節點崩潰,也不會丟失任何數據。惟一丟失數據的多是兩個節點同時崩潰。
到目前爲止,協議C是安裝DRBD是最常使用的複製協議。在部署DRBD是能夠根據安
從圖中能夠看出,DRBD是做爲調度服務器的存儲高可用套件來實現數據的在調度服務器保持同步,完成相關的業務服務。
系統環境: centos-6.4 64bit
drbd: drbd-8.4.4.tar.gz
第一步:在以下網站下載源碼包(本次採用Version drbd-8.4.4)
DRBD的官方網站爲:http://www.drbd.org/
×××地址:http://oss.linbit.com/drbd/
在此以前。請安裝一下一些簡單的工具
yum install -y kernel-devel
推薦源碼安裝:
tar xvf drbd-8.4.4.tar.gz
./configure --prefix=/usr/local/drbd --with-km 生成drbd.ko文件
make KDIR=/usr/src/kernels/2.6.32-131.0.15.el6.x86_64 內核版本根據具體狀況
make install
cp drbd/drbd.ko /lib/modules/`uname -r`/kernel/lib/
# modprobe drbd
查看模塊是否加載成功
# lsmod | grep drbd
drbd 344534 0
libcrc32c 1180 1 drbd cp
設置開機啓動
cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d/
chkconfig --add drbd
chkconfig drbd on
mkdir -p /usr/local/drbd/var/run/drbd 添加必要運行目錄
到此drbd安裝完成。
主備兩臺都如上安裝。
基本的主備配置主服務器:
查看drbd的主配置文件
# pwd
/usr/local/drbd/etc
# cat drbd.conf
# You can find an example in /usr/share/doc/drbd.../drbd.conf.example
include "drbd.d/global_common.conf";
include "drbd.d/*.res";
因而可知:主配置文件裏面已經包含了全局配置文件和drbd目錄下以.res結尾的文件
修改全局配置文件:
# pwd
/usr/local/drbd/etc/drbd.d
# ls
global_common.conf
配置文件內容以下修改(紅色新增):
# cat global_common.conf
global {
usage-count yes; #是否參加drbd的使用者統計,默認此選項爲yes
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C; #使用drbd的同步協議
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 {
# wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb
}
options {
# cpu-mask on-no-data-accessible
}
disk {
on-io-error detach; #配置I/O錯誤處理策略爲分離
# size max-bio-bvecs on-io-error fencing disk-barrier disk-flushes
# disk-drain md-flushes resync-rate resync-after al-extents
# c-plan-ahead c-delay-target c-fill-target c-max-rate
# c-min-rate disk-timeout
}
net {
# protocol timeout max-epoch-size max-buffers unplug-watermark
# connect-int ping-int sndbuf-size rcvbuf-size ko-count
# allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri
# after-sb-1pri after-sb-2pri always-asbp rr-conflict
# ping-timeout data-integrity-alg tcp-cork on-congestion
# congestion-fill congestion-extents csums-alg verify-alg
# use-rle
}
syncer {
rate 1024M; #設置主備節點同步時的網絡速率
}
}
資源配置文件配置以下需本身新建,這是關鍵
# vim /usr/local/drbd/etc/drbd.d/drbd.res
resource r1 { #這個r1是定義資源的名字
on rh10 { #on開頭,後面是主機名稱
device /dev/drbd0; #drbd設備名稱
disk /dev/xvdb1; #drbd0使用的磁盤分區爲xvdb1
address 10.243.29.64:7789; #設置drbd監聽地址與端口
meta-disk internal;
}
on rh11 { #on開頭,後面是主機名稱
device /dev/drbd0; #drbd設備名稱
disk /dev/xvdb1; #drbd0使用的磁盤分區爲xvdb1
address 10.243.29.65:7789; #設置drbd監聽地址與端口
meta-disk internal;
}
}
備服務器配置:(同上)
主備啓動服務:
在啓動DRBD以前,你須要分別在兩臺主機上建立供DRBD記錄信息的數據塊.分別在兩臺主機上執行:
# drbdadm create-md r0 或者執行drbdadm create-md all
# drbdadm create-md r0
若是遇到no resourcedefind能夠指定配置文件位置
drbdadm -c /usr/local/drbd/etc/drbd.conf create-md r0
若是提示:Command 'drbdmeta 0 v08 /dev/sdc7 internal create-md' terminated with exit coolcode 40
運行以下命令清除元數據,從新執行
# dd if=/dev/zero bs=1M count=1 of=/dev/xvdb1
若是已經配置過了從新配置能夠將原資源down
Drbdadm down r0
若是遇到腦裂問題如:
0:mfs_store/0 WFConnection Primary/UnknownUpToDate/DUnknown C r-----
從節點上執行:
# drbdadm disconnect r0
# drbdadm secondary r0
# drbdadm --discard-my-data connect r0
# cat /proc/drbd
主節點上執行:
# drbdadm connect r0
# cat /proc/drbd
在兩個節點啓動服務
#/etc/init.d/drbd start
#/etc/init.d/drbd start
最好同時啓動
# netstat -anput|grep 7789
tcp 0 0 10.243.29.64:7789 10.243.29.65:51989 ESTABLISHED
tcp 0 0 10.243.29.64:53835 10.243.29.65:7789 ESTABLISHED
在任意節點查看節點狀態:
[root@drbd1 ~]# cat /proc/drbd
1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r----
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:2007644
對輸出的含義解釋以下:
ro表示角色信息,第一次啓動drbd時,兩個drbd節點默認都處於Secondary狀態,
ds是磁盤狀態信息,「Inconsistent/Inconsisten」,即爲「不一致/不一致」狀態,表示兩個節點的磁盤數據處於不一致狀態。
Ns表示網絡發送的數據包信息。
Dw是磁盤寫信息
Dr是磁盤讀信息
設置主節點
因爲默認沒有主次節點之分,於是須要設置兩個主機的主次節點,選擇須要設置爲主節點的主機,而後執行以下命令:
#drbdsetup /dev/drbd1 primary –o
或者執行下面命令也是能夠的
#drbdadm -- --overwrite-data-of-peer primary all
而後能夠設置主備了
#/sbin/drbdadm primary r0(主節點)
#/sbin/drbdadm secondary r0(備節點)
查看主備節點
# drbd-overview
0:??not-found?? Connected Secondary/Primary UpToDate/UpToDate C r-----
查看同步狀態:
# cat /proc/drbd
version: 8.4.4 (api:1/proto:86-101)
GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@rh11, 2015-05-12 00:12:42
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---n-
ns:1644176 nr:0 dw:0 dr:1646232 al:0 bm:100 lo:1 pe:10 ua:7 ap:0 ep:1 wo:f oos:19322388
[>...................] sync'ed: 7.9% (18868/20472)M
finish: 0:08:07 speed: 39,640 (36,480) K/sec
從輸出可知:
「ro狀態如今變爲「Primary/Secondary」,「ds」狀態也變爲「UpToDate/Inconsistent」,也就是「實時/不一致」狀態,如今數據正在主備兩個主機的磁盤間進行同步,且同步進度爲7.9%,同步速度每秒3968M左右。
等待片刻,再次查看同步狀態,輸出以下:
[root@rh10 ~]# cat /proc/drbd
version: 8.4.4 (api:1/proto:86-101)
GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@rh10, 2015-05-11 09:47:31
0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
ns:0 nr:20964116 dw:20964116 dr:0 al:0 bm:1280 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
能夠看到同步完成了,而且「ds「狀態也變爲「UpToDate/UpToDate」了。即爲「實時/實時」狀態了。
驗證測試:主服務器增長文件
格式化文件系統
#mkfs.ext4 /dev/drbd0
#mount /dev/drbd0 /drbd
若是在從節點,會報錯
[root@rh10 ~]# mkfs.ext4 /dev/drbd0
mke2fs 1.41.12 (17-May-2010)
mkfs.ext4: 錯誤的介質類型 while trying to determine filesystem size
[root@rh11 drbd]# ls 增長測試文件,切換後在備服務器是否正確
data.txt lost+found si-tech
主備切換
主備節點切換有兩種方式,分別是中止drbd服務切換和正常切換
正常切換方式:
#drbdadm secondary all(主節點)
#drbdadm primary all(備節點)
最後在備用節點掛載磁盤分區便可:
[root@drbd2 ~]#mount /dev/drbd0 /mnt
[root@rh10 drbd]# ls
data.txt lost+found si-tech
服務切換方式:
關閉主節點服務,此時掛載的drbd分區就自動在主節點卸載了,而後在備用節點執行切換命令:
#drbdsetup /dev/drbd0 primary --o
#drbdadm primary all
軟件卸載
直接make uninstall,而後
make clean