分布式資料庫系統的故障檢測方法及其系統與流程
2024-03-08 05:31:15 1

本發明涉及分布式資料庫領域,尤其涉及一種分布式資料庫系統的故障檢測方法及其系統。
背景技術:
大數據時代,分布式資料庫成為數據存儲的必要基礎設施。分布式資料庫系統存在一些問題,其中,對於大多數應用服務來說,可用性問題是一個基本問題。提供一定程度高可用性服務,是分布式資料庫系統必備的特徵之一。
目前有很多分布式資料庫系統的高可用性方案,常採用單節點高可用性組件(ha組件)進行故障檢測和故障處理。該方案存在單點故障,在高可用性組件本身異常時,將無法提供高可用性服務。
對於高可用性組件多節點部署的分布式高可用性系統,可以解決單點問題。但是,多個高可用性組件節點之間必須確定主備關係,只有主節點可以對故障進行處理,否則多個高可用性節點的操作很容易造成衝突。
在申請號為201210148938.9的專利公開文件中,提出了一種資料庫集群單點故障的監控系統及方法,應用於若干個資料庫的資料庫集群中,所述資料庫包括主庫或從庫,監控系統包括:若干個資料庫代理,至少三個基於分布式協調機制相互通信的協調終端,其中至少三個協調終端中包括一個領導協調終端;一個資料庫代理與資料庫集群中的一個資料庫對應設置在一臺伺服器上,每個資料庫代理中均保存各個協調終端的地址;通過資料庫代理定時檢測對應資料庫的讀寫狀態,領導協調終端根據來自資料庫代理的資料庫讀寫狀態信息,對資料庫集群中的單點故障進行識別,能夠解決現有技術中,分布式mysql資料庫單點故障的解決方案中存在的效率低下的問題。但該方法只有通過領導協調終端進行故障檢測處理,在網絡抖動的情況下容易出現誤檢測。
技術實現要素:
本發明所要解決的技術問題是:提供一種分布式資料庫系統的故障檢測方法及其系統,提高故障檢測的準確性,防止出現誤檢測。
為了解決上述技術問題,本發明採用的技術方案為:一種分布式資料庫系統的故障檢測方法,包括:
ha組件集群中的主節點按照預設的時間周期探測資料庫節點,得到第一探測結果;
若所述第一探測結果為失敗的次數大於等於預設值,則所述主節點發送所述資料庫節點故障確認的通知;
ha組件集群中的至少一個從節點接收所述通知後對所述資料庫節點進行探測,得到第二探測結果;
所述從節點將第二探測結果反饋給主節點;
所述主節點根據所述第二探測結果,判斷所述資料庫節點是否故障。
本發明還涉及一種分布式資料庫系統的故障檢測系統,包括:
第一探測模塊,用於ha組件集群中的主節點按照預設的時間周期探測資料庫節點,得到第一探測結果;
第一發送模塊,用於若所述第一探測結果為失敗的次數大於等於預設值,則所述主節點發送所述資料庫節點故障確認的通知;
第二探測模塊,用於ha組件集群中的至少一個從節點接收所述通知後對所述資料庫節點進行探測,得到第二探測結果;
反饋模塊,用於所述從節點將第二探測結果反饋給主節點;
第一判斷模塊,用於所述主節點根據所述第二探測結果,判斷所述資料庫節點是否故障。
本發明的有益效果在於:同一時刻只有主節點和資料庫節點交互,可有效保證資料庫集群狀態數據的一致性;採用主節點進行故障探測,從節點輔助故障確認的故障檢測策略,能有效防止發生誤檢測,提高了故障檢測的準確性。
附圖說明
圖1為本發明一種分布式資料庫系統的故障檢測方法的流程圖;
圖2為本發明實施例一的分布式資料庫系統的架構示意圖;
圖3為本發明實施例一的方法流程圖;
圖4為本發明一種分布式資料庫系統的故障檢測系統的結構示意圖;
圖5為本發明實施例二的系統結構示意圖。
標號說明:
1、資料庫集群;2、ha組件集群;3、資料庫代理;4、協調組件;
101、第一探測模塊;102、第一發送模塊;103、第二探測模塊;104、反饋模塊;105、第一判斷模塊;106、第二判斷模塊;107、第一處理模塊;108、第二處理模塊;
1021、第一發送單元;1022、第二發送單元;
1041、第一反饋單元;1042、第二反饋單元;
1051、第一判定單元;1052、第二判定單元。
具體實施方式
為詳細說明本發明的技術內容、所實現目的及效果,以下結合實施方式並配合附圖詳予說明。
本發明最關鍵的構思在於:主節點進行故障探測,從節點輔助故障確認,提高故障檢測的準確性。
請參閱圖1,一種分布式資料庫系統的故障檢測方法,包括:
ha組件集群中的主節點按照預設的時間周期探測資料庫節點,得到第一探測結果;
若所述第一探測結果為失敗的次數大於等於預設值,則所述主節點發送所述資料庫節點故障確認的通知;
ha組件集群中的至少一個從節點接收所述通知後對所述資料庫節點進行探測,得到第二探測結果;
所述從節點將第二探測結果反饋給主節點;
所述主節點根據所述第二探測結果,判斷所述資料庫節點是否故障。
從上述描述可知,本發明的有益效果在於:採用主節點進行故障探測,從節點輔助故障確認的故障檢測策略,可提高了故障檢測的準確性。
進一步地,所述「所述主節點根據所述第二探測結果,判斷所述資料庫節點是否故障」具體為:若所述從節點反饋的第二探測結果均為異常,則判定所述資料庫節點故障;若至少一個從節點反饋的第二探測結果為正常,則判定所述資料庫節點正常。
由上述描述可知,根據所有從節點反饋的第二探測結果來判斷資料庫節點是否故障,極大降低因網絡抖動引起的誤檢測,保證了資料庫服務的高可用性。
進一步地,所述「所述主節點根據所述第二探測結果,判斷所述資料庫節點是否故障」之後,進一步包括:
若故障的資料庫節點為主資料庫節點,則在可用的備資料庫節點中選取一個新的主資料庫節點。
由上述描述可知,若主資料庫節點故障則選取新的主資料庫節點,繼續提供服務,進一步保證了資料庫服務的高可用性。
進一步地,所述「所述主節點發送所述資料庫節點故障確認的通知」具體為:
所述主節點發送所述資料庫節點故障確認的通知給協調組件;
協調組件將所述通知發送給ha組件集群中的所有從節點。
進一步地,所述「所述從節點將第二探測結果反饋給主節點」具體為:
所述從節點將第二探測結果反饋給協調組件;
協調組件將第二探測結果反饋給所述主節點。
由上述描述可知,通過協調組件實現主節點和從節點之間的相互通信,提高了主節點和從節點的效率。
請參照圖4,本發明還提出一種分布式資料庫系統的故障檢測系統,包括
第一探測模塊,用於ha組件集群中的主節點按照預設的時間周期探測資料庫節點,得到第一探測結果;
第一發送模塊,用於若所述第一探測結果為失敗的次數大於等於預設值, 則所述主節點發送所述資料庫節點故障確認的通知;
第二探測模塊,用於ha組件集群中的至少一個從節點接收所述通知後對所述資料庫節點進行探測,得到第二探測結果;
反饋模塊,用於所述從節點將第二探測結果反饋給主節點;
第一判斷模塊,用於所述主節點根據所述第二探測結果,判斷所述資料庫節點是否故障。
進一步地,所述第一判斷模塊包括:
第一判定單元,用於若所述從節點反饋的第二探測結果均為異常,則判定所述資料庫節點故障;
第二判定單元,用於若至少一個從節點反饋的第二探測結果為正常,則判定所述資料庫節點正常。
進一步地,還包括:
第一處理模塊,用於若故障的資料庫節點為主資料庫節點,則在可用的備資料庫節點中選取一個新的主資料庫節點。
進一步地,所述第一發送模塊包括:
第一發送單元,用於所述主節點發送所述資料庫節點故障確認的通知給協調組件;
第二發送單元,用於協調組件將所述通知發送給ha組件集群中的所有從節點。
進一步地,所述反饋模塊包括:
第一反饋單元,用於所述從節點將第二探測結果反饋給協調組件;
第二反饋單元,用於協調組件將第二探測結果反饋給所述主節點。
實施例一
請參照圖1,本發明的實施例一為:一種分布式資料庫系統的故障檢測方法,請參照圖2,所述分布式資料庫系統包括資料庫集群1、ha組件集群2、資料庫代理3和協調組件4。所述資料庫集群1由至少一個資料庫組構成,一個資料庫組包含一個主資料庫節點和至少一個備資料庫節點。所述ha組件集群2中的ha組件提供資料庫集群1的高可用性功能。所述協調組件4保存資料庫集群1信 息,包括所有的資料庫組和其中的資料庫節點的主備信息等,當資料庫集群1信息發生改變時,主動通知資料庫代理3和ha組件。所述資料庫代理3從協調組件4讀取整個資料庫集群1信息,根據一定的分片規則,將客戶端的請求路由到對應的資料庫節點。當資料庫集群1信息發生變化時,由協調組件4通知資料庫代理3更新信息。ha組件從協調組件4讀取資料庫集群1信息,隨後定期對資料庫節點進行故障檢測,若有故障發生,則進行相應的故障處理。
所述ha組件採用分布式多節點部署,避免單點問題。每個ha組件有兩種角色狀態,主節點和從節點。在一個分布式部署的ha組件集群2中,同一時刻有且只有一個ha組件節點是主節點,其它ha組件節點均是從節點。ha組件都具有故障處理和故障確認的功能,但只有主節點能夠對資料庫節點進行探測和故障處理,從節點只進行輔助的故障確認。
所述協調組件4可多節點分布式部署,且應具有如下特徵:
順序一致性,按照客戶端發送請求的順序更新數據;
原子性,更新要麼成功,要麼失敗,不會出現部分更新;
單一性,無論客戶端連接哪個節點,都會看到同一個視圖;
可靠性,一旦數據更新成功,將一直保持,直到新的更新;
及時性,客戶端會在一個確定的時間內得到最新的數據。
圖2中的實線表示數據傳輸,點劃線表示心跳,虛線表示監聽。
所述協調組件4可以自主開發,也可以使用如zookeeper、etcd等開源的分布式應用程式協調服務軟體。
請參照圖3,所述方法包括如下步驟:
s1:ha組件集群中的主節點按照預設的時間周期探測資料庫節點,判斷所述資料庫節點是否能夠正常提供服務,例如,使用ping資料庫命令進行探測,得到第一探測結果。
s2:判斷第一探測結果為失敗的次數是否大於等於預設,若否,則繼續執行s1,若是,則執行s3。
s3:主節點發送對所述資料庫節點進行故障確認的通知給從節點;優選地,通過協調組件發送給從節點,即主節點發送所述通知給協調組件;協調組件將 所述通知發送給ha組件集群中的所有從節點。
s4:ha組件集群中的至少一個從節點接收所述通知後對所述資料庫節點進行一次性的狀態探測,得到第二探測結果;
s5:所述從節點將第二探測結果反饋給主節點;優選地,通過協調組件反饋給主節點,即從節點將第二探測結果反饋給協調組件;協調組件將第二探測結果反饋給所述主節點。
s6:判斷從節點反饋的第二探測結果是否均為異常,若否,執行s7,若是,執行s8。
s7:判定所述資料庫節點能夠正常提供服務,執行s1。
s8:判定所述資料庫節點故障,執行s9。
s9:判斷所述故障的資料庫節點是否為主資料庫節點,若是,執行s10,若否,執行s11。
s10:進行主備節點的切換,在可用的備資料庫節點中選取一個新的主資料庫節點,繼續提供服務。
s11:根據預設流程對所述故障的備資料庫節點進行處理,如重啟所述資料庫節點或發送郵件通知等。
本實施例採用主節點進行故障探測,從節點輔助故障確認的故障檢測策略,主節點可根據所有從節點反饋的第二探測結果來判斷資料庫節點是否故障,能有效降低因網絡抖動引起的誤檢測,提高了故障檢測的準確性,保證了資料庫服務的高可用性。
實施例二
請參照圖5,本實施例為一種分布式資料庫系統的故障檢測系統,包括:
第一探測模塊101,用於ha組件集群中的主節點按照預設的時間周期探測資料庫節點,得到第一探測結果;
第一發送模塊102,用於若所述第一探測結果為失敗的次數大於等於預設值,則所述主節點發送所述資料庫節點故障確認的通知;
第二探測模塊103,用於ha組件集群中的至少一個從節點接收所述通知後對所述資料庫節點進行探測,得到第二探測結果;
反饋模塊104,用於所述從節點將第二探測結果反饋給主節點;
第一判斷模塊105,用於所述主節點根據所述第二探測結果,判斷所述資料庫節點是否故障。
所述第一判斷模塊105包括:
第一判定單元1051,用於若所述從節點反饋的第二探測結果均為異常,則判定所述資料庫節點故障;
第二判定單元1052,用於若至少一個從節點反饋的第二探測結果為正常,則判定所述資料庫節點正常。
所述第一發送模塊102包括:
第一發送單元1021,用於若所述第一探測結果為失敗的次數大於等於預設值,所述主節點發送所述資料庫節點故障確認的通知給協調組件;
第二發送單元1022,用於協調組件將所述通知發送給ha組件集群中的所有從節點。
所述反饋模塊104包括:
第一反饋單元1041,用於所述從節點將第二探測結果反饋給協調組件;
第二反饋單元1042,用於協調組件將第二探測結果反饋給所述主節點。
該系統還包括:
第二判斷模塊106,用於判斷故障的資料庫節點為是否為主資料庫節點,得到第二判斷結果;
第一處理模塊107,用於若第二判斷結果為是,則在可用的備資料庫節點中選取一個新的主資料庫節點。
第二處理模塊108,用於若第二判斷結果為否,則根據預設流程對所述資料庫節點進行處理。
綜上所述,本發明提供的一種分布式資料庫系統的故障檢測方法及其系統,同一時刻只有主節點和資料庫節點交互,可有效保證資料庫集群狀態數據的一致性;採用主節點進行故障探測,從節點輔助故障確認的故障檢測策略,能有效防止發生誤檢測,提高了故障檢測的準確性;根據所有從節點反饋的第二探測結果來判斷資料庫節點是否故障,極大降低因網絡抖動引起的誤檢測,保證 了資料庫服務的高可用性;通過協調組件實現主節點和從節點之間的相互通信,提高了主節點和從節點的效率。
以上所述僅為本發明的實施例,並非因此限制本發明的專利範圍,凡是利用本發明說明書及附圖內容所作的等同變換,或直接或間接運用在相關的技術領域,均同理包括在本發明的專利保護範圍內。