本發(fā)明涉及分布式數(shù)據(jù)庫(kù)領(lǐng)域,尤其涉及一種分布式數(shù)據(jù)庫(kù)系統(tǒng)的故障檢測(cè)處理方法及其系統(tǒng)。
背景技術(shù):
大數(shù)據(jù)時(shí)代,分布式數(shù)據(jù)庫(kù)成為數(shù)據(jù)存儲(chǔ)的必要基礎(chǔ)設(shè)施。分布式數(shù)據(jù)庫(kù)系統(tǒng)存在一些問(wèn)題,其中,對(duì)于大多數(shù)應(yīng)用服務(wù)來(lái)說(shuō),可用性問(wèn)題是一個(gè)基本問(wèn)題。提供一定程度高可用性服務(wù),是分布式數(shù)據(jù)庫(kù)系統(tǒng)必備的特征之一。
目前有很多分布式數(shù)據(jù)庫(kù)系統(tǒng)的高可用性方案,常采用單節(jié)點(diǎn)高可用性組件(ha組件)進(jìn)行故障檢測(cè)和故障處理。該方案存在單點(diǎn)故障,在高可用性組件本身異常時(shí),將無(wú)法提供高可用性服務(wù)。
對(duì)于高可用性組件多節(jié)點(diǎn)部署的分布式高可用性系統(tǒng),可以解決單點(diǎn)問(wèn)題。但是,多個(gè)高可用性組件節(jié)點(diǎn)之間必須確定主備關(guān)系,只有主節(jié)點(diǎn)可以對(duì)故障進(jìn)行處理,否則多個(gè)高可用性節(jié)點(diǎn)的操作很容易造成沖突。如果采用固定的主從角色關(guān)系,當(dāng)主節(jié)點(diǎn)異常,其它從節(jié)點(diǎn)將不能進(jìn)行故障處理,因此,常見(jiàn)的該類方案采用動(dòng)態(tài)的主從角色關(guān)系。通過(guò)一定的算法確定主從節(jié)點(diǎn),當(dāng)主節(jié)點(diǎn)異常時(shí),再?gòu)膹墓?jié)點(diǎn)中選出一個(gè)節(jié)點(diǎn)作為主節(jié)點(diǎn)。選主算法通常比較復(fù)雜,在網(wǎng)絡(luò)不穩(wěn)定的時(shí)候,易出現(xiàn)腦裂現(xiàn)象,即同一時(shí)刻存在多于一個(gè)的主節(jié)點(diǎn)。而理論上能保證一致性的算法,如常見(jiàn)的paxos算法、raft算法等,實(shí)現(xiàn)比較困難,容易產(chǎn)生死鎖。
在申請(qǐng)?zhí)枮?01410854727.6的專利公開(kāi)文件中,提出了一種應(yīng)用于分布式數(shù)據(jù)庫(kù)的解決2pc模型單點(diǎn)故障問(wèn)題的方法,包括:建立一列從協(xié)調(diào)者隊(duì)列,存入多個(gè)站點(diǎn)作為從協(xié)調(diào)者,其中每個(gè)從協(xié)調(diào)者的功能和協(xié)調(diào)者是相同的;協(xié)調(diào)者與多個(gè)參與者之間按照兩階段提交協(xié)議通過(guò)數(shù)據(jù)包進(jìn)行通信;同時(shí),協(xié)調(diào)者和所有從協(xié)調(diào)者之間每隔一時(shí)間段進(jìn)行一次通信;若從協(xié)調(diào)者在這個(gè)時(shí)間段后沒(méi)有收到協(xié)調(diào)者發(fā)送的消息,則認(rèn)為協(xié)調(diào)者發(fā)生阻塞,系統(tǒng)立即根據(jù)一定算 法從協(xié)調(diào)者隊(duì)列中選擇一從協(xié)調(diào)者作為新的協(xié)調(diào)者與多個(gè)參與者進(jìn)行通信。該方法雖然能解決單點(diǎn)故障的問(wèn)題,但只能應(yīng)用于2pc模型,且可能發(fā)生協(xié)調(diào)者之間數(shù)據(jù)狀態(tài)不一致的情況。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問(wèn)題是:提供一種分布式數(shù)據(jù)庫(kù)系統(tǒng)的故障檢測(cè)處理方法及其系統(tǒng),實(shí)現(xiàn)分布式數(shù)據(jù)庫(kù)主節(jié)點(diǎn)的選擇和故障檢測(cè)處理,防止單點(diǎn)故障,且可提高故障檢測(cè)的準(zhǔn)確率。
為了解決上述技術(shù)問(wèn)題,本發(fā)明采用的技術(shù)方案為:一種分布式數(shù)據(jù)庫(kù)系統(tǒng)的故障檢測(cè)處理方法,包括:
各個(gè)ha組件發(fā)送寫(xiě)請(qǐng)求給協(xié)調(diào)組件;
協(xié)調(diào)組件根據(jù)所述寫(xiě)請(qǐng)求,分別賦予各個(gè)ha組件唯一的標(biāo)識(shí),獲取各個(gè)ha組件與其對(duì)應(yīng)標(biāo)識(shí)的關(guān)聯(lián)信息;
一ha組件獲取所述關(guān)聯(lián)信息;
所述一ha組件依據(jù)所述關(guān)聯(lián)信息獲取與其對(duì)應(yīng)的標(biāo)識(shí);
判斷所述標(biāo)識(shí)是否為預(yù)設(shè)的主節(jié)點(diǎn)標(biāo)識(shí);
主節(jié)點(diǎn)按照預(yù)設(shè)的時(shí)間周期探測(cè)數(shù)據(jù)庫(kù)節(jié)點(diǎn),得到第一探測(cè)結(jié)果;
若所述第一探測(cè)結(jié)果為失敗的次數(shù)大于等于預(yù)設(shè)值,則所述主節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)故障確認(rèn)的通知;
至少一個(gè)從節(jié)點(diǎn)接收所述通知后對(duì)所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)進(jìn)行探測(cè),得到第二探測(cè)結(jié)果;
所述從節(jié)點(diǎn)將第二探測(cè)結(jié)果反饋給主節(jié)點(diǎn);
所述主節(jié)點(diǎn)根據(jù)所述第二探測(cè)結(jié)果,判斷所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)是否故障。
本發(fā)明還涉及一種分布式數(shù)據(jù)庫(kù)系統(tǒng)的故障檢測(cè)處理系統(tǒng),包括
第一發(fā)送模塊,用于各個(gè)ha組件發(fā)送寫(xiě)請(qǐng)求給協(xié)調(diào)組件;
賦予模塊,用于協(xié)調(diào)組件根據(jù)所述寫(xiě)請(qǐng)求,分別賦予各個(gè)ha組件唯一的標(biāo)識(shí),獲取各個(gè)ha組件與其對(duì)應(yīng)標(biāo)識(shí)的關(guān)聯(lián)信息;
第一獲取模塊,用于一ha組件獲取所述關(guān)聯(lián)信息;
第二獲取模塊,用于所述一ha組件依據(jù)所述關(guān)聯(lián)信息獲取與其對(duì)應(yīng)的標(biāo)識(shí);
第一判斷模塊,用于判斷所述標(biāo)識(shí)是否為預(yù)設(shè)的主節(jié)點(diǎn)標(biāo)識(shí)。
第一探測(cè)模塊,用于主節(jié)點(diǎn)按照預(yù)設(shè)的時(shí)間周期探測(cè)數(shù)據(jù)庫(kù)節(jié)點(diǎn),得到第一探測(cè)結(jié)果;
第二發(fā)送模塊,用于若所述第一探測(cè)結(jié)果為失敗的次數(shù)大于等于預(yù)設(shè)值,則所述主節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)故障確認(rèn)的通知;
第二探測(cè)模塊,用于至少一個(gè)從節(jié)點(diǎn)接收所述通知后對(duì)所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)進(jìn)行探測(cè),得到第二探測(cè)結(jié)果;
反饋模塊,用于所述從節(jié)點(diǎn)將第二探測(cè)結(jié)果反饋給主節(jié)點(diǎn);
第二判斷模塊,用于所述主節(jié)點(diǎn)根據(jù)所述第二探測(cè)結(jié)果,判斷所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)是否故障。
本發(fā)明的有益效果在于:通過(guò)在分布式數(shù)據(jù)庫(kù)的總體架構(gòu)中引入?yún)f(xié)調(diào)組件,通過(guò)協(xié)調(diào)組件實(shí)現(xiàn)ha組件之間的相互通信,可提高h(yuǎn)a組件的效率;根據(jù)協(xié)調(diào)組件的順序一致性等特性,賦予各個(gè)ha組件唯一的標(biāo)識(shí),可使各個(gè)ha組件根據(jù)所述標(biāo)識(shí)的唯一性,確定出唯一的主節(jié)點(diǎn),進(jìn)而防止腦裂現(xiàn)象;同一時(shí)刻只有主節(jié)點(diǎn)和數(shù)據(jù)庫(kù)節(jié)點(diǎn)交互,可有效保證集群狀態(tài)數(shù)據(jù)的一致性,在此基礎(chǔ)上,若發(fā)生故障,則采用主節(jié)點(diǎn)進(jìn)行故障探測(cè),從節(jié)點(diǎn)輔助故障確認(rèn)的故障檢測(cè)策略,能有效防止發(fā)生誤檢測(cè),顯著提高了故障檢測(cè)的準(zhǔn)確性。
附圖說(shuō)明
圖1為本發(fā)明一種分布式數(shù)據(jù)庫(kù)系統(tǒng)的故障檢測(cè)處理方法的流程圖;
圖2為本發(fā)明實(shí)施例一的分布式數(shù)據(jù)庫(kù)系統(tǒng)的架構(gòu)示意圖;
圖3為本發(fā)明實(shí)施例一的分布式數(shù)據(jù)庫(kù)系統(tǒng)的客戶端請(qǐng)求數(shù)據(jù)的時(shí)序圖;
圖4為本發(fā)明實(shí)施例一的數(shù)據(jù)庫(kù)節(jié)點(diǎn)主備切換過(guò)程的數(shù)據(jù)交互時(shí)序圖;
圖5為本發(fā)明實(shí)施例一的方法流程圖;
圖6為本發(fā)明實(shí)施例二的方法流程圖;
圖7為本發(fā)明實(shí)施例三的方法流程圖;
圖8為一種分布式數(shù)據(jù)庫(kù)系統(tǒng)的故障檢測(cè)處理系統(tǒng)的結(jié)構(gòu)示意圖;
圖9為本發(fā)明實(shí)施例二的系統(tǒng)結(jié)構(gòu)示意圖。
標(biāo)號(hào)說(shuō)明:
1、數(shù)據(jù)庫(kù)集群;2、ha組件集群;3、數(shù)據(jù)庫(kù)代理;4、協(xié)調(diào)組件;
101、第一發(fā)送模塊;102、賦予模塊;103、第一獲取模塊;104、第二獲取模塊;105、第一判斷模塊;106、第一探測(cè)模塊;107、第二發(fā)送模塊;108、第二探測(cè)模塊;109、反饋模塊;110、第二判斷模塊;111、第一判定模塊;112、第一刪除模塊;113、通知模塊;114、選定模塊;115、第二判定模塊;116、第二刪除模塊;117、第三判斷模塊;118、第一處理模塊;119、第二處理模塊;
1071、第一發(fā)送單元;1072、第二發(fā)送單元;
1091、第一反饋單元;1092、第二反饋單元;
1101、第一判定單元;1102、第二判定單元。
具體實(shí)施方式
為詳細(xì)說(shuō)明本發(fā)明的技術(shù)內(nèi)容、所實(shí)現(xiàn)目的及效果,以下結(jié)合實(shí)施方式并配合附圖詳予說(shuō)明。
本發(fā)明最關(guān)鍵的構(gòu)思在于:基于協(xié)調(diào)組件實(shí)現(xiàn)ha組件之間的角色分配,根據(jù)唯一的標(biāo)識(shí),確定出唯一的主節(jié)點(diǎn),并采用主節(jié)點(diǎn)進(jìn)行故障探測(cè),從節(jié)點(diǎn)輔助故障確認(rèn)的故障檢測(cè)機(jī)制。
請(qǐng)參閱圖1,一種分布式數(shù)據(jù)庫(kù)系統(tǒng)的故障檢測(cè)處理方法,包括:
各個(gè)ha組件發(fā)送寫(xiě)請(qǐng)求給協(xié)調(diào)組件;
協(xié)調(diào)組件根據(jù)所述寫(xiě)請(qǐng)求,分別賦予各個(gè)ha組件唯一的標(biāo)識(shí),獲取各個(gè)ha組件與其對(duì)應(yīng)標(biāo)識(shí)的關(guān)聯(lián)信息;
一ha組件獲取所述關(guān)聯(lián)信息;
所述一ha組件依據(jù)所述關(guān)聯(lián)信息獲取與其對(duì)應(yīng)的標(biāo)識(shí);
判斷所述標(biāo)識(shí)是否為預(yù)設(shè)的主節(jié)點(diǎn)標(biāo)識(shí);
主節(jié)點(diǎn)按照預(yù)設(shè)的時(shí)間周期探測(cè)數(shù)據(jù)庫(kù)節(jié)點(diǎn),得到第一探測(cè)結(jié)果;
若所述第一探測(cè)結(jié)果為失敗的次數(shù)大于等于預(yù)設(shè)值,則所述主節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)故障確認(rèn)的通知;
至少一個(gè)從節(jié)點(diǎn)接收所述通知后對(duì)所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)進(jìn)行探測(cè),得到第二探測(cè)結(jié)果;
所述從節(jié)點(diǎn)將第二探測(cè)結(jié)果反饋給主節(jié)點(diǎn);
所述主節(jié)點(diǎn)根據(jù)所述第二探測(cè)結(jié)果,判斷所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)是否故障。
從上述描述可知,本發(fā)明的有益效果在于:可根據(jù)唯一的標(biāo)識(shí),確定唯一的主節(jié)點(diǎn),防止腦裂現(xiàn)象;同時(shí),采用主節(jié)點(diǎn)進(jìn)行故障探測(cè),從節(jié)點(diǎn)輔助故障確認(rèn)的故障檢測(cè)策略,能有效防止發(fā)生誤檢測(cè),可提高故障檢測(cè)的準(zhǔn)確性。
進(jìn)一步地,所述“協(xié)調(diào)組件根據(jù)所述寫(xiě)請(qǐng)求,分別賦予各個(gè)ha組件唯一的標(biāo)識(shí),獲取各個(gè)ha組件與其對(duì)應(yīng)標(biāo)識(shí)的關(guān)聯(lián)信息”具體為:
協(xié)調(diào)組件根據(jù)收到各個(gè)ha組件的所述寫(xiě)請(qǐng)求的時(shí)間先后,分別賦予各個(gè)ha組件一個(gè)依次遞增的序列號(hào),獲取各個(gè)ha組件與其序列號(hào)的關(guān)聯(lián)信息。
由上述描述可知,根據(jù)協(xié)調(diào)組件的特性,各個(gè)ha組件均對(duì)應(yīng)一個(gè)不重復(fù)的序列號(hào),可根據(jù)判斷唯一的序列號(hào)是否為預(yù)選為備用主節(jié)點(diǎn)的序列號(hào)來(lái)快速地確定出唯一的主節(jié)點(diǎn)。
進(jìn)一步地,所述“判斷所述標(biāo)識(shí)是否為預(yù)設(shè)的主節(jié)點(diǎn)標(biāo)識(shí)”之后,進(jìn)一步包括:
若所述標(biāo)識(shí)為預(yù)設(shè)的主節(jié)點(diǎn)標(biāo)識(shí),則判定所述一ha組件為主節(jié)點(diǎn);
若原主節(jié)點(diǎn)故障,則協(xié)調(diào)組件刪除原主節(jié)點(diǎn)與其對(duì)應(yīng)標(biāo)識(shí)的關(guān)聯(lián)信息;
協(xié)調(diào)組件發(fā)送所述原主節(jié)點(diǎn)異常的事件通知給各個(gè)ha組件;
選定已判定為主節(jié)點(diǎn)的所述一ha組件為新的主節(jié)點(diǎn)。
進(jìn)一步地,所述“判斷所述標(biāo)識(shí)是否為預(yù)設(shè)的主節(jié)點(diǎn)標(biāo)識(shí)”之后,進(jìn)一步包括:
若所述標(biāo)識(shí)不是預(yù)設(shè)的主節(jié)點(diǎn)標(biāo)識(shí),則判定所述一ha組件為從節(jié)點(diǎn);
若從節(jié)點(diǎn)故障,則協(xié)調(diào)組件刪除所述從節(jié)點(diǎn)與其對(duì)應(yīng)標(biāo)識(shí)的關(guān)聯(lián)信息。
由上述描述可知,在節(jié)點(diǎn)發(fā)生故障時(shí),協(xié)調(diào)組件自動(dòng)刪除對(duì)應(yīng)的關(guān)聯(lián)信息,防止出現(xiàn)故障的節(jié)點(diǎn)被選為主節(jié)點(diǎn)的情況;若為主節(jié)點(diǎn)發(fā)生故障,則在啟動(dòng)且 正常的從節(jié)點(diǎn)中選出新的主節(jié)點(diǎn),解決了單點(diǎn)故障問(wèn)題,可繼續(xù)執(zhí)行高可用性功能。
進(jìn)一步地,所述“所述主節(jié)點(diǎn)根據(jù)所述第二探測(cè)結(jié)果,判斷所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)是否故障”具體為:若所述從節(jié)點(diǎn)反饋的第二探測(cè)結(jié)果均為異常,則判定所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)故障;若至少一個(gè)從節(jié)點(diǎn)反饋的第二探測(cè)結(jié)果為正常,則判定所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)正常。
由上述描述可知,根據(jù)所有從節(jié)點(diǎn)反饋的第二探測(cè)結(jié)果來(lái)判斷數(shù)據(jù)庫(kù)節(jié)點(diǎn)是否故障,極大降低因網(wǎng)絡(luò)抖動(dòng)引起的誤檢測(cè),保證了數(shù)據(jù)庫(kù)服務(wù)的高可用性。
進(jìn)一步地,所述“所述主節(jié)點(diǎn)根據(jù)所述第二探測(cè)結(jié)果,判斷所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)是否故障”之后,進(jìn)一步包括:
若故障的數(shù)據(jù)庫(kù)節(jié)點(diǎn)為主數(shù)據(jù)庫(kù)節(jié)點(diǎn),則在可用的備數(shù)據(jù)庫(kù)節(jié)點(diǎn)中選取一個(gè)新的主數(shù)據(jù)庫(kù)節(jié)點(diǎn)。
由上述描述可知,若主數(shù)據(jù)庫(kù)節(jié)點(diǎn)故障則選取新的主數(shù)據(jù)庫(kù)節(jié)點(diǎn),繼續(xù)提供服務(wù),進(jìn)一步保證了數(shù)據(jù)庫(kù)服務(wù)的高可用性。
進(jìn)一步地,所述“所述主節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)故障確認(rèn)的通知”具體為:
所述主節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)故障確認(rèn)的通知給協(xié)調(diào)組件;
協(xié)調(diào)組件將所述通知發(fā)送給ha組件集群中的所有從節(jié)點(diǎn)。
進(jìn)一步地,所述“所述從節(jié)點(diǎn)將第二探測(cè)結(jié)果反饋給主節(jié)點(diǎn)”具體為:
所述從節(jié)點(diǎn)將第二探測(cè)結(jié)果反饋給協(xié)調(diào)組件;
協(xié)調(diào)組件將第二探測(cè)結(jié)果反饋給所述主節(jié)點(diǎn)。
由上述描述可知,通過(guò)協(xié)調(diào)組件實(shí)現(xiàn)主節(jié)點(diǎn)和從節(jié)點(diǎn)之間的相互通信,提高了主節(jié)點(diǎn)和從節(jié)點(diǎn)的效率。
請(qǐng)參照?qǐng)D8,本發(fā)明還提出一種分布式數(shù)據(jù)庫(kù)系統(tǒng)的故障檢測(cè)處理系統(tǒng),包括
第一發(fā)送模塊,用于各個(gè)ha組件發(fā)送寫(xiě)請(qǐng)求給協(xié)調(diào)組件;
賦予模塊,用于協(xié)調(diào)組件根據(jù)所述寫(xiě)請(qǐng)求,分別賦予各個(gè)ha組件唯一的標(biāo)識(shí),獲取各個(gè)ha組件與其對(duì)應(yīng)標(biāo)識(shí)的關(guān)聯(lián)信息;
第一獲取模塊,用于一ha組件獲取所述關(guān)聯(lián)信息;
第二獲取模塊,用于所述一ha組件依據(jù)所述關(guān)聯(lián)信息獲取與其對(duì)應(yīng)的標(biāo)識(shí);
第一判斷模塊,用于判斷所述標(biāo)識(shí)是否為預(yù)設(shè)的主節(jié)點(diǎn)標(biāo)識(shí)。
第一探測(cè)模塊,用于主節(jié)點(diǎn)按照預(yù)設(shè)的時(shí)間周期探測(cè)數(shù)據(jù)庫(kù)節(jié)點(diǎn),得到第一探測(cè)結(jié)果;
第二發(fā)送模塊,用于若所述第一探測(cè)結(jié)果為失敗的次數(shù)大于等于預(yù)設(shè)值,則所述主節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)故障確認(rèn)的通知;
第二探測(cè)模塊,用于至少一個(gè)從節(jié)點(diǎn)接收所述通知后對(duì)所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)進(jìn)行探測(cè),得到第二探測(cè)結(jié)果;
反饋模塊,用于所述從節(jié)點(diǎn)將第二探測(cè)結(jié)果反饋給主節(jié)點(diǎn);
第二判斷模塊,用于所述主節(jié)點(diǎn)根據(jù)所述第二探測(cè)結(jié)果,判斷所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)是否故障。
進(jìn)一步地,所述寫(xiě)請(qǐng)求包括與ha組件唯一對(duì)應(yīng)的ha組件數(shù)據(jù)。
進(jìn)一步地,所述賦予模塊具體用于協(xié)調(diào)組件根據(jù)收到各個(gè)ha組件的所述寫(xiě)請(qǐng)求的時(shí)間先后,分別賦予各個(gè)ha組件一個(gè)依次遞增的序列號(hào),獲取各個(gè)ha組件與其序列號(hào)的關(guān)聯(lián)信息。
進(jìn)一步地,還包括:
第一判定模塊,用于若所述標(biāo)識(shí)為預(yù)設(shè)的主節(jié)點(diǎn)標(biāo)識(shí),則判定所述一ha組件為主節(jié)點(diǎn);
第一刪除模塊,用于若原主節(jié)點(diǎn)故障,則協(xié)調(diào)組件刪除原主節(jié)點(diǎn)與其對(duì)應(yīng)標(biāo)識(shí)的關(guān)聯(lián)信息;
通知模塊,用于協(xié)調(diào)組件發(fā)送所述原主節(jié)點(diǎn)異常的事件通知給各個(gè)ha組件;
選定模塊,用于選定已判定為主節(jié)點(diǎn)的所述一ha組件為新的主節(jié)點(diǎn)。
進(jìn)一步地,還包括:
第二判定模塊,用于若所述標(biāo)識(shí)不是預(yù)設(shè)的主節(jié)點(diǎn)標(biāo)識(shí),則判定所述一ha組件為從節(jié)點(diǎn);
第二刪除模塊,用于若從節(jié)點(diǎn)故障,則協(xié)調(diào)組件刪除所述從節(jié)點(diǎn)與其對(duì)應(yīng)標(biāo)識(shí)的關(guān)聯(lián)信息。
進(jìn)一步地,所述第二判斷模塊包括:
第一判定單元,用于若所述從節(jié)點(diǎn)反饋的第二探測(cè)結(jié)果均為異常,則判定所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)故障;
第二判定單元,用于若至少一個(gè)從節(jié)點(diǎn)反饋的第二探測(cè)結(jié)果為正常,則判定所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)正常。
進(jìn)一步地,還包括:
第一處理模塊,用于若故障的數(shù)據(jù)庫(kù)節(jié)點(diǎn)為主數(shù)據(jù)庫(kù)節(jié)點(diǎn),則在可用的備數(shù)據(jù)庫(kù)節(jié)點(diǎn)中選取一個(gè)新的主數(shù)據(jù)庫(kù)節(jié)點(diǎn)。
進(jìn)一步地,所述第二發(fā)送模塊包括:
第一發(fā)送單元,用于所述主節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)故障確認(rèn)的通知給協(xié)調(diào)組件;
第二發(fā)送單元,用于協(xié)調(diào)組件將所述通知發(fā)送給ha組件集群中的所有從節(jié)點(diǎn)。
進(jìn)一步地,所述反饋模塊包括:
第一反饋單元,用于所述從節(jié)點(diǎn)將第二探測(cè)結(jié)果反饋給協(xié)調(diào)組件;
第二反饋單元,用于協(xié)調(diào)組件將第二探測(cè)結(jié)果反饋給所述主節(jié)點(diǎn)。
實(shí)施例一
請(qǐng)參照?qǐng)D1,本發(fā)明的實(shí)施例一為一種分布式數(shù)據(jù)庫(kù)系統(tǒng)的故障檢測(cè)處理方法,請(qǐng)參照?qǐng)D2,所述分布式數(shù)據(jù)庫(kù)系統(tǒng)包括數(shù)據(jù)庫(kù)集群1、ha組件集群2、數(shù)據(jù)庫(kù)代理3和協(xié)調(diào)組件4。所述數(shù)據(jù)庫(kù)集群1由至少一個(gè)數(shù)據(jù)庫(kù)組構(gòu)成,一個(gè)數(shù)據(jù)庫(kù)組包含一個(gè)主數(shù)據(jù)庫(kù)節(jié)點(diǎn)和至少一個(gè)備數(shù)據(jù)庫(kù)節(jié)點(diǎn)。所述ha組件集群2中的ha組件提供數(shù)據(jù)庫(kù)集群1的高可用性功能。所述協(xié)調(diào)組件4保存數(shù)據(jù)庫(kù)集群1信息,包括所有的數(shù)據(jù)庫(kù)組和其中的數(shù)據(jù)庫(kù)節(jié)點(diǎn)的主備信息等,當(dāng)數(shù)據(jù)庫(kù)集群1信息發(fā)生改變時(shí),主動(dòng)通知數(shù)據(jù)庫(kù)代理3和ha組件。所述數(shù)據(jù)庫(kù)代理3從協(xié)調(diào)組件4讀取整個(gè)數(shù)據(jù)庫(kù)集群1信息,根據(jù)一定的分片規(guī)則,將客戶端的請(qǐng)求路由到對(duì)應(yīng)的數(shù)據(jù)庫(kù)節(jié)點(diǎn)。當(dāng)數(shù)據(jù)庫(kù)集群1信息發(fā)生變化時(shí),由協(xié)調(diào)組件4通 知數(shù)據(jù)庫(kù)代理3更新信息。ha組件從協(xié)調(diào)組件4讀取數(shù)據(jù)庫(kù)集群1信息,隨后定期對(duì)數(shù)據(jù)庫(kù)節(jié)點(diǎn)進(jìn)行故障檢測(cè),若有故障發(fā)生,則進(jìn)行相應(yīng)的故障處理。
所述ha組件采用分布式多節(jié)點(diǎn)部署,避免單點(diǎn)問(wèn)題。每個(gè)ha組件有兩種角色狀態(tài),主節(jié)點(diǎn)和從節(jié)點(diǎn)。在一個(gè)分布式部署的ha組件集群2中,同一時(shí)刻有且只有一個(gè)ha組件節(jié)點(diǎn)是主節(jié)點(diǎn),其它ha組件節(jié)點(diǎn)均是從節(jié)點(diǎn)。
所述協(xié)調(diào)組件4可多節(jié)點(diǎn)分布式部署,且應(yīng)具有如下特征:
順序一致性,按照客戶端發(fā)送請(qǐng)求的順序更新數(shù)據(jù);
原子性,更新要么成功,要么失敗,不會(huì)出現(xiàn)部分更新;
單一性,無(wú)論客戶端連接哪個(gè)節(jié)點(diǎn),都會(huì)看到同一個(gè)視圖;
可靠性,一旦數(shù)據(jù)更新成功,將一直保持,直到新的更新;
及時(shí)性,客戶端會(huì)在一個(gè)確定的時(shí)間內(nèi)得到最新的數(shù)據(jù)。
圖2中的實(shí)線表示數(shù)據(jù)傳輸,點(diǎn)劃線表示心跳,虛線表示監(jiān)聽(tīng)。
所述協(xié)調(diào)組件4可以自主開(kāi)發(fā),也可以使用如zookeeper、etcd等開(kāi)源的分布式應(yīng)用程序協(xié)調(diào)服務(wù)軟件。本實(shí)施例以zookeeper作為協(xié)調(diào)組件4為例。
搭建分布式數(shù)據(jù)庫(kù)系統(tǒng)集群時(shí),將數(shù)據(jù)庫(kù)集群的信息寫(xiě)入?yún)f(xié)調(diào)組件,包括數(shù)據(jù)庫(kù)組信息、數(shù)據(jù)庫(kù)節(jié)點(diǎn)的主備信息等,由協(xié)調(diào)組件維護(hù)這些數(shù)據(jù);圖3為客戶端請(qǐng)求數(shù)據(jù)的時(shí)序圖,即分布式數(shù)據(jù)庫(kù)系統(tǒng)的工作流程,包括如下步驟:
s101:數(shù)據(jù)庫(kù)代理啟動(dòng)時(shí),向協(xié)調(diào)組件讀取數(shù)據(jù)庫(kù)集群信息;
s102:協(xié)調(diào)組件將數(shù)據(jù)庫(kù)集群信息返回給數(shù)據(jù)庫(kù)代理;
s103:客戶端通過(guò)數(shù)據(jù)庫(kù)代理讀寫(xiě)數(shù)據(jù)記錄,將讀寫(xiě)數(shù)據(jù)的請(qǐng)求發(fā)送給數(shù)據(jù)庫(kù)代理;
s104:當(dāng)數(shù)據(jù)庫(kù)代理收到客戶端的讀寫(xiě)數(shù)據(jù)請(qǐng)求時(shí),根據(jù)路由算法,計(jì)算出所請(qǐng)求的數(shù)據(jù)所在的數(shù)據(jù)庫(kù)組,將請(qǐng)求路由到對(duì)應(yīng)數(shù)據(jù)庫(kù)組的主數(shù)據(jù)庫(kù)節(jié)點(diǎn)上;
s105:數(shù)據(jù)庫(kù)節(jié)點(diǎn)處理讀寫(xiě)請(qǐng)求,并將結(jié)果返回給數(shù)據(jù)庫(kù)代理;
s106:數(shù)據(jù)庫(kù)代理獲取到數(shù)據(jù)庫(kù)節(jié)點(diǎn)的返回結(jié)果后,返回給客戶端。
如圖4所示,在分布式數(shù)據(jù)庫(kù)系統(tǒng)中,由于某些原因,如數(shù)據(jù)庫(kù)節(jié)點(diǎn)維護(hù)、更換硬件等任務(wù),需要對(duì)數(shù)據(jù)庫(kù)節(jié)點(diǎn)進(jìn)行主備切換,包括如下步驟:
s201:協(xié)調(diào)組件的客戶端,如圖2中的數(shù)據(jù)庫(kù)代理和ha組件,改寫(xiě)保存在協(xié)調(diào)組件中的關(guān)于數(shù)據(jù)庫(kù)節(jié)點(diǎn)主備狀態(tài)信息的數(shù)據(jù);
s202:協(xié)調(diào)組件將服務(wù)器組狀態(tài)修改的事件通知給所有的數(shù)據(jù)庫(kù)代理;
s203:數(shù)據(jù)庫(kù)代理修改自己保存的數(shù)據(jù)庫(kù)組狀態(tài)數(shù)據(jù),并將修改結(jié)果返回協(xié)調(diào)組件;
s204:協(xié)調(diào)組件通知客戶端狀態(tài)修改的結(jié)果。
本實(shí)施例提出一種分布式數(shù)據(jù)庫(kù)系統(tǒng)的故障檢測(cè)處理方法,基于上述的分布式數(shù)據(jù)庫(kù)系統(tǒng),實(shí)現(xiàn)分布式數(shù)據(jù)庫(kù)的高可用性,如圖5所示,包括如下步驟:
s1:?jiǎn)?dòng)ha組件;例如,在ha組件集群中啟動(dòng)id分別為ha_x、ha_y、ha_z三個(gè)ha組件。
s2:所述ha組件啟動(dòng)后,自動(dòng)連接協(xié)調(diào)組件zookeeper。
s3:各個(gè)ha組件發(fā)送寫(xiě)請(qǐng)求給協(xié)調(diào)組件,所述寫(xiě)請(qǐng)求包括與ha組件唯一對(duì)應(yīng)的ha組件數(shù)據(jù);例如,各個(gè)ha組件將各自的節(jié)點(diǎn)id以臨時(shí)節(jié)點(diǎn)和順序節(jié)點(diǎn)的方式寫(xiě)入所述協(xié)調(diào)組件zookeeper中。
s4:協(xié)調(diào)組件根據(jù)所述寫(xiě)請(qǐng)求,分別賦予各個(gè)ha組件唯一的標(biāo)識(shí),獲取各個(gè)ha組件與其對(duì)應(yīng)標(biāo)識(shí)的關(guān)聯(lián)信息;可選地,協(xié)調(diào)組件根據(jù)收到各個(gè)ha組件的寫(xiě)請(qǐng)求的時(shí)間先后,分別賦予各個(gè)ha組件一個(gè)依次遞增的序列號(hào),從而獲取各個(gè)ha組件與其序列號(hào)的關(guān)聯(lián)信息;例如,協(xié)調(diào)組件zookeeper根據(jù)實(shí)際收到寫(xiě)清求的時(shí)間,寫(xiě)入包括節(jié)點(diǎn)id和一個(gè)遞增的序列號(hào)的數(shù)據(jù),也就是說(shuō),zookeeper最終寫(xiě)入的數(shù)據(jù)為ha_x_0001、ha_y_0002和ha_z_0003。
s5:各個(gè)ha組件從協(xié)調(diào)組件中獲取所述關(guān)聯(lián)信息;例如,從協(xié)調(diào)組件zookeeper中獲取所述最終寫(xiě)入的數(shù)據(jù)。
s6:各個(gè)ha組件依據(jù)所述關(guān)聯(lián)信息獲取與其對(duì)應(yīng)的標(biāo)識(shí);例如,id為ha_x的ha組件獲取了ha_x_0001、ha_y_0002和ha_z_0003,將自身id與ha_x_0001、ha_y_0002和ha_z_0003進(jìn)行對(duì)比,得到自身對(duì)應(yīng)的序列號(hào)為001。
s7:各個(gè)ha組件判斷所述標(biāo)識(shí)是否為預(yù)設(shè)的主節(jié)點(diǎn)標(biāo)識(shí);例如,預(yù)設(shè)備選的主節(jié)點(diǎn)為序列號(hào)最小的ha組件,則每個(gè)ha組件都將判斷自身對(duì)應(yīng)的序列號(hào)是否最小,若是,執(zhí)行步驟s8,若否,執(zhí)行步驟s9;可選地,也可以預(yù)設(shè)主節(jié) 點(diǎn)為序列號(hào)最大的ha組件。
s8:判定所述ha組件為主節(jié)點(diǎn),所述ha組件將自身的角色設(shè)為主節(jié)點(diǎn),開(kāi)始執(zhí)行主節(jié)點(diǎn)的功能,即執(zhí)行步驟s10。
s9:判定所述ha組件為從節(jié)點(diǎn)。
s10:主節(jié)點(diǎn)按照預(yù)設(shè)的時(shí)間周期探測(cè)數(shù)據(jù)庫(kù)節(jié)點(diǎn),判斷所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)是否能夠正常提供服務(wù),例如,使用ping數(shù)據(jù)庫(kù)命令進(jìn)行探測(cè),得到第一探測(cè)結(jié)果。
s11:判斷第一探測(cè)結(jié)果為失敗的次數(shù)是否大于等于預(yù)設(shè),若否,則繼續(xù)執(zhí)行步驟s10,若是,則執(zhí)行步驟s12。
s12:主節(jié)點(diǎn)發(fā)送對(duì)所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)進(jìn)行故障確認(rèn)的通知給從節(jié)點(diǎn);優(yōu)選地,通過(guò)協(xié)調(diào)組件發(fā)送給從節(jié)點(diǎn),即主節(jié)點(diǎn)發(fā)送所述通知給協(xié)調(diào)組件;協(xié)調(diào)組件將所述通知發(fā)送給ha組件集群中的所有從節(jié)點(diǎn)。
s13:至少一個(gè)從節(jié)點(diǎn)接收所述通知后對(duì)所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)進(jìn)行一次性的狀態(tài)探測(cè),得到第二探測(cè)結(jié)果;
s14:所述從節(jié)點(diǎn)將第二探測(cè)結(jié)果反饋給主節(jié)點(diǎn);優(yōu)選地,通過(guò)協(xié)調(diào)組件反饋給主節(jié)點(diǎn),即從節(jié)點(diǎn)將第二探測(cè)結(jié)果反饋給協(xié)調(diào)組件;協(xié)調(diào)組件將第二探測(cè)結(jié)果反饋給所述主節(jié)點(diǎn)。
s15:判斷從節(jié)點(diǎn)反饋的第二探測(cè)結(jié)果是否均為異常,若否,執(zhí)行步驟s16,若是,執(zhí)行步驟s17。
s16:判定所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)能夠正常提供服務(wù),執(zhí)行步驟s10。
s17:判定所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)故障。
本實(shí)施例基于協(xié)調(diào)組件的順序一致性特性,不會(huì)同時(shí)有兩個(gè)ha組件對(duì)應(yīng)相同的序列號(hào),這就保證了對(duì)應(yīng)最小序列號(hào)的ha組件只有一個(gè),從而確定出唯一的主節(jié)點(diǎn),防止出現(xiàn)腦裂現(xiàn)象;同時(shí),采用主節(jié)點(diǎn)進(jìn)行故障探測(cè),從節(jié)點(diǎn)輔助故障確認(rèn)的故障檢測(cè)策略,主節(jié)點(diǎn)可根據(jù)所有從節(jié)點(diǎn)反饋的第二探測(cè)結(jié)果來(lái)判斷數(shù)據(jù)庫(kù)節(jié)點(diǎn)是否故障,能有效降低因網(wǎng)絡(luò)抖動(dòng)引起的誤檢測(cè),提高了故障檢測(cè)的準(zhǔn)確性,保證了數(shù)據(jù)庫(kù)服務(wù)的高可用性。
實(shí)施例二
請(qǐng)參照?qǐng)D6,本實(shí)施例為實(shí)施例一的進(jìn)一步延伸,在ha組件中確定出主節(jié)點(diǎn)和從節(jié)點(diǎn)之后,增加對(duì)異?;蚬收蟞a組件的處理過(guò)程,即在步驟s8和s9之后均執(zhí)行下述步驟:
s18:所有啟動(dòng)的ha組件監(jiān)聽(tīng)協(xié)調(diào)組件,即主節(jié)點(diǎn)和從節(jié)點(diǎn)都監(jiān)聽(tīng)協(xié)調(diào)組件。
s19:若有節(jié)點(diǎn)故障,判斷故障的節(jié)點(diǎn)是否為主節(jié)點(diǎn),若否,執(zhí)行步驟s12,若是,執(zhí)行步驟s13。
s20:協(xié)調(diào)組件刪除所述從節(jié)點(diǎn)與其對(duì)應(yīng)標(biāo)識(shí)的關(guān)聯(lián)信息。
s21:協(xié)調(diào)組件刪除主節(jié)點(diǎn)與其對(duì)應(yīng)標(biāo)識(shí)的關(guān)聯(lián)信息,并發(fā)送主節(jié)點(diǎn)異常的事件通知給從節(jié)點(diǎn),從節(jié)點(diǎn)執(zhí)行步驟s5。
本實(shí)施例可解決單點(diǎn)故障,在ha組件出現(xiàn)異?;蚬收现?,仍可以繼續(xù)提供高可用性服務(wù)。
實(shí)施例三
請(qǐng)參照?qǐng)D7,本實(shí)施例為實(shí)施例一的進(jìn)一步延伸,在步驟s21后還包括如下步驟:
s22:判斷所述故障的數(shù)據(jù)庫(kù)節(jié)點(diǎn)是否為主數(shù)據(jù)庫(kù)節(jié)點(diǎn),若是,執(zhí)行步驟s23,若否,執(zhí)行步驟s24。
s23:進(jìn)行主備節(jié)點(diǎn)的切換,在可用的備數(shù)據(jù)庫(kù)節(jié)點(diǎn)中選取一個(gè)新的主數(shù)據(jù)庫(kù)節(jié)點(diǎn),繼續(xù)提供服務(wù)。
s24:根據(jù)預(yù)設(shè)流程對(duì)所述故障的備數(shù)據(jù)庫(kù)節(jié)點(diǎn)進(jìn)行處理,如重啟所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)或發(fā)送郵件通知等。
本實(shí)施例通過(guò)根據(jù)故障的數(shù)據(jù)庫(kù)節(jié)點(diǎn)的主備角色狀態(tài),對(duì)故障的數(shù)據(jù)庫(kù)節(jié)點(diǎn)進(jìn)行相應(yīng)的處理,使數(shù)據(jù)庫(kù)集群能繼續(xù)提供服務(wù)。
實(shí)施例四
請(qǐng)參照?qǐng)D9,本實(shí)施例為對(duì)應(yīng)實(shí)施例一的方法的一種分布式數(shù)據(jù)庫(kù)系統(tǒng)的故障檢測(cè)處理系統(tǒng),包括:
第一發(fā)送模塊101,用于各個(gè)ha組件發(fā)送寫(xiě)請(qǐng)求給協(xié)調(diào)組件;所述寫(xiě)請(qǐng)求 包括與ha組件唯一對(duì)應(yīng)的ha組件數(shù)據(jù);
賦予模塊102,用于協(xié)調(diào)組件根據(jù)所述寫(xiě)請(qǐng)求,分別賦予各個(gè)ha組件唯一的標(biāo)識(shí),獲取各個(gè)ha組件與其對(duì)應(yīng)標(biāo)識(shí)的關(guān)聯(lián)信息;可選地,所述賦予模塊具體用于協(xié)調(diào)組件根據(jù)收到各個(gè)ha組件的所述寫(xiě)請(qǐng)求的時(shí)間先后,分別賦予各個(gè)ha組件一個(gè)依次遞增的序列號(hào),獲取各個(gè)ha組件與其序列號(hào)的關(guān)聯(lián)信息;
第一獲取模塊103,用于一ha組件獲取所述關(guān)聯(lián)信息;
第二獲取模塊104,用于所述一ha組件依據(jù)所述關(guān)聯(lián)信息獲取與其對(duì)應(yīng)的標(biāo)識(shí);
第一判斷模塊105,用于判斷所述標(biāo)識(shí)是否為預(yù)設(shè)的主節(jié)點(diǎn)標(biāo)識(shí),得到第一判斷結(jié)果。
第一探測(cè)模塊106,用于主節(jié)點(diǎn)按照預(yù)設(shè)的時(shí)間周期探測(cè)數(shù)據(jù)庫(kù)節(jié)點(diǎn),得到第一探測(cè)結(jié)果;
第二發(fā)送模塊107,用于若所述第一探測(cè)結(jié)果為失敗的次數(shù)大于等于預(yù)設(shè)值,則所述主節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)故障確認(rèn)的通知;
第二探測(cè)模塊108,用于至少一個(gè)從節(jié)點(diǎn)接收所述通知后對(duì)所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)進(jìn)行探測(cè),得到第二探測(cè)結(jié)果;
反饋模塊109,用于所述從節(jié)點(diǎn)將第二探測(cè)結(jié)果反饋給主節(jié)點(diǎn);
第二判斷模塊110,用于所述主節(jié)點(diǎn)根據(jù)所述第二探測(cè)結(jié)果,判斷所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)是否故障。
還包括:
第一判定模塊111,用于若所述第一判斷結(jié)果為是,則判定所述一ha組件為主節(jié)點(diǎn);
第一刪除模塊112,用于若原主節(jié)點(diǎn)故障,則協(xié)調(diào)組件刪除原主節(jié)點(diǎn)與其對(duì)應(yīng)標(biāo)識(shí)的關(guān)聯(lián)信息;
通知模塊113,用于協(xié)調(diào)組件發(fā)送所述原主節(jié)點(diǎn)異常的事件通知給各個(gè)ha組件;
選定模塊114,用于選定已判定為主節(jié)點(diǎn)的所述一ha組件為新的主節(jié)點(diǎn);
第二判定模塊115,用于若所述第一判斷結(jié)果為否,則判定所述一ha組件 為從節(jié)點(diǎn);
第二刪除模塊116,用于若從節(jié)點(diǎn)故障,則協(xié)調(diào)組件刪除所述從節(jié)點(diǎn)與其對(duì)應(yīng)標(biāo)識(shí)的關(guān)聯(lián)信息。
第三判斷模塊117,用于判斷故障的數(shù)據(jù)庫(kù)節(jié)點(diǎn)為是否為主數(shù)據(jù)庫(kù)節(jié)點(diǎn),得到第三判斷結(jié)果;
第一處理模塊118,用于若第三判斷結(jié)果為是,則在可用的備數(shù)據(jù)庫(kù)節(jié)點(diǎn)中選取一個(gè)新的主數(shù)據(jù)庫(kù)節(jié)點(diǎn)。
第二處理模塊119,用于若第三判斷結(jié)果為否,則根據(jù)預(yù)設(shè)流程對(duì)所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)進(jìn)行處理。
所述第二判斷模塊110包括:
第一判定單元1101,用于若所述從節(jié)點(diǎn)反饋的第二探測(cè)結(jié)果均為異常,則判定所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)故障;
第二判定單元1102,用于若至少一個(gè)從節(jié)點(diǎn)反饋的第二探測(cè)結(jié)果為正常,則判定所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)正常。
所述第二發(fā)送模塊107包括:
第一發(fā)送單元1071,用于若所述第一探測(cè)結(jié)果為失敗的次數(shù)大于等于預(yù)設(shè)值,所述主節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)庫(kù)節(jié)點(diǎn)故障確認(rèn)的通知給協(xié)調(diào)組件;
第二發(fā)送單元1072,用于協(xié)調(diào)組件將所述通知發(fā)送給ha組件集群中的所有從節(jié)點(diǎn)。
所述反饋模塊109包括:
第一反饋單元1091,用于所述從節(jié)點(diǎn)將第二探測(cè)結(jié)果反饋給協(xié)調(diào)組件;
第二反饋單元1092,用于協(xié)調(diào)組件將第二探測(cè)結(jié)果反饋給所述主節(jié)點(diǎn)。
綜上所述,本發(fā)明提供的一種分布式數(shù)據(jù)庫(kù)系統(tǒng)的故障檢測(cè)處理方法及其系統(tǒng),通過(guò)在分布式數(shù)據(jù)庫(kù)的總體架構(gòu)中引入?yún)f(xié)調(diào)組件,通過(guò)協(xié)調(diào)組件實(shí)現(xiàn)ha組件之間的相互通信,可提高h(yuǎn)a組件的效率;通過(guò)唯一對(duì)應(yīng)ha組件的ha組件數(shù)據(jù),可使各個(gè)ha組件唯一獲取到與其對(duì)應(yīng)的標(biāo)識(shí),防止出現(xiàn)一個(gè)ha組件獲取到多個(gè)標(biāo)識(shí)的情況;根據(jù)協(xié)調(diào)組件的順序一致性等特性,各個(gè)ha組件均對(duì)應(yīng)一個(gè)不重復(fù)的序列號(hào),可根據(jù)判斷唯一的序列號(hào)是否為預(yù)選為備用主節(jié)點(diǎn)的序 列號(hào)來(lái)快速地確定出唯一的主節(jié)點(diǎn),防止腦裂現(xiàn)象;同一時(shí)刻只有主節(jié)點(diǎn)和數(shù)據(jù)庫(kù)節(jié)點(diǎn)交互,可有效保證數(shù)據(jù)庫(kù)集群狀態(tài)數(shù)據(jù)的一致性;在此基礎(chǔ)上,若發(fā)生故障,則采用主節(jié)點(diǎn)進(jìn)行故障探測(cè),從節(jié)點(diǎn)輔助故障確認(rèn)的故障檢測(cè)策略,能有效防止發(fā)生誤檢測(cè),顯著提高了故障檢測(cè)的準(zhǔn)確性;根據(jù)所有從節(jié)點(diǎn)反饋的第二探測(cè)結(jié)果來(lái)判斷數(shù)據(jù)庫(kù)節(jié)點(diǎn)是否故障,極大降低因網(wǎng)絡(luò)抖動(dòng)引起的誤檢測(cè),保證了數(shù)據(jù)庫(kù)服務(wù)的高可用性;通過(guò)協(xié)調(diào)組件實(shí)現(xiàn)主節(jié)點(diǎn)和從節(jié)點(diǎn)之間的相互通信,提高了主節(jié)點(diǎn)和從節(jié)點(diǎn)的效率。
以上所述僅為本發(fā)明的實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說(shuō)明書(shū)及附圖內(nèi)容所作的等同變換,或直接或間接運(yùn)用在相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。