一、DRBD簡(jiǎn)介 DRBD的全稱為:Distributed ReplicatedBlock Device(DRBD)分布式塊設(shè)備復(fù)制,DRBD是由內(nèi)核模塊和相關(guān)腳本而構(gòu)成,用以構(gòu)建高可用性的集群。其實(shí)現(xiàn)方式是通過網(wǎng)絡(luò)來鏡像整個(gè)設(shè)備。你可以把它看作是一種網(wǎng)絡(luò)RAID。它允許用戶在遠(yuǎn)程機(jī)器上建立一個(gè)本地塊設(shè)備的實(shí)時(shí)鏡像。 二、DRBD是如何工作的呢? (DRBD Primary)負(fù)責(zé)接收數(shù)據(jù),把數(shù)據(jù)寫到本地磁盤并發(fā)送給另一臺(tái)主機(jī)(DRBD Secondary)。另一個(gè)主機(jī)再將數(shù)據(jù)存到自己的磁盤中。目前,DRBD每次只允許對(duì)一個(gè)節(jié)點(diǎn)進(jìn)行讀寫訪問,但這對(duì)于通常的故障切換高可用集群來說已經(jīng)足夠用了。有可能以后的版本支持兩個(gè)節(jié)點(diǎn)進(jìn)行讀寫存取。 三、DRBD與HA的關(guān)系 一個(gè)DRBD系統(tǒng)由兩個(gè)節(jié)點(diǎn)構(gòu)成,與HA集群類似,也有主節(jié)點(diǎn)和備用節(jié)點(diǎn)之分,在帶有主要設(shè)備的節(jié)點(diǎn)上,應(yīng)用程序和操作系統(tǒng)可以運(yùn)行和訪問DRBD設(shè)備(/dev/drbd*)。在主節(jié)點(diǎn)寫入的數(shù)據(jù)通過DRBD設(shè)備存儲(chǔ)到主節(jié)點(diǎn)的磁盤設(shè)備中,同時(shí),這個(gè)數(shù)據(jù)也會(huì)自動(dòng)發(fā)送到備用節(jié)點(diǎn)對(duì)應(yīng)的DRBD設(shè)備,最終寫入備用節(jié)點(diǎn)的磁盤設(shè)備上,在備用節(jié)點(diǎn)上,DRBD只是將數(shù)據(jù)從DRBD設(shè)備寫入到備用節(jié)點(diǎn)的磁盤中?,F(xiàn)在大部分的高可用性集群都會(huì)使用共享存儲(chǔ),而DRBD也可以作為一個(gè)共享存儲(chǔ)設(shè)備,使用DRBD不需要太多的硬件的投資。因?yàn)樗?/span>TCP/IP網(wǎng)絡(luò)中運(yùn)行,所以,利用DRBD作為共享存儲(chǔ)設(shè)備,要節(jié)約很多成本,因?yàn)閮r(jià)格要比專用的存儲(chǔ)網(wǎng)絡(luò)便宜很多;其性能與穩(wěn)定性方面也不錯(cuò) 四、DRBD復(fù)制模式 協(xié)議A: 異步復(fù)制協(xié)議。一旦本地磁盤寫入已經(jīng)完成,數(shù)據(jù)包已在發(fā)送隊(duì)列中,則寫被認(rèn)為是完成的。在一個(gè)節(jié)點(diǎn)發(fā)生故障時(shí),可能發(fā)生數(shù)據(jù)丟失,因?yàn)楸粚懭氲竭h(yuǎn)程節(jié)點(diǎn)上的數(shù)據(jù)可能仍在發(fā)送隊(duì)列。盡管,在故障轉(zhuǎn)移節(jié)點(diǎn)上的數(shù)據(jù)是一致的,但沒有及時(shí)更新。這通常是用于地理上分開的節(jié)點(diǎn) 協(xié)議B: 內(nèi)存同步(半同步)復(fù)制協(xié)議。一旦本地磁盤寫入已完成且復(fù)制數(shù)據(jù)包達(dá)到了對(duì)等節(jié)點(diǎn)則認(rèn)為寫在主節(jié)點(diǎn)上被認(rèn)為是完成的。數(shù)據(jù)丟失可能發(fā)生在參加的兩個(gè)節(jié)點(diǎn)同時(shí)故障的情況下,因?yàn)樵趥鬏斨械臄?shù)據(jù)可能不會(huì)被提交到磁盤 協(xié)議C: 同步復(fù)制協(xié)議。只有在本地和遠(yuǎn)程節(jié)點(diǎn)的磁盤已經(jīng)確認(rèn)了寫操作完成,寫才被認(rèn)為完成。沒有任何數(shù)據(jù)丟失,所以這是一個(gè)群集節(jié)點(diǎn)的流行模式,但I / O吞吐量依賴于網(wǎng)絡(luò)帶寬
一般使用協(xié)議C,但選擇C協(xié)議將影響流量,從而影響網(wǎng)絡(luò)時(shí)延。為了數(shù)據(jù)可靠性,我們?cè)谏a(chǎn)環(huán)境使用時(shí)須慎重選項(xiàng)使用哪一種協(xié)議 四、 DRBD工作原理圖 DRBD是linux的內(nèi)核的存儲(chǔ)層中的一個(gè)分布式存儲(chǔ)系統(tǒng),可用使用DRBD在兩臺(tái)Linux服務(wù)器之間共享塊設(shè)備,共享文件系統(tǒng)和數(shù)據(jù)。類似于一個(gè)網(wǎng)絡(luò)RAID-1的功能,如圖所示:
五、環(huán)境介紹及安裝前準(zhǔn)備 環(huán)境介紹:
系統(tǒng)版本:CentOS 6.4_x86_64 DRBD軟件:drbd-8.4.3-33.el6.x86_64 drbd-kmdl-2.6.32-358.el6-8.4.3-33.el6.x86_64 下載地址:http:// 注意:這里兩個(gè)軟件的版本必須使用一致,而drbd-kmdl的版本要與當(dāng)前系統(tǒng)的版本相對(duì)應(yīng),當(dāng)然在實(shí)際應(yīng)用中需要根據(jù)自己的系統(tǒng)平臺(tái)下載符合需要的軟件版本;查看系統(tǒng)版本 "uname -r"
安裝前準(zhǔn)備: 1、每個(gè)節(jié)點(diǎn)的主機(jī)名稱須跟"uname -n"命令的執(zhí)行結(jié)果一樣 1 2 3 4 5 6 7 | ######NOD1節(jié)點(diǎn)執(zhí)行
sed -i 's@\(HOSTNAME=\).*@\1nod1.allen.com@g' /etc/sysconfig/network
hostname nod1.allen.com
######NOD2節(jié)點(diǎn)執(zhí)行
sed -i 's@\(HOSTNAME=\).*@\1nod2.allen.com@g' /etc/sysconfig/network
hostname nod2.allen.com
注釋:修改文件須重啟系統(tǒng)生效,這里先修改文件然后執(zhí)行命令修改主機(jī)名稱可以不用重啟
|
2、兩個(gè)節(jié)點(diǎn)的主機(jī)名稱和對(duì)應(yīng)的IP地址可以正常解析
1 2 3 4 5 | ######在NOD1與NOD2節(jié)點(diǎn)執(zhí)行
cat > /etc/hosts << EOF
192.168.137.225 nod1.allen.com nod1
192.168.137.222 nod2.allen.com nod2
EOF
|
3、配置epel的yum源 點(diǎn)此下載并安裝
1 2 | ######在NOD1與NOD2節(jié)點(diǎn)安裝
rpm -ivh epel-release-6-8.noarch.rpm
|
4、需要為兩個(gè)節(jié)點(diǎn)分別提供大小相同的分區(qū) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | ######在NOD1節(jié)點(diǎn)上創(chuàng)建分區(qū),分區(qū)大小必須與NOD2節(jié)點(diǎn)保持一樣
[root@nod1 ~] # fdisk /dev/sda
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (7859-15665, default 7859):
Using default value 7859
Last cylinder, +cylinders or +size{K,M,G} (7859-15665, default 15665): +2G
Command (m for help): w
[root@nod1 ~] # partx /dev/sda #讓內(nèi)核重新讀取分區(qū)
######查看內(nèi)核有沒有識(shí)別分區(qū),如果沒有需要重新啟動(dòng),這里沒有識(shí)別需要重啟系統(tǒng)
[root@nod1 ~] # cat /proc/partitions
major minor #blocks name
8 0 125829120 sda
8 1 204800 sda1
8 2 62914560 sda2
253 0 20971520 dm-0
253 1 2097152 dm-1
253 2 10485760 dm-2
253 3 20971520 dm-3
[root@nod1 ~] # reboot
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | ######在NOD2節(jié)點(diǎn)上創(chuàng)建分區(qū),分區(qū)大小必須與NOD1節(jié)點(diǎn)保持一樣
[root@nod2 ~] # fdisk /dev/sda
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (7859-15665, default 7859):
Using default value 7859
Last cylinder, +cylinders or +size{K,M,G} (7859-15665, default 15665): +2G
Command (m for help): w
[root@nod2 ~] # partx /dev/sda #讓內(nèi)核重新讀取分區(qū)
######查看內(nèi)核有沒有識(shí)別分區(qū),如果沒有需要重新啟動(dòng),這里沒有識(shí)別需要重啟系統(tǒng)
[root@nod2 ~] # cat /proc/partitions
major minor #blocks name
8 0 125829120 sda
8 1 204800 sda1
8 2 62914560 sda2
253 0 20971520 dm-0
253 1 2097152 dm-1
253 2 10485760 dm-2
253 3 20971520 dm-3
[root@nod2 ~] # reboot
|
六、安裝并配置DRBD 1、在NOD1與NOD2節(jié)點(diǎn)上安裝DRBD軟件包
1 2 3 4 5 6 7 8 | ######NOD1
[root@nod1 ~] # ls drbd-*
drbd-8.4.3-33.el6.x86_64.rpm drbd-kmdl-2.6.32-358.el6-8.4.3-33.el6.x86_64.rpm
[root@nod1 ~] # yum -y install drbd-*.rpm
######NOD2
[root@nod2 ~] # ls drbd-*
drbd-8.4.3-33.el6.x86_64.rpm drbd-kmdl-2.6.32-358.el6-8.4.3-33.el6.x86_64.rpm
[root@nod2 ~] # yum -y install drbd-*.rpm
|
2、查看DRBD配置文件
1 2 3 4 5 6 7 8 9 10 | ll /etc/drbd .conf;ll /etc/drbd .d/
-rw-r--r-- 1 root root 133 May 14 21:12 /etc/drbd .conf #主配置文件
total 4
-rw-r--r-- 1 root root 1836 May 14 21:12 global_common.conf #全局配置文件
######查看主配置文件內(nèi)容
cat /etc/drbd .conf
######主配置文件中包含了全局配置文件及"drbd.d/"目錄下以.res結(jié)尾的文件
# You can find an example in /usr/share/doc/drbd.../drbd.conf.example
include "drbd.d/global_common.conf" ;
include "drbd.d/*.res" ;
|
3、修改配置文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | [root@nod1 ~] #vim /etc/drbd.d/global_common.conf
global {
usage-count no; #是否參加DRBD使用統(tǒng)計(jì),默認(rèn)為yes
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C; #使用DRBD的同步協(xié)議
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錯(cuò)誤處理策略為分離
# 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 {
cram-hmac-alg "sha1" ; #設(shè)置加密算法
shared-secret "allendrbd" ; #設(shè)置加密密鑰
# 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; #設(shè)置主備節(jié)點(diǎn)同步時(shí)的網(wǎng)絡(luò)速率
}
}
|
注釋: on-io-error <strategy>策略可能為以下選項(xiàng)之一 detach 分離:這是默認(rèn)和推薦的選項(xiàng),如果在節(jié)點(diǎn)上發(fā)生底層的硬盤I/O錯(cuò)誤,它會(huì)將設(shè)備運(yùn)行在Diskless無盤模式下 pass_on:DRBD會(huì)將I/O錯(cuò)誤報(bào)告到上層,在主節(jié)點(diǎn)上,它會(huì)將其報(bào)告給掛載的文件系統(tǒng),但是在此節(jié)點(diǎn)上就往往忽略(因此此節(jié)點(diǎn)上沒有可以報(bào)告的上層) -local-in-error:調(diào)用本地磁盤I/O處理程序定義的命令;這需要有相應(yīng)的local-io-error調(diào)用的資源處理程序處理錯(cuò)誤的命令;這就給管理員有足夠自由的權(quán)力命令命令或是腳本調(diào)用local-io-error處理I/O錯(cuò)誤 4、添加資源文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [root@nod1 ~] # vim /etc/drbd.d/drbd.res
resource drbd {
on nod1.allen.com { #第個(gè)主機(jī)說明以on開頭,后面是主機(jī)名稱
device /dev/drbd0 ; #DRBD設(shè)備名稱
disk /dev/sda3 ; #drbd0使用的磁盤分區(qū)為"sda3"
address 192.168.137.225:7789; #設(shè)置DRBD監(jiān)聽地址與端口
meta-disk internal;
}
on nod2.allen.com {
device /dev/drbd0 ;
disk /dev/sda3 ;
address 192.168.137.222:7789;
meta-disk internal;
}
}
|
5、將配置文件為NOD2提供一份 1 2 3 4 5 6 7 8 | [root@nod1 ~] # scp /etc/drbd.d/{global_common.conf,drbd.res} nod2:/etc/drbd.d/
The authenticity of host 'nod2 (192.168.137.222)' can't be established.
RSA key fingerprint is 29:d3:28:85:20:a1:1f:2a:11:e5:88: cd :25:d0:95:c7.
Are you sure you want to continue connecting ( yes /no )? yes
Warning: Permanently added 'nod2' (RSA) to the list of known hosts.
root@nod2's password:
global_common.conf 100% 1943 1.9KB /s 00:00
drbd.res 100% 318 0.3KB /s 00:00
|
6、初始化資源并啟動(dòng)服務(wù)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | ######在NOD1節(jié)點(diǎn)上初始化資源并啟動(dòng)服務(wù)
[root@nod1 ~] # drbdadm create-md drbd
Writing meta data...
initializing activity log
NOT initializing bitmap
lk_bdev_save( /var/lib/drbd/drbd-minor-0 .lkbd) failed: No such file or directory
New drbd meta data block successfully created. #提示已經(jīng)創(chuàng)建成功
lk_bdev_save( /var/lib/drbd/drbd-minor-0 .lkbd) failed: No such file or directory
######啟動(dòng)服務(wù)
[root@nod1 ~] # service drbd start
Starting DRBD resources: [
create res: drbd
prepare disk: drbd
adjust disk: drbd
adjust net: drbd
]
..........
***************************************************************
DRBD's startup script waits for the peer node(s) to appear.
- In case this node was already a degraded cluster before the
reboot the timeout is 0 seconds. [degr-wfc-timeout]
- If the peer was available before the reboot the timeout will
expire after 0 seconds. [wfc-timeout]
(These values are for resource 'drbd' ; 0 sec -> wait forever)
To abort waiting enter 'yes' [ 12]: yes
######查看監(jiān)聽端口
[root@nod1 ~] # ss -tanl |grep 7789
LISTEN 0 5 192.168.137.225:7789 *:*
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | ######在NOD2節(jié)點(diǎn)上初始化資源并啟動(dòng)服務(wù)
[root@nod2 ~] # drbdadm create-md drbd
Writing meta data...
initializing activity log
NOT initializing bitmap
lk_bdev_save( /var/lib/drbd/drbd-minor-0 .lkbd) failed: No such file or directory
New drbd meta data block successfully created.
lk_bdev_save( /var/lib/drbd/drbd-minor-0 .lkbd) failed: No such file or directory
######啟動(dòng)服務(wù)
[root@nod2 ~] # service drbd start
Starting DRBD resources: [
create res: drbd
prepare disk: drbd
adjust disk: drbd
adjust net: drbd
]
######查看監(jiān)聽地址與端口
[root@nod2 ~] # netstat -anput|grep 7789
tcp 0 0 192.168.137.222:42345 192.168.137.225:7789 ESTABLISHED -
tcp 0 0 192.168.137.222:7789 192.168.137.225:42325 ESTABLISHED -
######查看DRBD啟動(dòng)狀態(tài)
[root@nod2 ~] # drbd-overview
0:drbd /0 Connected Secondary /Secondary Inconsistent /Inconsistent C r-----
|
7、資源的連接狀態(tài)詳細(xì)介紹 7.1、如何查看資源連接狀態(tài)?
1 2 | [root@nod1 ~] # drbdadm cstate drbd #drbd為資源名稱
Connected
|
7.2、資源的連接狀態(tài);一個(gè)資源可能有以下連接狀態(tài)中的一種 StandAlone 獨(dú)立的:網(wǎng)絡(luò)配置不可用;資源還沒有被連接或是被管理斷開(使用 drbdadm disconnect 命令),或是由于出現(xiàn)認(rèn)證失敗或是腦裂的情況 Disconnecting 斷開:斷開只是臨時(shí)狀態(tài),下一個(gè)狀態(tài)是StandAlone獨(dú)立的 Unconnected 懸空:是嘗試連接前的臨時(shí)狀態(tài),可能下一個(gè)狀態(tài)為WFconnection和WFReportParams Timeout 超時(shí):與對(duì)等節(jié)點(diǎn)連接超時(shí),也是臨時(shí)狀態(tài),下一個(gè)狀態(tài)為Unconected懸空 BrokerPipe:與對(duì)等節(jié)點(diǎn)連接丟失,也是臨時(shí)狀態(tài),下一個(gè)狀態(tài)為Unconected懸空 NetworkFailure:與對(duì)等節(jié)點(diǎn)推動(dòng)連接后的臨時(shí)狀態(tài),下一個(gè)狀態(tài)為Unconected懸空 ProtocolError:與對(duì)等節(jié)點(diǎn)推動(dòng)連接后的臨時(shí)狀態(tài),下一個(gè)狀態(tài)為Unconected懸空 TearDown 拆解:臨時(shí)狀態(tài),對(duì)等節(jié)點(diǎn)關(guān)閉,下一個(gè)狀態(tài)為Unconected懸空 WFConnection:等待和對(duì)等節(jié)點(diǎn)建立網(wǎng)絡(luò)連接 WFReportParams:已經(jīng)建立TCP連接,本節(jié)點(diǎn)等待從對(duì)等節(jié)點(diǎn)傳來的第一個(gè)網(wǎng)絡(luò)包 Connected 連接:DRBD已經(jīng)建立連接,數(shù)據(jù)鏡像現(xiàn)在可用,節(jié)點(diǎn)處于正常狀態(tài) StartingSyncS:完全同步,有管理員發(fā)起的剛剛開始同步,未來可能的狀態(tài)為SyncSource或PausedSyncS StartingSyncT:完全同步,有管理員發(fā)起的剛剛開始同步,下一狀態(tài)為WFSyncUUID WFBitMapS:部分同步剛剛開始,下一步可能的狀態(tài)為SyncSource或PausedSyncS WFBitMapT:部分同步剛剛開始,下一步可能的狀態(tài)為WFSyncUUID WFSyncUUID:同步即將開始,下一步可能的狀態(tài)為SyncTarget或PausedSyncT SyncSource:以本節(jié)點(diǎn)為同步源的同步正在進(jìn)行 SyncTarget:以本節(jié)點(diǎn)為同步目標(biāo)的同步正在進(jìn)行 PausedSyncS:以本地節(jié)點(diǎn)是一個(gè)持續(xù)同步的源,但是目前同步已經(jīng)暫停,可能是因?yàn)榱硗庖粋€(gè)同步正在進(jìn)行或是使用命令(drbdadm pause-sync)暫停了同步 PausedSyncT:以本地節(jié)點(diǎn)為持續(xù)同步的目標(biāo),但是目前同步已經(jīng)暫停,這可以是因?yàn)榱硗庖粋€(gè)同步正在進(jìn)行或是使用命令(drbdadm pause-sync)暫停了同步 VerifyS:以本地節(jié)點(diǎn)為驗(yàn)證源的線上設(shè)備驗(yàn)證正在執(zhí)行 VerifyT:以本地節(jié)點(diǎn)為驗(yàn)證目標(biāo)的線上設(shè)備驗(yàn)證正在執(zhí)行 7.3、資源角色 查看資源角色命令 1 2 3 4 5 6 7 8 9 10 11 | [root@nod1 ~] # drbdadm role drbd
Secondary /Secondary
[root@nod1 ~] # cat /proc/drbd
version: 8.4.3 (api:1 /proto :86-101)
GIT- hash : 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-05-27 04:30:21
0: 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:f oos:2103412
注釋:
Parimary 主:資源目前為主,并且可能正在被讀取或?qū)懭?,如果不是雙主只會(huì)出現(xiàn)在兩個(gè)節(jié)點(diǎn)中的其中一個(gè)節(jié)點(diǎn)上
Secondary 次:資源目前為次,正常接收對(duì)等節(jié)點(diǎn)的更新
Unknown 未知:資源角色目前未知,本地的資源不會(huì)出現(xiàn)這種狀態(tài)
|
7.4、硬盤狀態(tài)
查看硬盤狀態(tài)命令
1 2 | [root@nod1 ~] # drbdadm dstate drbd
Inconsistent /Inconsistent
|
本地和對(duì)等節(jié)點(diǎn)的硬盤有可能為下列狀態(tài)之一: Diskless 無盤:本地沒有塊設(shè)備分配給DRBD使用,這表示沒有可用的設(shè)備,或者使用drbdadm命令手工分離或是底層的I/O錯(cuò)誤導(dǎo)致自動(dòng)分離 Attaching:讀取無數(shù)據(jù)時(shí)候的瞬間狀態(tài) Failed 失敗:本地塊設(shè)備報(bào)告I/O錯(cuò)誤的下一個(gè)狀態(tài),其下一個(gè)狀態(tài)為Diskless無盤 Negotiating:在已經(jīng)連接的DRBD設(shè)置進(jìn)行Attach讀取無數(shù)據(jù)前的瞬間狀態(tài) Inconsistent:數(shù)據(jù)是不一致的,在兩個(gè)節(jié)點(diǎn)上(初始的完全同步前)這種狀態(tài)出現(xiàn)后立即創(chuàng)建一個(gè)新的資源。此外,在同步期間(同步目標(biāo))在一個(gè)節(jié)點(diǎn)上出現(xiàn)這種狀態(tài) Outdated:數(shù)據(jù)資源是一致的,但是已經(jīng)過時(shí) DUnknown:當(dāng)對(duì)等節(jié)點(diǎn)網(wǎng)絡(luò)連接不可用時(shí)出現(xiàn)這種狀態(tài) Consistent:一個(gè)沒有連接的節(jié)點(diǎn)數(shù)據(jù)一致,當(dāng)建立連接時(shí),它決定數(shù)據(jù)是UpToDate或是Outdated UpToDate:一致的最新的數(shù)據(jù)狀態(tài),這個(gè)狀態(tài)為正常狀態(tài) 7.5、啟用和禁用資源
1 2 3 4 5 6 | ######手動(dòng)啟用資源
drbdadm up <resource>
######手動(dòng)禁用資源
drbdadm down <resource>
注釋:
resource:為資源名稱;當(dāng)然也可以使用all表示[停用|啟用]所有資源
|
7.6、升級(jí)和降級(jí)資源
1 2 3 4 5 | ######升級(jí)資源
drbdadm primary <resource>
######降級(jí)資源
drbdadm secondary <resource>
注釋:在單主模式下的DRBD,兩個(gè)節(jié)點(diǎn)同時(shí)處于連接狀態(tài),任何一個(gè)節(jié)點(diǎn)都可以在特定的時(shí)間內(nèi)變成主;但兩個(gè)節(jié)點(diǎn)中只能一為主,如果已經(jīng)有一個(gè)主,需先降級(jí)才可能升級(jí);在雙主模式下沒有這個(gè)限制
|
8、初始化設(shè)備同步 8.1、選擇一個(gè)初始同步源;如果是新初始化的或是空盤,這個(gè)選擇可以是任意的,但是如果其中的一個(gè)節(jié)點(diǎn)已經(jīng)在使用并包含有用的數(shù)據(jù),那么選擇同步源是至關(guān)重要的;如果選錯(cuò)了初始化同步方向,就會(huì)造成數(shù)據(jù)丟失,因此需要十分小心 8.2、啟動(dòng)初始化完全同步,這一步只能在初始化資源配置的一個(gè)節(jié)點(diǎn)上進(jìn)行,并作為同步源選擇的節(jié)點(diǎn)上;命令如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | [root@nod1 ~] # drbdadm -- --overwrite-data-of-peer primary drbd
[root@nod1 ~] # cat /proc/drbd #查看同步進(jìn)度
version: 8.4.3 (api:1 /proto :86-101)
GIT- hash : 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-05-27 04:30:21
0: cs:SyncSource ro:Primary /Secondary ds:UpToDate /Inconsistent C r---n-
ns:1897624 nr:0 dw:0 dr:1901216 al:0 bm:115 lo:0 pe:3 ua:3 ap:0 ep:1 wo:f oos:207988
[=================>..] sync 'ed: 90.3% (207988 /2103412 )K
finish: 0:00:07 speed: 26,792 (27,076) K /sec
######當(dāng)同步完成時(shí)如以下狀態(tài)
version: 8.4.3 (api:1 /proto :86-101)
GIT- hash : 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-05-27 04:30:21
0: cs:Connected ro:Primary /Secondary ds:UpToDate /UpToDate C r-----
ns:2103412 nr:0 dw:0 dr:2104084 al:0 bm:129 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
注釋: drbd:為資源名稱
######查看同步進(jìn)度也可使用以下命令
drbd-overview
|
9、創(chuàng)建文件系統(tǒng) 9.1、文件系統(tǒng)只能掛載在主(Primary)節(jié)點(diǎn)上,因此在設(shè)置好主節(jié)點(diǎn)后才可以對(duì)DRBD設(shè)備進(jìn)行格式化操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ######格式化文件系統(tǒng)
[root@nod1 ~] # mkfs.ext4 /dev/drbd0
######掛載文件系統(tǒng)
[root@nod1 ~] # mount /dev/drbd0 /mnt/
######查看掛載
[root@nod1 ~] # mount |grep drbd0
/dev/drbd0 on /mnt type ext4 (rw)
注釋:
"/dev/drbd0" 為資源中定義已定義的資源名稱
######查看DRBD狀態(tài)
[root@nod1 ~] # drbd-overview
0:drbd /0 Connected Primary /Secondary UpToDate /UpToDate C r-----
注釋:
Primary:當(dāng)前節(jié)點(diǎn)為主;在前面為當(dāng)前節(jié)點(diǎn)
Secondary:備用節(jié)點(diǎn)為次
|
9.2、在掛載目錄中創(chuàng)建一個(gè)測(cè)試文件并卸載;然后 1 2 3 4 5 | [root@nod1 ~] # mkdir /mnt/test
[root@nod1 ~] # ls /mnt/
lost+found test
######在切換主節(jié)點(diǎn)時(shí)必須保證資源不在使用
[root@nod1 ~] # umount /mnt/
|
9.3、切換主備節(jié)點(diǎn)
1 2 3 4 5 6 7 8 9 10 | ######先把當(dāng)前主節(jié)點(diǎn)降級(jí)為次
[root@nod1 ~] # drbdadm secondary drbd
######查看DRBD狀態(tài)
[root@nod1 ~] # drbd-overview
0:drbd /0 Connected Secondary /Secondary UpToDate /UpToDate C r-----
######在NOD2節(jié)點(diǎn)升級(jí)
[root@nod2 ~] # drbdadm primary drbd
######查看DRBD狀態(tài)
[root@nod2 ~] # drbd-overview
0:drbd /0 Connected Primary /Secondary UpToDate /UpToDate C r-----
|
9.4、掛載設(shè)備并驗(yàn)證文件是否存在 1 2 3 | [root@nod2 ~] # mount /dev/drbd0 /mnt/
[root@nod2 ~] # ls /mnt/
lost+found test
|
七、DRBD腦裂的模擬及修復(fù) 注釋:我們還接著上面的實(shí)驗(yàn)繼續(xù)進(jìn)行,現(xiàn)在NOD2為主節(jié)點(diǎn)而NOD1為備節(jié)點(diǎn) 1、斷開主(parmary)節(jié)點(diǎn);關(guān)機(jī)、斷開網(wǎng)絡(luò)或重新配置其他的IP都可以;這里選擇的是斷開網(wǎng)絡(luò) 2、查看兩節(jié)點(diǎn)狀態(tài) 1 2 3 4 5 | [root@nod2 ~] # drbd-overview
0:drbd /0 WFConnection Primary /Unknown UpToDate /DUnknown C r----- /mnt ext4 2.0G 68M 1.9G 4%
[root@nod1 ~] # drbd-overview
0:drbd /0 StandAlone Secondary /Unknown UpToDate /DUnknown r-----
######由上可以看到兩個(gè)節(jié)點(diǎn)已經(jīng)無法通信;NOD2為主節(jié)點(diǎn),NOD1為備節(jié)點(diǎn)
|
3、將NOD1節(jié)點(diǎn)升級(jí)為主(primary)節(jié)點(diǎn)并掛載資源
1 2 3 4 5 6 | [root@nod1 ~] # drbdadm primary drbd
[root@nod1 ~] # drbd-overview
0:drbd /0 StandAlone Primary /Unknown UpToDate /DUnknown r-----
[root@nod1 ~] # mount /dev/drbd0 /mnt/
[root@nod1 ~] # mount | grep drbd0
/dev/drbd0 on /mnt type ext4 (rw)
|
4、假如原來的主(primary)節(jié)點(diǎn)修復(fù)好重新上線了,這時(shí)出現(xiàn)了腦裂情況
1 2 3 4 5 6 7 8 9 10 11 12 13 | [root@nod2 ~] # tail -f /var/log/messages
Sep 19 01:56:06 nod2 kernel: d-con drbd: Terminating drbd_a_drbd
Sep 19 01:56:06 nod2 kernel: block drbd0: helper command : /sbin/drbdadm initial- split -brain minor-0 exit code 0 (0x0)
Sep 19 01:56:06 nod2 kernel: block drbd0: Split-Brain detected but unresolved, dropping connection!
Sep 19 01:56:06 nod2 kernel: block drbd0: helper command : /sbin/drbdadm split -brain minor-0
Sep 19 01:56:06 nod2 kernel: block drbd0: helper command : /sbin/drbdadm split -brain minor-0 exit code 0 (0x0)
Sep 19 01:56:06 nod2 kernel: d-con drbd: conn( NetworkFailure -> Disconnecting )
Sep 19 01:56:06 nod2 kernel: d-con drbd: error receiving ReportState, e: -5 l: 0!
Sep 19 01:56:06 nod2 kernel: d-con drbd: Connection closed
Sep 19 01:56:06 nod2 kernel: d-con drbd: conn( Disconnecting -> StandAlone )
Sep 19 01:56:06 nod2 kernel: d-con drbd: receiver terminated
Sep 19 01:56:06 nod2 kernel: d-con drbd: Terminating drbd_r_drbd
Sep 19 01:56:18 nod2 kernel: block drbd0: role( Primary -> Secondary )
|
5、再次查看兩節(jié)點(diǎn)的狀態(tài)
1 2 3 4 | [root@nod1 ~] # drbdadm role drbd
Primary /Unknown
[root@nod2 ~] # drbdadm role drbd
Primary /Unknown
|
6、查看NOD1與NOD2連接狀態(tài)
1 2 3 4 5 | [root@nod1 ~] # drbd-overview
0:drbd /0 StandAlone Primary /Unknown UpToDate /DUnknown r----- /mnt ext4 2.0G 68M 1.9G 4%
[root@nod2 ~] # drbd-overview
0:drbd /0 WFConnection Primary /Unknown UpToDate /DUnknown C r----- /mnt ext4 2.0G 68M 1.9G 4%
######由上可見,狀態(tài)為StandAlone時(shí),主備節(jié)點(diǎn)是不會(huì)通信的
|
7、查看DRBD的服務(wù)狀態(tài)
1 2 3 4 5 6 7 8 9 10 11 12 | [root@nod1 ~] # service drbd status
drbd driver loaded OK; device status:
version: 8.4.3 (api:1 /proto :86-101)
GIT- hash : 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-05-27 04:30:21
m:res cs ro ds p mounted fstype
0:drbd StandAlone Primary /Unknown UpToDate /DUnknown r----- ext4
[root@nod2 ~] # service drbd status
drbd driver loaded OK; device status:
version: 8.4.3 (api:1 /proto :86-101)
GIT- hash : 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-05-27 04:30:21
m:res cs ro ds p mounted fstype
0:drbd WFConnection Primary /Unknown UpToDate /DUnknown C /mnt ext4
|
8、在NOD1備用節(jié)點(diǎn)處理辦法 1 2 3 4 5 6 7 8 9 10 11 12 13 | [root@nod1 ~] # umount /mnt/
[root@nod1 ~] # drbdadm disconnect drbd
drbd: Failure: (162) Invalid configuration request
additional info from kernel:
unknown connection
Command 'drbdsetup disconnect ipv4:192.168.137.225:7789 ipv4:192.168.137.222:7789' terminated with exit code 10
[root@nod1 ~] # drbdadm secondary drbd
[root@nod1 ~] # drbd-overview
0:drbd /0 StandAlone Secondary /Unknown UpToDate /DUnknown r-----
[root@nod1 ~] # drbdadm connect --discard-my-data drbd
######執(zhí)行完以上三步后,你查看會(huì)發(fā)現(xiàn)還是不可用
[root@nod1 ~] # drbd-overview
0:drbd /0 WFConnection Secondary /Unknown UpToDate /DUnknown C r-----
|
9、需要在NOD2節(jié)點(diǎn)上重新建立連接資源
1 2 3 4 5 6 7 | [root@nod2 ~] # drbdadm connect drbd
######查看節(jié)點(diǎn)連接狀態(tài)
[root@nod2 ~] # drbd-overview
0:drbd /0 Connected Primary /Secondary UpToDate /UpToDate C r----- /mnt ext4 2.0G 68M 1.9G 4%
[root@nod1 ~] # drbd-overview
0:drbd /0 Connected Secondary /Primary UpToDate /UpToDate C r-----
######由上可見已經(jīng)恢復(fù)到正常運(yùn)行狀態(tài)
|
注意:特別提醒,如果是單主模式,資源只能在主(Primary)節(jié)點(diǎn)上掛載使用,而且不建議手動(dòng)切換主備節(jié)點(diǎn) 到此DRBD的安裝配置及故障修復(fù)已結(jié)束,DRBD的雙主模式一般情況不會(huì)用到,這里也不再介紹雙主模式的配置;這篇博客寫于中秋節(jié)當(dāng)天,在這里祝大家中秋節(jié)愉快?。?!
本文出自 “ALLEN” 博客,請(qǐng)務(wù)必保留此出處http://502245466.blog.51cto.com/7559397/1298945
|