drbd 配置
DRBD(Distributed Replicated Block Device),DRBD 號(hào)稱是 "網(wǎng)絡(luò) RAID",開源軟件,由
LINBIT 公司開發(fā)。DRBD實(shí)際上是一種塊設(shè)備的實(shí)現(xiàn),主要被用于Linux平臺(tái)下的高可用(HA)方案之中。他有內(nèi)核模塊和相關(guān)程序而組成,通過網(wǎng)絡(luò)通信來(lái)同步鏡像整個(gè)設(shè)備,有點(diǎn)類似于一個(gè)網(wǎng)絡(luò)RAID-1的功能。也就是說(shuō)當(dāng)你將數(shù)據(jù)寫入本地的DRBD設(shè)備上的文件系統(tǒng)時(shí),數(shù)據(jù)會(huì)同時(shí)被發(fā)送到網(wǎng)絡(luò)中的另外一臺(tái)主機(jī)之上,并以完全相同的形式記錄在文件系統(tǒng)中。本地節(jié)點(diǎn)與遠(yuǎn)程節(jié)點(diǎn)的數(shù)據(jù)可以保證實(shí)時(shí)的同步,并保證IO的一致性。所以當(dāng)本地節(jié)點(diǎn)的主機(jī)出現(xiàn)故障時(shí),遠(yuǎn)程節(jié)點(diǎn)的主機(jī)上還會(huì)保留有一份完全相同的數(shù)據(jù),可以繼續(xù)使用,以達(dá)到高可用的目的.
復(fù)制模式:三種
????A:數(shù)據(jù)一旦寫入磁盤并且發(fā)送到網(wǎng)絡(luò)則認(rèn)為完成寫入。特點(diǎn):快,易丟數(shù)據(jù)。
????B:收到對(duì)端"接收"的信號(hào)就認(rèn)為寫完成。半同步。
????C:收到對(duì)端"寫入"信號(hào)才認(rèn)為完成寫操作。特點(diǎn):數(shù)據(jù)完整,應(yīng)用最廣。
軟件下載:http://oss.linbit.com/drbd 官網(wǎng)http://www.drbd.org
實(shí)驗(yàn)環(huán)境:rhel6.5 selinux and iptables disabled
主機(jī):server2 172.25.12.2
server3 172.25.12.3
解決軟件依賴性:yum install gcc flex rpm-build kernel-devel -y
tar zxf drbd-8.4.3.tar.gz
cd drbd-8.4.0
./configure --enable-spec --with-km
rpmbuild -bb drbd.spec????#編譯生成 drbd rpm 包
rpmbuild -bb drbd-km.spec #編譯 drbd 內(nèi)核模塊
error: File /root/rpmbuild/SOURCES/drbd-8.4.3.tar.gz: No such file or directory
cp drbd-8.4.0.tar.gz rpmbuild/SOURCES/
?
[root@server2 drbd-8.4.3]# cd ~/rpmbuild/RPMS/x86_64/
[root@server2 x86_64]# ls
drbd-8.4.3-2.el6.x86_64.rpm
drbd-bash-completion-8.4.3-2.el6.x86_64.rpm
drbd-debuginfo-8.4.3-2.el6.x86_64.rpm
drbd-heartbeat-8.4.3-2.el6.x86_64.rpm
drbd-km-2.6.32_431.el6.x86_64-8.4.3-2.el6.x86_64.rpm
drbd-km-debuginfo-8.4.3-2.el6.x86_64.rpm
drbd-pacemaker-8.4.3-2.el6.x86_64.rpm
drbd-udev-8.4.3-2.el6.x86_64.rpm
drbd-utils-8.4.3-2.el6.x86_64.rpm
drbd-xen-8.4.3-2.el6.x86_64.rpm
scp * server2:
yum install *
在兩臺(tái)機(jī)上準(zhǔn)備好相同大小的磁盤。名字不一定一樣
配置兩臺(tái)主機(jī)
resource wwwdata {
meta-disk internal;
device /dev/drbd1;
syncer {
verify-alg sha1;
}
on server2.example.com {
disk /dev/drbd_vg/drbd_lv;
address 172.25.12.2:7789;
}
on server3.example.com {
disk /dev/drbd_vg/drbd_lv;
address 172.25.12.3:7789;
}
}
拷貝到另一節(jié)點(diǎn)scp wwwdata.res server3:/etc/drbd.d/
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)部metadata:內(nèi)部metadata存放在同一塊硬盤或分區(qū)的最后的位置上
優(yōu)點(diǎn):metadata和數(shù)據(jù)是緊密聯(lián)系在一起的,如果硬盤損壞,metadata同樣就沒有了,同樣在恢復(fù)
的時(shí)候,metadata也會(huì)一起被恢復(fù)回來(lái)
缺點(diǎn): 如果底層設(shè)備是單一的磁盤,沒有做raid,也不是lvm等,那么可能會(huì)造成性能影響。metadata和數(shù)據(jù)在同一塊硬盤上,對(duì)于寫操作的吞吐量會(huì)帶來(lái)負(fù)面的影響,因?yàn)閼?yīng)用程序的寫請(qǐng)求會(huì)觸發(fā)metadata的更新,這樣寫操作就會(huì)造成兩次額外的磁頭讀寫移動(dòng)。
外部metadata:外部的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í)候就需要人工干預(yù)操作來(lái)進(jìn)行現(xiàn)有node新硬盤的同步了。
配置注意點(diǎn):meta-disk external;
meta-disk /dev/sdb2 [0];
?
在兩臺(tái)主機(jī)上分別執(zhí)行以下命令:
drbdadm create-md wwwdata
/etc/init.d/drbd start ????????#這里兩個(gè)同時(shí)起,不然單個(gè)節(jié)點(diǎn)會(huì)等代另一結(jié)點(diǎn)的反應(yīng)
開機(jī)不自啟動(dòng)。手動(dòng)起就好。
將 server3設(shè)置為 primary 節(jié)點(diǎn),并同步數(shù)據(jù):(在 server3 主機(jī)執(zhí)行以下命令)
drbdsetup /dev/drbd1 primary --force
或者drbdadm --overwrite-data-of-peer primary wwwdata
在兩臺(tái)主機(jī)上查看同步狀態(tài): watch cat /proc/drbd
[root@server3 drbd.d]# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@server2.example.com, 2015-03-13 17:17:17
?
1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:679604 nr:0 dw:0 dr:680600 al:0 bm:41 lo:0 pe:1 ua:1 ap:0 ep:1 wo:f oos:365500
????[============>.......] sync'ed: 65.1% (365500/1044412)K
????finish: 0:00:21 speed: 17,356 (17,408) K/sec
?
數(shù)據(jù)同步結(jié)束后創(chuàng)建文件系統(tǒng):mkfs.ext4 /dev/drbd1
掛載文件系統(tǒng):mount /dev/drbd1 /var/www/html
@轉(zhuǎn)換主從關(guān)系
drbdadm primary wwwdata
注意:兩臺(tái)主機(jī)上的/dev/drbd1 不能同時(shí)掛載,只有狀態(tài)為 primary 時(shí),才能被掛載使用,而此時(shí)另一方的狀態(tài)為 secondary.
?
腦裂:
split brain實(shí)際上是指在某種情況下,造成drbd的兩個(gè)節(jié)點(diǎn)斷開了連接,都以primary的身份來(lái)運(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ì)會(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ù)配置中的設(shè)置來(lái)進(jìn)行的
?
腦裂發(fā)生時(shí)處理:
- 從節(jié)點(diǎn):
明確自己是從節(jié)點(diǎn):drbdadm secondary data0
放手資源:drbdadm --discard-my-data connect data0
- 主節(jié)點(diǎn):
????連接資源:drbdadm connect data0
- 檢測(cè)狀態(tài):cat /proc/drbd
- 我在處理的過程中出現(xiàn)了個(gè)105的錯(cuò)誤,是地址被占,兩邊重啟就好了。
?
節(jié)點(diǎn)宕機(jī):
- secondary節(jié)點(diǎn)
primary將臨時(shí)性的與secondary斷開連接,cs狀態(tài)應(yīng)該會(huì)變成WFConnection, 也就是等待連接的狀態(tài)。這時(shí)候primary會(huì)繼續(xù)對(duì)外提供服務(wù),并在meta-data里面記錄下從失去secondary連接后所有變化過的 block的信息。當(dāng)secondary重新啟動(dòng)并連接上primary后,primary –> secondary的re-synchnorisation會(huì)自動(dòng)開始。不過在re-synchnorisation過程中,primary和 secondary的數(shù)據(jù)是不一致狀態(tài)的。也就是說(shuō),如果這個(gè)時(shí)候primary節(jié)點(diǎn)也crash了的話,secondary是沒辦法切換成 primary的。也就是說(shuō),如果沒有其他備份的話,將丟失所有數(shù)據(jù) - primary節(jié)點(diǎn)
一般情況下,primary的crash和secondary的crash所帶來(lái)的影響對(duì)drbd來(lái)說(shuō)基本上是差不多的。唯一的區(qū)別就是需要多操作一步將 secondary節(jié)點(diǎn)switch成primary節(jié)點(diǎn)先對(duì)外提供服務(wù)。這個(gè)switch的過程drbd自己是不會(huì)完成的,需要我們?nèi)藶楦深A(yù)進(jìn)行一些操作才能完成。當(dāng)crash的原primary節(jié)點(diǎn)修復(fù)并重新啟動(dòng)連接到現(xiàn)在的primary后,會(huì)以secondary存在,并開始re-synchnorisation這段時(shí)間變化的數(shù)據(jù)
?
磁盤處理:
- 如果在resource的disk配置項(xiàng)中配置了on_io_error為pass_on的話,那么drbd在遇到磁盤損壞后不會(huì)自己detach底層設(shè)備。也就是說(shuō)需要我們手動(dòng)執(zhí)行detach的命令(drbdadm detach resource_name),然后再查看當(dāng)前各節(jié)點(diǎn)的ds信息??梢酝ㄟ^cat /proc/drbd來(lái)查看,也可以通過專有命令來(lái)查看:drbdadm dstat resource_name。當(dāng)發(fā)現(xiàn)損壞的那方已經(jīng)是Diskless后,即可。如果我們沒有配置on_io_error或者配置成detach的話,那 么上面的操作將會(huì)由自動(dòng)進(jìn)行。
另外,如果磁盤損壞的節(jié)點(diǎn)是當(dāng)前主節(jié)點(diǎn),那么我們需要進(jìn)行節(jié)點(diǎn)切換的操作后再進(jìn)行上面的操作 - 2、更換磁盤
當(dāng)detach了resource之后,就是更換磁盤了。如果我們使用的是internal的meta-data,那么在換好磁盤后,只需要重新創(chuàng)建 mata-data (drbdadm create-md resource_name),再將resource attach上 (drbdadm attach resource_name),然后drbd就會(huì)馬上開始從當(dāng)前primary節(jié)點(diǎn)到本節(jié)點(diǎn)的re-synchronisation。數(shù)據(jù)同步的實(shí)時(shí)狀況 可以通過 /proc/drbd文件的內(nèi)容獲得
不過,如果我們使用的不是internal的meta-data保存方式,也就是說(shuō)我們的meta-data是保存在resource之外的地方的。那么 我們?cè)谕瓿缮厦娴牟僮?#xff08;重建meta-data)之后,還需要進(jìn)行一項(xiàng)操作來(lái)觸發(fā)re-synchnorisation,所需命令為:drbdadm invalidate resource_name我這里模擬測(cè)試下,一切正常的:
把從節(jié)點(diǎn)的磁盤,先分離后。
破壞了原來(lái)的數(shù)據(jù)dd if=/dev/zero of=/dev/sdb1 bs=1M count=300
drbdadm create-md data1
drbdadm invalidate data1
drbdadm attach data1
cat /proc/drbd
?
- 另為drbd也可以用來(lái)遷移大量的 數(shù)據(jù),但必須用作 external的方式保存元數(shù)據(jù)。
在實(shí)驗(yàn)環(huán)境中server2.example.com 中有原來(lái)的數(shù)據(jù),需要遷移到server1.example.com。
在兩邊正常配置就行,但是drbd裸設(shè)備不能格式化。不然數(shù)據(jù)就丟了。
drbdadm create-md data1
1044 dd if=/dev/zero of=/dev/sdb1 bs=1M count=10
1045 drbdadm create-md data1
1046 /etc/init.d/drbd start
1047 cat /proc/drbd
1051 drbdsetup /dev/drbd2 primary –force
注意點(diǎn):當(dāng)兩邊的磁盤不一樣大時(shí),通常遷移到新盤的大一些。Drbd會(huì)大的磁盤縮小至對(duì)端小磁盤一樣大。當(dāng)數(shù)據(jù)同步完成之后。就可以恢復(fù)回來(lái)。
/etc/init.d/drbd stop
e2fsck -f /dev/vg0/lv0
resize2fs /dev/vg0/lv0
- 資源管理
1) 增加resource的大小
當(dāng)遇到我們的drbd resource設(shè)備容量不夠的時(shí)候,而且我們的底層設(shè)備支持在線增大容量的時(shí)候(比如lvm),我們可以先增大底層設(shè)備的大小,然后再通過drbdadm resize resource_name來(lái)實(shí)現(xiàn)對(duì)resource的擴(kuò)容。但是這里有一點(diǎn)需要注意的就是只有在單primary模式下可以這樣做,而且需要先在兩節(jié)點(diǎn)上都增大底層設(shè)備的容量。然后僅在primary節(jié)點(diǎn)上執(zhí)行resize命令。在執(zhí)行了resize命令后,將觸發(fā)一次當(dāng)前primary節(jié)點(diǎn)到其他所有secondary節(jié)點(diǎn)的re-synchronization
如果我們?cè)赿rbd非工作狀態(tài)下對(duì)底層設(shè)備進(jìn)行了擴(kuò)容,然后再啟動(dòng)drbd,將不需要執(zhí)行resize命令(當(dāng)然前提是在配置文件中沒有對(duì)disk參數(shù)項(xiàng)指定大小),drbd自己會(huì)知道已經(jīng)增大了容量
在進(jìn)行底層設(shè)備的增容操作的時(shí)候千萬(wàn)不要修改到原設(shè)備上面的數(shù)據(jù),尤其是drbd的meta信息,否則有可能毀掉所有數(shù)據(jù)2) 收縮resource容量,我覺得用的比較少。這里我并沒有測(cè)試,因?yàn)槲乙婚_始就把/dev/drbd2格成ext4了,沒法在線縮容量。
容量收縮比擴(kuò)容操作要危險(xiǎn)得多,因?yàn)樵摬僮鞲菀自斐蓴?shù)據(jù)丟失。在收縮resource的容量之前,必須先收縮drbd設(shè)備之上的容量,也就是文件系統(tǒng)的大小。如果上層文件系統(tǒng)不支持收縮,那么resource也沒辦法收縮容量。
如果在配置drbd的時(shí)候?qū)eta信息配置成internal的,那么在進(jìn)行容量收縮的時(shí)候,千萬(wàn)別只計(jì)算自身數(shù)據(jù)所需要的空間大小,還要將drbd的meta信息所需要的空間大小加上。
當(dāng)文件系統(tǒng)收縮好以后,就可以在線通過以下命令來(lái)重設(shè)resource的大小: drbdadm –size=***G resize resource_name。在收縮的resource的大小之后,你就可以自行收縮釋放底層設(shè)備空間(如果支持的話)
如果打算停機(jī)狀態(tài)下收縮容量,可以通過以下步驟進(jìn)行:沒試過,備用
(1)在線收縮文件系統(tǒng)
(2)停用drbd的resource:drbdadm down resourcec_name
(3)導(dǎo)出drbd的metadata信息(在所有節(jié)點(diǎn)都需要進(jìn)行):drbdadm dump-md resource_name > /path_you_want_to_save/file_name
(4)在所有節(jié)點(diǎn)收縮底層設(shè)備
(5)更改上面dump出來(lái)的meta信息的la-size-sect項(xiàng)到收縮后的大小(是換算成sector的數(shù)量后的數(shù)值)
(6)如果使用的是internal來(lái)配置meta-data信息,則需要重新創(chuàng)建meta-data:drbdadm create-md resource_name
(7)將之前導(dǎo)出并修改好的meta信息重新導(dǎo)入drbd(摘錄自linbit官方網(wǎng)站的一段導(dǎo)入代碼): drbdmeta_cmd=$(drbdadm -d dump-md test-disk)
${drbdmeta_cmd/dump-md/restore-md} /path_you_want_to_save/file_name
(8)啟動(dòng)resource:drbdadm up resource_name?
Heartbeat和drbd結(jié)合:
結(jié)合之前配置的heartbeat就行:
但是drbd必須要建立起來(lái),才能HA切換
server2.example.com IPaddr::192.168.88.200/24/eth0 drbddisk::data0 Filesystem::/dev/drbd1::/data::ext4
一行命令搞定,注意順序不能錯(cuò):
data0????資源名稱。
/dev/drbd1 裸設(shè)備
/data 掛載點(diǎn)
ext4 文件系統(tǒng)類型
?
?
?
?
?
????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????淺淡
????????????????????????????????????????????????????1138122262@qq.com
轉(zhuǎn)載于:https://www.cnblogs.com/wxl-dede/p/5114696.html
總結(jié)
- 上一篇: IDEA 连接 GIT OSCHINA
- 下一篇: MySQL常用简单小命令