一種drbd腦裂的處理方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種DRBD腦裂的處理方法及裝置,所述方法包括:每隔一段時(shí)間檢測(cè)主機(jī)Ping網(wǎng)關(guān)或第三方IP是否成功,并查詢上次檢測(cè)結(jié)果;當(dāng)本次檢測(cè)成功,且上次檢測(cè)結(jié)果也成功時(shí),則檢測(cè)遠(yuǎn)程主機(jī)的DRBD是否為Primary/Secondary或者Secondary/Primary狀態(tài);當(dāng)遠(yuǎn)程主機(jī)的DRBD不是該狀態(tài)時(shí),檢測(cè)遠(yuǎn)程主機(jī)的DRBD是否為Secondary/Unknown狀態(tài);當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為該狀態(tài)時(shí),則進(jìn)行正常DRBD切換。本發(fā)明通過添加監(jiān)控、測(cè)試和自動(dòng)切換等操作來解決網(wǎng)絡(luò)環(huán)境變化造成的腦裂問題,降低了腦裂發(fā)生的可能性,使高可用解決方案性能更加穩(wěn)定、可靠。
【專利說明】一種DRBD腦裂的處理方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)應(yīng)用領(lǐng)域,具體涉及高可靠性解決方案領(lǐng)域,尤其涉及一種DRBD腦裂的處理方法及裝置。
【背景技術(shù)】
[0002]現(xiàn)有的Linux環(huán)境下Mysql的高可靠性方案通常為Heartbeat+DRBD。Heartbeat通過冗余通信通道和消息重傳機(jī)制來保證通信的可靠性。Heartbeat檢測(cè)主通信鏈路工作狀態(tài)的同時(shí)也檢測(cè)備用通信鏈路狀態(tài),并把這一狀態(tài)報(bào)告給系統(tǒng)管理員,這樣可以大大減少因?yàn)槎嘀厥б鸬募汗收喜荒芑謴?fù)。例如,某個(gè)工作人員不小心撥下了一個(gè)備份通信鏈路,一兩個(gè)月以后主通信鏈路也失效了,系統(tǒng)就不能再進(jìn)行通信了。通過報(bào)告?zhèn)浞萃ㄐ沛溌返墓ぷ鳡顟B(tài)和主通信鏈路的狀態(tài),可以完全避免這種情況。因?yàn)檫@樣在主通信鏈路失效以前,就可以檢測(cè)到備份工作鏈路失效,從而在主通信鏈路失效前修復(fù)備份通信鏈路。DRBD(Distributed R印licated Block Device)是一個(gè)用軟件實(shí)現(xiàn)的、無共享的、服務(wù)器之間鏡像塊設(shè)備內(nèi)容的存儲(chǔ)復(fù)制解決方案。數(shù)據(jù)鏡像:實(shí)時(shí)、透明、同步(所有服務(wù)器都成功后返回)、異步(本地服務(wù)器成功后返回)。
[0003]但是二者都存在“腦裂”問題,即兩個(gè)節(jié)點(diǎn)都以為本機(jī)是主節(jié)點(diǎn)從而發(fā)生搶奪資源的情況。目前的解決方案包括添加第三方“仲裁”來加強(qiáng),即在向?qū)Ψ街鳈C(jī)執(zhí)行Ping命令失敗后再對(duì)默認(rèn)網(wǎng)關(guān)做一次Ping。但是這種方法也存在一定的缺陷,當(dāng)網(wǎng)絡(luò)斷開后(如短暫的拔掉網(wǎng)線)又在很短的時(shí)間內(nèi)恢復(fù)了之后,腦裂還是會(huì)不可避免的發(fā)生。
【發(fā)明內(nèi)容】
[0004]有鑒于此,本發(fā)明實(shí)施例提供一種DRBD腦裂的處理方法及裝置,來解決以上【背景技術(shù)】部分提到的技術(shù)問題。
[0005]第一方面,本發(fā)明實(shí)施例提供了一種DRBD腦裂的處理方法,所述方法包括:
[0006]每隔一段時(shí)間檢測(cè)主機(jī)Ping網(wǎng)關(guān)或者第三方IP是否成功,并查詢上次網(wǎng)關(guān)檢測(cè)結(jié)果;當(dāng)本次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)為成功,且上次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)結(jié)果為成功時(shí),則檢測(cè)遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Primary/Secondary或者Secondary/Primary 狀態(tài);
[0007]當(dāng)遠(yuǎn)程主機(jī)的DRBD 狀態(tài)不是 Primary/Secondary 或者 Secondary/Primary 狀態(tài)時(shí),檢測(cè)遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Secondary/Unknown狀態(tài);
[0008]當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Secondary/Unknown狀態(tài)時(shí),則進(jìn)行正常DRBD切換,然后在遠(yuǎn)程主機(jī)上執(zhí)行DRBD連接操作。
[0009]進(jìn)一步地,所述方法還包括:當(dāng)本次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)為失敗,且上次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)結(jié)果為成功時(shí),則停止服務(wù),包括Heartbeat、Mysql、DRBD。
[0010]進(jìn)一步地,所述方法還包括:當(dāng)本次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)為成功,且上次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)結(jié)果為失敗時(shí),則啟動(dòng)DRBD和Heartbeat服務(wù)。[0011 ] 進(jìn)一步地,所述檢測(cè)遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Primary/Secondary或者Secondary/Primary狀態(tài)還包括:當(dāng)首次檢測(cè)到遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Primary/Secondary或者Secondary/Primary狀態(tài)時(shí),進(jìn)入休眠狀態(tài);休眠預(yù)設(shè)時(shí)間后再次檢測(cè)遠(yuǎn)程主機(jī)的 DRBD 狀態(tài)是否為 Primary/Secondary 或者 Secondary/Primary 狀態(tài)。
[0012]進(jìn)一步地,所述當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)為Secondary/Unknown狀態(tài)時(shí),則進(jìn)行正常DRBD切換包括:當(dāng)遠(yuǎn)程主機(jī)的DRBD不為Secondary/Unknown狀態(tài)時(shí),且本地主機(jī)為Secondary/Unknown 狀態(tài),需進(jìn)行 DRBD 切換。
[0013]進(jìn)一步地,上次Ping網(wǎng)關(guān)或者第三方IP成功或者失敗的標(biāo)識(shí),可以持久化到文件,或者設(shè)置為進(jìn)程內(nèi)變量值。
[0014]第二方面,本發(fā)明實(shí)施例還提供了一種DRBD腦裂的處理裝置,所述裝置包括:
[0015]Ping網(wǎng)關(guān)或者第三方IP檢測(cè)模塊,用于每隔一段時(shí)間檢測(cè)主機(jī)Ping網(wǎng)關(guān)或者第三方IP是否成功,并查詢上次網(wǎng)關(guān)檢測(cè)結(jié)果;
[0016]DRBD P/S狀態(tài)檢測(cè)模塊,用于當(dāng)本次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)為成功,且上次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)結(jié)果為成功時(shí),則檢測(cè)遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Primary/Secondary 或者 Secondary/Primary 狀態(tài);
[0017]DRBD S/U狀態(tài)檢測(cè)模快,用于當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不是Primary/Secondary或者Secondary/Primary狀態(tài)時(shí),檢測(cè)遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Secondary/Unknown狀態(tài);
[0018]DRBD切換模塊,用于當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Secondary/Unknown狀態(tài)時(shí),則進(jìn)行正常DRBD切換。
[0019]進(jìn)一步地,所述裝置還包括:服務(wù)停止模塊,用于當(dāng)本次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)為失敗,且上次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)結(jié)果為成功時(shí),則停止服務(wù),包括Heartbeat> Mysql>DRBD。
[0020]進(jìn)一步地,所述裝置還包括:服務(wù)啟動(dòng)模塊,用于當(dāng)本次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)為成功,且上次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)結(jié)果為失敗時(shí),則啟動(dòng)DRBD和Heartbeat服務(wù)。
[0021]進(jìn)一步地,所述DRBD P/S狀態(tài)檢測(cè)模塊包括:休眠單元,用于當(dāng)首次檢測(cè)到遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Primary/Secondary或者Secondary/Primary狀態(tài)時(shí),進(jìn)入休眠狀態(tài);DRBD P/S狀態(tài)檢測(cè)單元,用于檢測(cè)遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Primary/Secondary或者 Secondary/Primary 狀態(tài)。
[0022]進(jìn)一步地,所述DRBD切換模塊包括:本地主機(jī)DRBD狀態(tài)檢測(cè)單元,用于當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Secondary/Unknown狀態(tài)時(shí),則檢測(cè)本地主機(jī)的DRBD狀態(tài)是否為Secondary狀態(tài);DRBD切換單元,用于當(dāng)本地主機(jī)為Secondary狀態(tài)時(shí),則進(jìn)行正常DRBD切換。
[0023]進(jìn)一步地,上次Ping網(wǎng)關(guān)或者第三方IP成功或者失敗的標(biāo)識(shí),可以持久化到文件,或者設(shè)置為進(jìn)程內(nèi)變量值。
[0024]本發(fā)明通過檢測(cè)Ping網(wǎng)關(guān)或者第三方IP是否成功以及遠(yuǎn)程主機(jī)的DRBD狀態(tài),在不直接修改Heartbeat和DRBD等開源軟件源碼的情況下,添加監(jiān)控、測(cè)試和自動(dòng)切換等操作來解決由于網(wǎng)絡(luò)環(huán)境變化造成的腦裂問題,很大程度的降低了腦裂發(fā)生的可能性,使Heartbeat+DRBD的高可用解決方案性能更加穩(wěn)定、可靠。
【專利附圖】
【附圖說明】
[0025]圖1是本發(fā)明第一實(shí)施例中的集群腦裂的處理方法的流程圖。
[0026]圖2是本發(fā)明第二實(shí)施例中的集群腦裂的處理方法的流程圖。
[0027]圖3是本發(fā)明第三實(shí)施例中的集群腦裂的處理裝置的結(jié)構(gòu)圖。
[0028]圖4是本發(fā)明第四實(shí)施例中的集群腦裂的處理裝置的結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0029]下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明??梢岳斫獾氖?,此處所描述的具體實(shí)施例僅僅用于解釋本發(fā)明,而非對(duì)本發(fā)明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關(guān)的部分而非全部結(jié)構(gòu)。
[0030]在圖1中示出了本發(fā)明的第一實(shí)施例。
[0031]圖1是本發(fā)明第一實(shí)施例中的集群腦裂的處理方法的流程圖,該實(shí)現(xiàn)流程100詳述如下:
[0032]步驟101、每隔一段時(shí)間檢測(cè)主機(jī)Ping網(wǎng)關(guān)或者第三方IP是否成功,并查詢上次網(wǎng)關(guān)檢測(cè)結(jié)果。
[0033]在本實(shí)施例中,Ping不僅僅是Windows下的命令,在Unix和Linux下也有這個(gè)命令,Ping只是一個(gè)通信協(xié)議,是IP協(xié)議的一部分,TCP/IP協(xié)議的一部分,Ping在Windows系統(tǒng)下是自帶的一個(gè)可執(zhí)行命令,利用它可以檢查網(wǎng)絡(luò)是否能夠連通,用好它可以很好地幫助我們分析判定網(wǎng)絡(luò)故障。
[0034]步驟102、當(dāng)本次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)為成功,且上次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)結(jié)果為成功時(shí),則檢測(cè)遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Primary/Secondary狀態(tài)或者 Secondary/Primary 狀態(tài)。
[0035]在本實(shí)施例中,DRBD是一種塊設(shè)備,可以被用于高可用(HA)之中。當(dāng)你將數(shù)據(jù)寫入本地文件系統(tǒng)時(shí),數(shù)據(jù)還將會(huì)被發(fā)送到網(wǎng)絡(luò)中另一臺(tái)主機(jī)上,以相同的形式記錄在一個(gè)文件系統(tǒng)中。本地(主節(jié)點(diǎn))與遠(yuǎn)程主機(jī)(備節(jié)點(diǎn))的數(shù)據(jù)可以保證實(shí)時(shí)同步。當(dāng)本地系統(tǒng)出現(xiàn)故障時(shí),遠(yuǎn)程主機(jī)上還會(huì)保留有一份相同的數(shù)據(jù)可以繼續(xù)使用。在高可用(HA)中使用DRBD功能可以代替使用一個(gè)共享盤陣。因?yàn)閿?shù)據(jù)同時(shí)存在于本地主機(jī)和遠(yuǎn)程主機(jī)上,切換時(shí)遠(yuǎn)程主機(jī)只要使用它上面的那份備份數(shù)據(jù)就可以繼續(xù)進(jìn)行服務(wù)了。本地(主節(jié)點(diǎn))與遠(yuǎn)程主機(jī)(備節(jié)點(diǎn))兩個(gè)節(jié)點(diǎn)中,同一時(shí)刻只能有一臺(tái)處于Primary狀態(tài),另一臺(tái)處于Secondary 狀態(tài)。
[0036]步驟103、當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不是Primary/Secondary狀態(tài)或者Secondary/Primary狀態(tài)時(shí),檢測(cè)遠(yuǎn)程主機(jī)的DRBD是否為Secondary/Unknown狀態(tài)。
[0037]步驟103又包括以下步驟:
[0038]步驟1031、當(dāng)首次檢測(cè)到遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Primary/Secondary狀態(tài)或者Secondary/Primary狀態(tài)時(shí),進(jìn)入休眠狀態(tài)。
[0039]在本實(shí)施例中,當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不是Primary/Secondary或者Secondary/Primary狀態(tài),即代表DRBD可能會(huì)出現(xiàn)腦裂問題,休眠一段時(shí)間,保證本監(jiān)控程序不會(huì)影響到DRBD的正常功能,再次進(jìn)行遠(yuǎn)程主機(jī)的DRBD狀態(tài)檢測(cè)。
[0040]步驟1032、休眠預(yù)設(shè)時(shí)間后再次檢測(cè)遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Primary/Secondary 狀態(tài)或者 Secondary/Primary 狀態(tài)。
[0041]在本實(shí)施例中,所述預(yù)設(shè)時(shí)間可以為30s,在首次檢測(cè)完遠(yuǎn)程主機(jī)的DBRB狀態(tài)不是Primary/Secondary狀態(tài)或者Secondary/Primary狀態(tài)時(shí),再隔30s再次檢測(cè),進(jìn)一步地確定遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Secondary/Unknown狀態(tài),,如果是,則進(jìn)程睡眠一段時(shí)間后,重新執(zhí)行步驟101 ;否則執(zhí)行步驟104。由于設(shè)置的預(yù)設(shè)時(shí)間較Heartbeat周期長(zhǎng),如果一個(gè)Heartbeat周期過去了,遠(yuǎn)程主機(jī)狀態(tài)仍然不為Primary/Secondary狀態(tài),才對(duì)其進(jìn)行DBRD切換操作。
[0042]步驟104、當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Secondary/Unknown狀態(tài)時(shí),則進(jìn)行正常DRBD切換。
[0043]步驟104包括以下步驟:
[0044]步驟1041、當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Secondary/Unknown狀態(tài)時(shí),則本地主機(jī)的DRBD狀態(tài)為Secondary狀態(tài)。
[0045]步驟1042、當(dāng)本地主機(jī)為Secondary狀態(tài)時(shí),則進(jìn)行正常DRBD切換,然后在遠(yuǎn)程主機(jī)上進(jìn)行DRBD連接。
[0046]在本實(shí)施例中,當(dāng)本地主機(jī)為Secondary狀態(tài)即為備節(jié)點(diǎn)時(shí),我們進(jìn)行正常的DBRD切換,使本地主機(jī)為Primary節(jié)點(diǎn)(主節(jié)點(diǎn)),遠(yuǎn)程主機(jī)為Secondary節(jié)點(diǎn)(備節(jié)點(diǎn))。
[0047]本發(fā)明第一實(shí)施例通過檢測(cè)Ping網(wǎng)關(guān)或者第三方IP是否成功以及遠(yuǎn)程主機(jī)的DRBD狀態(tài),在不直接修改Heartbeat和DRBD等開源軟件源碼的情況下,添加監(jiān)控、測(cè)試和自動(dòng)切換等操作來解決由于網(wǎng)絡(luò)環(huán)境變化造成的腦裂問題,很大程度的降低了腦裂發(fā)生的可能性。
[0048]在圖2中示出了本發(fā)明的第二實(shí)施例。
[0049]圖2是本發(fā)明第二實(shí)施例中的集群腦裂的處理方法的流程圖。該實(shí)現(xiàn)流程200詳述如下:
[0050]步驟201、每隔一段時(shí)間檢測(cè)主機(jī)Ping網(wǎng)關(guān)或者第三方IP是否成功,并查詢上次網(wǎng)關(guān)檢測(cè)結(jié)果。
[0051]在本實(shí)施例中,Ping不僅僅是Windows下的命令,在Unix和Linux下也有這個(gè)命令,Ping只是一個(gè)通信協(xié)議,是IP協(xié)議的一部分,TCP/IP協(xié)議的一部分,Ping在Windows系統(tǒng)下是自帶的一個(gè)可執(zhí)行命令,利用它可以檢查網(wǎng)絡(luò)是否能夠連通,用好它可以很好地幫助我們分析判定網(wǎng)絡(luò)故障。上次Ping網(wǎng)關(guān)或者第三方IP成功或者失敗的標(biāo)識(shí),可以持久化到文件,或者設(shè)置為進(jìn)程內(nèi)變量值。
[0052]步驟202、當(dāng)本次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)為失敗,而上次檢測(cè)為失敗時(shí),在睡眠一段時(shí)間,再次進(jìn)行檢測(cè)。
[0053]步驟203、當(dāng)本次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)為成功,而上次檢測(cè)也為成功時(shí),則進(jìn)行步驟204。
[0054]步驟204、檢測(cè)遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Primary/Secondary或者Secondary/Primary 狀態(tài)。
[0055]在本實(shí)施例中,DRBD是一種塊設(shè)備,可以被用于高可用(HA)之中。當(dāng)你將數(shù)據(jù)寫入本地文件系統(tǒng)時(shí),數(shù)據(jù)還將會(huì)被發(fā)送到網(wǎng)絡(luò)中另一臺(tái)主機(jī)上,以相同的形式記錄在一個(gè)文件系統(tǒng)中。本地(主節(jié)點(diǎn))與遠(yuǎn)程主機(jī)(備節(jié)點(diǎn))的數(shù)據(jù)可以保證實(shí)時(shí)同步。當(dāng)本地系統(tǒng)出現(xiàn)故障時(shí),遠(yuǎn)程主機(jī)上還會(huì)保留有一份相同的數(shù)據(jù)可以繼續(xù)使用。在高可用(HA)中使用DRBD功能可以代替使用一個(gè)共享盤陣。因?yàn)閿?shù)據(jù)同時(shí)存在于本地主機(jī)和遠(yuǎn)程主機(jī)上,切換時(shí)遠(yuǎn)程主機(jī)只要使用它上面的那份備份數(shù)據(jù)就可以繼續(xù)進(jìn)行服務(wù)了。本地(主節(jié)點(diǎn))與遠(yuǎn)程主機(jī)(備節(jié)點(diǎn))兩個(gè)節(jié)點(diǎn)中,同一時(shí)刻只能有一臺(tái)處于Primary狀態(tài),另一臺(tái)處于Secondary 狀態(tài)。
[0056]步驟205、當(dāng)遠(yuǎn)程主機(jī)的 DRBD 狀態(tài)是 Primary/Secondary 或者 Secondary/Primary狀態(tài)時(shí),則進(jìn)程睡眠一段時(shí)間,重新執(zhí)行步驟201。
[0057]步驟206、當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不是Primary/Secondary或者Secondary/Primary狀態(tài)時(shí),檢測(cè)遠(yuǎn)程主機(jī)的DRBD是否為Secondary/Unknown狀態(tài)。
[0058]步驟206又包括以下步驟:
[0059]步驟2061、當(dāng)首次檢測(cè)到遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Primary/Secondary或者Secondary/Primary狀態(tài)時(shí),進(jìn)入休眠狀態(tài)。
[0060]在本實(shí)施例中,當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不是Primary/Secondary或者Secondary/Primary狀態(tài),即代表DRBD可能會(huì)出現(xiàn)腦裂問題,休眠一段時(shí)間,保證本監(jiān)控程序不會(huì)影響到DRBD的正常功能,再次進(jìn)行遠(yuǎn)程主機(jī)的DRBD狀態(tài)檢測(cè)。
[0061 ] 步驟2062、休眠預(yù)設(shè)時(shí)間后再次檢測(cè)遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Primary/Secondary 或者 Secondary/Primary 狀態(tài)。
[0062]在本實(shí)施例中,所述預(yù)設(shè)時(shí)間可以為30s,在首次檢測(cè)完遠(yuǎn)程主機(jī)的DBRB狀態(tài)不是Primary/Secondary或者Secondary/Primary狀態(tài)時(shí),再隔30s再次檢測(cè),進(jìn)一步地確定遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Secondary/Unknown狀態(tài),如果是,則進(jìn)程睡眠一段時(shí)間后,重新執(zhí)行步驟201 ;否則執(zhí)行步驟207。由于設(shè)置的預(yù)設(shè)時(shí)間較Heartbeat周期長(zhǎng),如果一個(gè)Heartbeat周期過去了,遠(yuǎn)程主機(jī)狀態(tài)仍然不為Primary/Secondary狀態(tài),才對(duì)其進(jìn)行DBRD切換操作。
[0063]步驟207、當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Secondary/Unknown狀態(tài)時(shí),則進(jìn)行正常DRBD切換。
[0064]步驟207包括以下步驟:
[0065]步驟2071、當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Secondary/Unknown狀態(tài)時(shí),則本地主機(jī)的 DRBD 為 Secondary 狀態(tài)。
[0066]步驟2072、當(dāng)本地主機(jī)為Secondary狀態(tài)時(shí),則進(jìn)行正常DRBD切換。
[0067]在本實(shí)施例中,當(dāng)本地主機(jī)為Secondary狀態(tài)即為備節(jié)點(diǎn)時(shí),我們進(jìn)行正常的DBRD切換,使本地主機(jī)為Primary節(jié)點(diǎn)(主節(jié)點(diǎn)),遠(yuǎn)程主機(jī)為Secondary節(jié)點(diǎn)(備節(jié)點(diǎn)),然后在遠(yuǎn)程主機(jī)上進(jìn)行DRBD連接。
[0068]步驟208、當(dāng)本次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)為失敗,而上次檢測(cè)為成功時(shí),則停止服務(wù),所述服務(wù)包括Heartbeat、Mysql> DRBD0
[0069]在本實(shí)施例中,當(dāng)本次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)為失敗且上次網(wǎng)關(guān)檢測(cè)也為失敗時(shí),即當(dāng)兩次檢測(cè)網(wǎng)絡(luò)都不通時(shí),停止服務(wù)。
[0070]步驟209、當(dāng)本次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)為成功,而上次檢測(cè)為失敗時(shí),重啟DRBD、Heartbeat 服務(wù)。
[0071]在本實(shí)施例中,當(dāng)本次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)為成功且上次網(wǎng)關(guān)檢測(cè)也為失敗時(shí),即當(dāng)本次檢測(cè)網(wǎng)絡(luò)連通,上次檢測(cè)網(wǎng)絡(luò)不通時(shí),重新啟動(dòng)DRBD和Heartbeat服務(wù)。
[0072]本發(fā)明第二實(shí)施例通過檢測(cè)Ping網(wǎng)關(guān)或者第三方IP是否成功以及遠(yuǎn)程主機(jī)的DRBD狀態(tài),在不直接修改Heartbeat和DRBD等開源軟件源碼的情況下,添加監(jiān)控、測(cè)試和自動(dòng)切換等操作來解決由于網(wǎng)絡(luò)環(huán)境變化造成的腦裂問題,很大程度的降低了腦裂發(fā)生的可能性。與本發(fā)明第一實(shí)施例相比,增加了檢測(cè)Ping網(wǎng)關(guān)或者第三方IP結(jié)果的處理方法,使Heartbeat+DRBD的高可用解決方案性能更加穩(wěn)定、可靠。
[0073]在圖3中示出了本發(fā)明的第三實(shí)施例。
[0074]圖3是本發(fā)明第三實(shí)施例中的集群腦裂的處理裝置的結(jié)構(gòu)圖,所述裝置包括Ping網(wǎng)關(guān)或者第三方IP檢測(cè)模塊301、DRBD P/S狀態(tài)檢測(cè)模塊302、DRBDS/U狀態(tài)檢測(cè)???03和DRBD切換模塊304。
[0075]其中,Ping網(wǎng)關(guān)或者第三方IP檢測(cè)模塊301用于每隔一段時(shí)間檢測(cè)主機(jī)Ping網(wǎng)關(guān)或者第三方IP是否成功,并查詢上次網(wǎng)關(guān)檢測(cè)結(jié)果。
[0076]在本實(shí)施例中,Ping只是一個(gè)通信協(xié)議,是IP協(xié)議的一部分,TCP/IP協(xié)議的一部分,利用它可以檢查網(wǎng)絡(luò)是否能夠連通。上次Ping網(wǎng)關(guān)或者第三方IP成功或者失敗的標(biāo)識(shí),可以持久化到文件,或者設(shè)置為進(jìn)程內(nèi)變量值。
[0077]DRBD P/S狀態(tài)檢測(cè)模塊302用于當(dāng)本次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)為成功,且上次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)結(jié)果為成功時(shí),則檢測(cè)遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Primary/Secondary 狀態(tài)。
[0078]在本實(shí)施例中,DRBD是一種塊設(shè)備,可以被用于高可用(HA)之中。當(dāng)你將數(shù)據(jù)寫入本地文件系統(tǒng)時(shí),數(shù)據(jù)還將會(huì)被發(fā)送到網(wǎng)絡(luò)中另一臺(tái)主機(jī)上,以相同的形式記錄在一個(gè)文件系統(tǒng)中。本地(主節(jié)點(diǎn))與遠(yuǎn)程主機(jī)(備節(jié)點(diǎn))的數(shù)據(jù)可以保證實(shí)時(shí)同步。本地(主節(jié)點(diǎn))與遠(yuǎn)程主機(jī)(備節(jié)點(diǎn))兩個(gè)節(jié)點(diǎn)中,同一時(shí)刻只能有一臺(tái)處于Primary狀態(tài),另一臺(tái)處于Secondary狀態(tài)。
[0079]DRBD S/U狀態(tài)檢測(cè)???03用于當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不是Primary/Secondary狀態(tài)時(shí),檢測(cè)遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Secondary/Unknown狀態(tài)。DRBD S/U狀態(tài)檢測(cè)???03又包括休眠單元3031和DRBD P/S狀態(tài)檢測(cè)單元3032,其中,休眠單元用于當(dāng)首次檢測(cè)到遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Primary/Secondary狀態(tài)時(shí),進(jìn)入休眠狀態(tài);DRBD P/S狀態(tài)檢測(cè)單元3032用于檢測(cè)遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Primary/Secondary狀態(tài)。
[0080]在本實(shí)施例中,當(dāng)DRBD S/U狀態(tài)檢測(cè)??鞕z測(cè)到遠(yuǎn)程主機(jī)的DRBD狀態(tài)不是Primary/Secondary狀態(tài),即代表本地主機(jī)為Primary節(jié)點(diǎn)(主節(jié)點(diǎn)),遠(yuǎn)程主機(jī)為Secondary節(jié)點(diǎn)(備節(jié)點(diǎn))時(shí),休眠30s,再次進(jìn)行遠(yuǎn)程主機(jī)的DRBD狀態(tài)檢測(cè),進(jìn)一步地確定遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Secondary/Unknown狀態(tài)。
[0081]DRBD切換模塊304用于當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Secondary/Unknown狀態(tài)時(shí),則進(jìn)行正常DRBD切換。DRBD切換模塊304又包括本地主機(jī)DRBD狀態(tài)檢測(cè)單元3041和DRBD切換單元3042,其中,本地主機(jī)DRBD狀態(tài)檢測(cè)單元3041用于當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Secondary/Unknown狀態(tài)時(shí),則檢測(cè)本地主機(jī)的DRBD狀態(tài)是否為Secondary狀態(tài);DRBD切換單元3042用于當(dāng)本地主機(jī)為Secondary狀態(tài)時(shí),則進(jìn)行正常DRBD切換。[0082]在本實(shí)施例中,當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Secondary/Unknown狀態(tài)時(shí),本地主機(jī)DRBD狀態(tài)檢測(cè)單元進(jìn)一步地檢測(cè)本地主機(jī)的DRBD狀態(tài)是否為Secondary狀態(tài);當(dāng)檢測(cè)到本地主機(jī)的DRBD狀態(tài)為Secondary狀態(tài)時(shí),進(jìn)行DRBD切換,使本地主機(jī)為主節(jié)點(diǎn),遠(yuǎn)程主機(jī)為備節(jié)點(diǎn)。
[0083]本發(fā)明第三實(shí)施例通過Ping網(wǎng)關(guān)或者第三方IP檢測(cè)模塊檢測(cè)網(wǎng)絡(luò)連通狀況,DRBD P/S狀態(tài)檢測(cè)模塊和DRBD S/U狀態(tài)檢測(cè)??鞕z測(cè)遠(yuǎn)程主機(jī)的DRDB狀態(tài),DRBD切換模塊實(shí)現(xiàn)自動(dòng)切換DRBD狀態(tài),解決由于網(wǎng)絡(luò)環(huán)境變化造成的腦裂問題,很大程度的降低了腦裂發(fā)生的可能性。
[0084]在圖4中示出了本發(fā)明的第四實(shí)施例。
[0085]圖4是本發(fā)明第四實(shí)施例中的集群腦裂的處理裝置,所述裝置包括Ping網(wǎng)關(guān)或者第三方IP檢測(cè)模塊401、DRBD P/S狀態(tài)檢測(cè)模塊402、DRBD S/U狀態(tài)檢測(cè)???03、DRBD切換模塊404、服務(wù)停止模塊405和服務(wù)啟動(dòng)模塊406。
[0086]其中,Ping網(wǎng)關(guān)或者第三方IP檢測(cè)模塊401用于每隔一段時(shí)間檢測(cè)主機(jī)Ping網(wǎng)關(guān)或者第三方IP是否成功,并查詢上次網(wǎng)關(guān)檢測(cè)結(jié)果。
[0087]在本實(shí)施例中,Ping只是一個(gè)通信協(xié)議,是IP協(xié)議的一部分,TCP/IP協(xié)議的一部分,利用它可以檢查網(wǎng)絡(luò)是否能夠連通。上次Ping網(wǎng)關(guān)或者第三方IP成功或者失敗的標(biāo)識(shí),可以持久化到文件,或者設(shè)置為進(jìn)程內(nèi)變量值。
[0088]DRBD P/S狀態(tài)檢測(cè)模塊402用于當(dāng)本次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)為成功,且上次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)結(jié)果為成功時(shí),則檢測(cè)遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Primary/Secondary 狀態(tài)。
[0089]在本實(shí)施例中,DRBD是一種塊設(shè)備,可以被用于高可用(HA)之中。當(dāng)你將數(shù)據(jù)寫入本地文件系統(tǒng)時(shí),數(shù)據(jù)還將會(huì)被發(fā)送到網(wǎng)絡(luò)中另一臺(tái)主機(jī)上,以相同的形式記錄在一個(gè)文件系統(tǒng)中。本地(主節(jié)點(diǎn))與遠(yuǎn)程主機(jī)(備節(jié)點(diǎn))的數(shù)據(jù)可以保證實(shí)時(shí)同步。本地(主節(jié)點(diǎn))與遠(yuǎn)程主機(jī)(備節(jié)點(diǎn))兩個(gè)節(jié)點(diǎn)中,同一時(shí)刻只能有一臺(tái)處于Primary狀態(tài),另一臺(tái)處于Secondary狀態(tài)。
[0090]DRBD S/U狀態(tài)檢測(cè)模快403用于當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不是Primary/Secondary狀態(tài)時(shí),檢測(cè)遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Secondary/Unknown狀態(tài)。DRBD S/U狀態(tài)檢測(cè)???03又包括休眠單元4031和DRBD P/S狀態(tài)檢測(cè)單元4032,其中,休眠單元4031用于當(dāng)首次檢測(cè)到遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Primary/Secondary狀態(tài)時(shí),進(jìn)入休眠狀態(tài);DRBDP/S狀態(tài)檢測(cè)單元4032用于檢測(cè)遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Primary/Secondary狀態(tài)。
[0091]在本實(shí)施例中,當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不是Primary/Secondary狀態(tài),即代表本地主機(jī)為Primary節(jié)點(diǎn)(主節(jié)點(diǎn)),遠(yuǎn)程主機(jī)為Secondary節(jié)點(diǎn)(備節(jié)點(diǎn))時(shí),休眠30s,再次進(jìn)行遠(yuǎn)程主機(jī)的DRBD狀態(tài)檢測(cè),進(jìn)一步地確定遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Secondary/Unknown 狀態(tài)。
[0092]DRBD切換模塊404用于當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Secondary/Unknown狀態(tài)時(shí),則進(jìn)行正常DRBD切換。DRBD切換模塊404又包括本地主機(jī)DRBD狀態(tài)檢測(cè)單元4041和DRBD切換單元4042,其中,本地主機(jī)DRBD狀態(tài)檢測(cè)單元4041用于當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Secondary/Unknown狀態(tài)時(shí),則檢測(cè)本地主機(jī)的DRBD狀態(tài)是否為Secondary狀態(tài);DRBD切換單元4042用于當(dāng)本地主機(jī)為Secondary狀態(tài)時(shí),則進(jìn)行正常DRBD切換。[0093]在本實(shí)施例中,當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Secondary/Unknown狀態(tài)時(shí),進(jìn)一步地本地主機(jī)DRBD狀態(tài)檢測(cè)單元檢測(cè)本地主機(jī)的DRBD狀態(tài)是否為Secondary狀態(tài);當(dāng)檢測(cè)到本地主機(jī)的DRBD狀態(tài)為Secondary狀態(tài)時(shí),進(jìn)行DRBD切換,使本地主機(jī)為主節(jié)點(diǎn),遠(yuǎn)程主機(jī)為備節(jié)點(diǎn)。
[0094]服務(wù)停止模塊405用于當(dāng)本次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)為失敗,且上次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)結(jié)果為失敗時(shí),則停止服務(wù),所述服務(wù)包括Heartbeat、Mysql、DRBD。
[0095]服務(wù)啟動(dòng)模塊406用于當(dāng)本次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)為成功,且上次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)結(jié)果為失敗時(shí),則啟動(dòng)DRBD和Heartbeat服務(wù)。
[0096]本發(fā)明第四實(shí)施例通過Ping網(wǎng)關(guān)或者第三方IP檢測(cè)模塊檢測(cè)網(wǎng)絡(luò)連通狀況,DRBD P/S狀態(tài)檢測(cè)模塊和DRBD S/U狀態(tài)檢測(cè)??鞕z測(cè)遠(yuǎn)程主機(jī)的DRDB狀態(tài),DRBD切換模塊實(shí)現(xiàn)自動(dòng)切換DRBD狀態(tài),解決由于網(wǎng)絡(luò)環(huán)境變化造成的腦裂問題,很大程度的降低了腦裂發(fā)生的可能性。與第三實(shí)施例相比,本發(fā)明增加了服務(wù)停止模塊和服務(wù)啟動(dòng)模塊,用來處理其他檢測(cè)到的Ping網(wǎng)關(guān)或者第三方IP結(jié)果,使Heartbeat+DRBD的高可用解決方案性能更加穩(wěn)定、可靠。
[0097]注意,上述僅為本發(fā)明的較佳實(shí)施例及所運(yùn)用技術(shù)原理。本領(lǐng)域技術(shù)人員會(huì)理解,本發(fā)明不限于這里所述的特定實(shí)施例,對(duì)本領(lǐng)域技術(shù)人員來說能夠進(jìn)行各種明顯的變化、重新調(diào)整和替代而不會(huì)脫離本發(fā)明的保護(hù)范圍。因此,雖然通過以上實(shí)施例對(duì)本發(fā)明進(jìn)行了較為詳細(xì)的說明,但是本發(fā)明不僅僅限于以上實(shí)施例,在不脫離本發(fā)明構(gòu)思的情況下,還可以包括更多其他等效實(shí)施例,而本發(fā)明的范圍由所附的權(quán)利要求范圍決定。
【權(quán)利要求】
1.一種DRBD腦裂的處理方法,其特征在于,所述方法包括: 每隔一段時(shí)間檢測(cè)主機(jī)Ping網(wǎng)關(guān)或者第三方IP是否成功,并查詢上次網(wǎng)關(guān)檢測(cè)結(jié)果; 當(dāng)本次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)為成功,且上次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)結(jié)果為成功時(shí),則檢測(cè)遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Primary/Secondary或者Secondary/Primary 狀態(tài); 當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不是Primary/Secondary或者Secondary/Primary狀態(tài)時(shí),檢測(cè)遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Secondary/Unknown狀態(tài); 當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Secondary/Unknown狀態(tài)時(shí),則進(jìn)行正常DRBD切換。
2.根據(jù)權(quán)利要求1所述的集群腦裂的處理方法,其特征在于,所述方法還包括: 當(dāng)本次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)為失敗,且上次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)結(jié)果為成功時(shí),則停止服務(wù),所述服務(wù)包括Heartbeat、Mysql、DRBD。
3.根據(jù)權(quán)利要求1所述的集群腦裂的處理方法,其特征在于,所述方法還包括: 當(dāng)本次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)為成功,且上次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)結(jié)果為失敗時(shí),則啟動(dòng)DRBD和Heartbeat服務(wù)。
4.根據(jù)權(quán)利要求1所述`的集群腦裂的處理方法,其特征在于,所述檢測(cè)遠(yuǎn)程主機(jī)的DRBD 狀態(tài)是否為 Primary/Secondary 或者 Secondary/Primary 狀態(tài)還包括: 當(dāng)首次檢測(cè)到遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Primary/Secondary或者Secondary/Primary狀態(tài)時(shí),進(jìn)入休眠狀態(tài)。 休眠預(yù)設(shè)時(shí)間后再次檢測(cè)遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Primary/Secondary或者Secondary/Primary 狀態(tài)。
5.根據(jù)權(quán)利要求1所述的集群腦裂的處理方法,其特征在于,所述當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Secondary/Unknown狀態(tài)時(shí),則進(jìn)行正常DRBD切換包括: 當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Secondary/Unknown狀態(tài)時(shí),則檢測(cè)本地主機(jī)的DRBD狀態(tài)是否為Secondary狀態(tài); 當(dāng)本地主機(jī)為Secondary狀態(tài)時(shí),則進(jìn)行正常DRBD切換。
6.一種DRBD腦裂的處理裝置,其特征在于,所述裝置包括: Ping網(wǎng)關(guān)或者第三方IP檢測(cè)模塊,用于每隔一段時(shí)間檢測(cè)主機(jī)Ping網(wǎng)關(guān)或者第三方IP是否成功,并查詢上次網(wǎng)關(guān)檢測(cè)結(jié)果; DRBD P/S狀態(tài)檢測(cè)模塊,用于當(dāng)本次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)為成功,且上次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)結(jié)果為成功時(shí),則檢測(cè)遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Primary/Secondary 或者 Secondary/Primary 狀態(tài); DRBD S/U狀態(tài)檢測(cè)???用于當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不是Primary/Secondary或者Secondary/Primary狀態(tài)時(shí),檢測(cè)遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Secondary/Unknown狀態(tài);DRBD切換模塊,用于當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Secondary/Unknown狀態(tài)時(shí),則進(jìn)行正常DRBD切換。
7.根據(jù)權(quán)利要求6所述的集群腦裂的處理裝置,其特征在于,所述裝置還包括: 服務(wù)停止模塊,用于當(dāng)本次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)為成功,且上次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)結(jié)果為失敗時(shí),則停止服務(wù),所述服務(wù)包括Heartbeat、Mysql、DRBD。
8.根據(jù)權(quán)利要求6所述的集群腦裂的處理裝置,其特征在于,所述裝置還包括: 服務(wù)啟動(dòng)模塊,用于當(dāng)本次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)為成功,且上次Ping網(wǎng)關(guān)或者第三方IP檢測(cè)結(jié)果為失敗時(shí),則啟動(dòng)DRBD和Heartbeat服務(wù)。
9.根據(jù)權(quán)利要求6所述的集群腦裂的處理裝置,其特征在于,所述DRBDP/S狀態(tài)檢測(cè)模塊包括: 休眠單元,用于當(dāng)首次檢測(cè)到遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Primary/Secondary或者Secondary/Primary狀態(tài)時(shí),進(jìn)入休眠狀態(tài)。 DRBD P/S狀態(tài)檢測(cè)單元,用于檢測(cè)遠(yuǎn)程主機(jī)的DRBD狀態(tài)是否為Primary/Secondary或者 Secondary/Primary 狀態(tài)。
10.根據(jù)權(quán)利要求6所述的集群腦裂的處理裝置,其特征在于,所述DRBD切換模塊包括: 本地主機(jī)DRBD狀態(tài)檢測(cè)單元,用于當(dāng)遠(yuǎn)程主機(jī)的DRBD狀態(tài)不為Secondary/Unknown狀態(tài)時(shí),則檢測(cè)本地主機(jī)的DRBD狀態(tài)是否為Secondary狀態(tài); DRBD切換單元,用于當(dāng) 本地主機(jī)為Secondary狀態(tài)時(shí),則進(jìn)行正常DRBD切換。
【文檔編號(hào)】H04L29/06GK103532748SQ201310464715
【公開日】2014年1月22日 申請(qǐng)日期:2013年10月8日 優(yōu)先權(quán)日:2013年10月8日
【發(fā)明者】李成金, 鄭馳, 李滕, 趙建軍 申請(qǐng)人:北京華勝天成科技股份有限公司