1. 程式人生 > 其它 >一次DRBD腦裂行為的模擬

一次DRBD腦裂行為的模擬

drbd1為主,drbd2為輔;我個人覺得這個DRBD腦裂的行為,也應該是前期人為或是故障切換造成的,
如HA。上次跟一朋友去一客戶那裡,他那就是屬於使用HA做故障切換,最後不知道他們咋搞,在一臺
機上把DRBD的服務給掛了,因為該伺服器非常重要,他們對HA及DRBD架構不太熟,在一次HA切換測
試過程中出現了問題,在此模擬一下這個問題吧。

1、斷開primary
down機或是斷開網線
2、檢視secondary機器的狀態
[root@drbd2~]#drbdadmrolefs
Secondary/Unknown

[root@drbd2~]#cat/proc/drbd
version:8.3.11(api:88/proto:86-96)
GIT-hash:0de839cee13a4160eed6037c4bddd066645e23c5buildbyroot@drbd2.localdomain,2011-07-0811:10:20
#注意下drbd2的cs狀態
1:cs:WFConnectionro:Secondary/Unknownds:UpToDate/DUnknownCr-----
ns:567256nr:20435468dw:21002724dr:169al:229bm:1248lo:0pe:0ua:0ap:0ep:1wo:boos:0

將secondary配置成primary角色
[root@drbd2~]#drbdadmprimaryfs
[root@drbd2~]#drbdadmrolefs
Primary/Unknown
[root@drbd2~]#cat/proc/drbd
version:8.3.11(api:88/proto:86-96)
GIT-hash:0de839cee13a4160eed6037c4bddd066645e23c5buildbyroot@drbd2.localdomain,2011-07-0811:10:20

1:cs:WFConnectionro:Primary/Unknownds:UpToDate/DUnknownCr-----
ns:567256nr:20435468dw:21002724dr:169al:229bm:1248lo:0pe:0ua:0ap:0ep:1wo:boos:0
#掛載
[root@drbd2~]#mount/dev/drbd1/mnt/
[root@drbd2~]#cd/mnt/
[root@drbd2mnt]#ll
total102524
-rw-r--r--1rootroot104857600Jul812:35100M
drwx------2rootroot16384Jul812:33lost+found

#原來的primary機器好了,出現腦裂了。
[root@drbd1~]#tail-f/var/log/messages
Jul813:14:01localhostkernel:blockdrbd1:helpercommand:/sbin/drbdadminitial-split-brainminor-1exitcode0(0x0)
Jul813:14:01localhostkernel:blockdrbd1:Split-Braindetectedbutunresolved,droppingconnection!
Jul813:14:01localhostkernel:blockdrbd1:helpercommand:/sbin/drbdadmsplit-brainminor-1
Jul813:14:01localhostkernel:blockdrbd1:helpercommand:/sbin/drbdadmsplit-brainminor-1exitcode0(0x0)
Jul813:14:01localhostkernel:blockdrbd1:conn(NetworkFailure->Disconnecting)
Jul813:14:01localhostkernel:blockdrbd1:errorreceivingReportState,l:4!
Jul813:14:01localhostkernel:blockdrbd1:Connectionclosed
Jul813:14:01localhostkernel:blockdrbd1:conn(Disconnecting->StandAlone)
Jul813:14:01localhostkernel:blockdrbd1:receiverterminated
Jul813:14:01localhostkernel:blockdrbd1:Terminatingreceiverthread

[root@drbd1~]#drbdadmrolefs
Primary/Unknown

[root@drbd2mnt]#drbdadmrolefs
Primary/Unknown

#drbd1現在是standalone,這個時候,主跟輔是不會相互聯絡的。
[root@drbd1~]#cat/proc/drbd
version:8.3.11(api:88/proto:86-96)
GIT-hash:0de839cee13a4160eed6037c4bddd066645e23c5buildbyroot@drbd1.localdomain,2011-07-0811:10:38

1:cs:StandAlonero:Primary/Unknownds:UpToDate/DUnknownr-----
ns:20405516nr:567256dw:567376dr:20405706al:2bm:1246lo:0pe:0ua:0ap:0ep:1wo:boos:0

[root@drbd1/]#servicedrbdstatus
drbddriverloadedOK;devicestatus:
version:8.3.11(api:88/proto:86-96)
GIT-hash:0de839cee13a4160eed6037c4bddd066645e23c5buildbyroot@drbd1.localdomain,2011-07-0811:10:38
m:rescsrodspmountedfstype
1:fsStandAlonePrimary/UnknownUpToDate/DUnknownr-----ext3

這個時候,如果使用者有嘗試把drbd2的drbd服務重啟的話,你就會發現根本無法起來!
[root@drbd2/]#servicedrbdstart
StartingDRBDresources:[]..........
***************************************************************
DRBD'sstartupscriptwaitsforthepeernode(s)toappear.
-Incasethisnodewasalreadyadegradedclusterbeforethe
rebootthetimeoutis120seconds.[degr-wfc-timeout]
-Ifthepeerwasavailablebeforetherebootthetimeoutwill
expireafter0seconds.[wfc-timeout]
(Thesevaluesareforresource'fs';0sec->waitforever)
Toabortwaitingenter'yes'[--]:[13]:[15]:[16]:[18]:[19]:[20]:[22]:

在drbd2處理方法:
[root@drbd2/]#drbdadmdisconnectfs
[root@drbd2/]#drbdadmsecondaryfs
[root@drbd2/]#drbdadm----discard-my-datafs
做完以上三步,你發現你仍然無法啟動drbd2上的drbd服務;上次一客戶我個人估計就是這個問題,把DRBD重啟後,無法啟動DRBD。
把他們DBA急的要死。呵呵


需要在drbd1上重連線資源:
[root@drbd1~]#drbdadmconnectfs

再次啟動drbd2上的drbd服務,成了。
[root@drbd2/]#servicedrbdstart
StartingDRBDresources:[].

再看看資源同步:
[root@drbd2/]#cat/proc/drbd
version:8.3.11(api:88/proto:86-96)
GIT-hash:0de839cee13a4160eed6037c4bddd066645e23c5buildbyroot@drbd2.localdomain,2011-07-0811:10:20

1:cs:SyncTargetro:Secondary/Primaryds:Inconsistent/UpToDateCr-----
ns:0nr:185532dw:185532dr:0al:0bm:15lo:0pe:0ua:0ap:0ep:1wo:boos:299000
[======>.............]sync'ed:39.5%(299000/484532)K
finish:0:00:28speed:10,304(10,304)want:10,240K/sec
大夥來拍磚吧!

補充:雖然是手工模擬但在故障切換時也會出一樣的問題。
1、DRBD的資源只能在或主或輔的一臺機器上掛載。
2、在做主輔的手工切換時的步驟:
a、先將原來掛載的東西進行解除安裝,這個時候你的應用會停,不建議手工切換主輔
b、將原來的主設定成輔 #drbdadm secondary resource_name
c、將原來的輔設定成主 #drbdadm primary resource_name
d、掛載資源
-----------------------------------
©著作權歸作者所有:來自51CTO部落格作者Bnsen的原創作品,如需轉載,請註明出處,否則將追究法律責任
一次DRBD腦裂行為的模擬
https://blog.51cto.com/myhat/606318