本發(fā)明涉及計算機通信技術(shù)領(lǐng)域,尤其涉及一種集群心跳檢測方法、系統(tǒng)及裝置。
背景技術(shù):
在大規(guī)模的集群或者服務(wù)監(jiān)控系統(tǒng)中,心跳是檢測集群內(nèi)節(jié)點是否正常在線的重要手段。
目前集群心跳檢測的典型方法是采用星型心跳結(jié)構(gòu)的檢測方法,即存在一個監(jiān)視節(jié)點,該監(jiān)視節(jié)點負責(zé)與所有的其他被檢測數(shù)據(jù)節(jié)點進行心跳通信,一旦監(jiān)視節(jié)點與被檢測數(shù)據(jù)節(jié)點的通信中斷,監(jiān)視節(jié)點將這個數(shù)據(jù)節(jié)點標(biāo)記為故障節(jié)點。
這種方案很簡單,但是存在一個問題:監(jiān)視節(jié)點需要與大量的數(shù)據(jù)節(jié)點進行心跳通信,當(dāng)監(jiān)視節(jié)點繁忙的時候,可能無法響應(yīng)來自數(shù)據(jù)節(jié)點的心跳消息,導(dǎo)致數(shù)據(jù)節(jié)點超時誤判,進而可能引起集群崩潰。
技術(shù)實現(xiàn)要素:
為了解決現(xiàn)有技術(shù)的問題,本發(fā)明實施例提供了一種集群心跳檢測方法、系統(tǒng)及裝置。所述技術(shù)方案如下:
一方面,提供了一種集群心跳檢測方法,包括如下步驟:
監(jiān)視節(jié)點預(yù)生成多邊形拓撲結(jié)構(gòu),并根據(jù)所述多邊形拓撲結(jié)構(gòu)創(chuàng)建配置文件,并將所述配置文件發(fā)送至數(shù)據(jù)節(jié)點;
所述數(shù)據(jù)節(jié)點根據(jù)所述配置文件,對其相鄰數(shù)據(jù)節(jié)點周期性進行心跳查詢,并將生成的異常心跳查詢結(jié)果上報至所述監(jiān)視節(jié)點;
所述監(jiān)視節(jié)點根據(jù)所述異常心跳查詢結(jié)果和上報所述異常心跳查詢結(jié)果的所述數(shù)據(jù)節(jié)點總個數(shù)確定故障節(jié)點,其中,所述上報所述異常心跳查詢結(jié)果的所述數(shù)據(jù)節(jié)點均有同一相鄰數(shù)據(jù)節(jié)點。
進一步的,所述根據(jù)所述多邊形拓撲結(jié)構(gòu)創(chuàng)建配置文件的步驟具體包括:
所述監(jiān)視節(jié)點將所述多邊形拓撲結(jié)構(gòu)的頂點節(jié)點的ID值分配至所述數(shù)據(jù)節(jié)點;
所述監(jiān)視節(jié)點根據(jù)分配至所述數(shù)據(jù)節(jié)點的ID值及所述多邊形拓撲結(jié)構(gòu)的所述頂點節(jié)點間的相鄰關(guān)系,創(chuàng)建所述配置文件。
進一步的,所述多邊形拓撲結(jié)構(gòu)為蜂巢六邊形拓撲結(jié)構(gòu)。
進一步的,所述配置文件至少包括心跳查詢間隔時間、應(yīng)答超時時間、心跳查詢方式、相鄰數(shù)據(jù)節(jié)點的ID值。
進一步的,所述數(shù)據(jù)節(jié)點根據(jù)所述配置文件,對相鄰數(shù)據(jù)節(jié)點周期性進行心跳查詢,并將生成的異常心跳查詢結(jié)果上報至所述監(jiān)視節(jié)點的步驟具體包括:
所述數(shù)據(jù)節(jié)點每隔所述心跳查詢間隔時間,按照所述心跳查詢方式對所述配置文件中所述相鄰數(shù)據(jù)節(jié)點進行心跳查詢;
如果所述數(shù)據(jù)節(jié)點在所述應(yīng)答超時時間內(nèi),對所述配置文件中所述相鄰數(shù)據(jù)節(jié)點心跳查詢失敗,則生成異常心跳查詢結(jié)果,并將所述異常心跳查詢結(jié)果上報至所述監(jiān)視節(jié)點。
進一步的,所述異常心跳查詢結(jié)果至少包括上報異常心跳查詢結(jié)果的所述數(shù)據(jù)節(jié)點的ID值和心跳查詢失敗的異常數(shù)據(jù)節(jié)點的ID值。
進一步的,所述監(jiān)視節(jié)點根據(jù)所述異常心跳查詢結(jié)果和上報所述異常心跳查詢結(jié)果的所述數(shù)據(jù)節(jié)點總個數(shù)確定故障節(jié)點,其中,所述上報所述異常心跳查詢結(jié)果的所述數(shù)據(jù)節(jié)點均有同一相鄰數(shù)據(jù)節(jié)點的步驟具體為:
所述監(jiān)視節(jié)點統(tǒng)計所述異常心跳查詢結(jié)果中,所述異常數(shù)據(jù)節(jié)點被其不同相鄰數(shù)據(jù)節(jié)點上報的相鄰數(shù)據(jù)節(jié)點個數(shù),當(dāng)所述相鄰數(shù)據(jù)節(jié)點個數(shù)達到設(shè)定個數(shù)并且小于所述異常數(shù)據(jù)節(jié)點的相鄰數(shù)據(jù)節(jié)點總個數(shù)時,所述監(jiān)視節(jié)點向所述異常數(shù)據(jù)節(jié)點發(fā)起故障查詢,判斷所述異常數(shù)據(jù)節(jié)點是否為所述故障節(jié)點;
所述監(jiān)視節(jié)點統(tǒng)計所述異常心跳查詢結(jié)果中,所述異常數(shù)據(jù)節(jié)點被其不同相鄰數(shù)據(jù)節(jié)點上報的相鄰數(shù)據(jù)節(jié)點個數(shù),當(dāng)所述相鄰數(shù)據(jù)節(jié)點個數(shù)等于所述異常數(shù)據(jù)節(jié)點的相鄰數(shù)據(jù)節(jié)點總個數(shù)時,判斷所述異常數(shù)據(jù)節(jié)點為所述故障節(jié)點。
另一方面,提供了一種心跳檢測系統(tǒng),包括監(jiān)視節(jié)點和數(shù)據(jù)節(jié)點,所述監(jiān)視節(jié)點包括拓撲模塊、配置模塊、判斷模塊;所述數(shù)據(jù)節(jié)點包括查詢模塊、結(jié)果生成模塊;其中,
所述拓撲模塊,用于預(yù)生成多邊形拓撲結(jié)構(gòu);
所述配置模塊,用于根據(jù)所述多邊形拓撲結(jié)構(gòu)創(chuàng)建配置文件,并將所述配置文件發(fā)送至所述數(shù)據(jù)節(jié)點;
所述查詢模塊,用于根據(jù)所述配置文件,對其相鄰數(shù)據(jù)節(jié)點周期性進行心跳查詢;
所述結(jié)果生成模塊,用于將生成的異常心跳查詢結(jié)果上報至所述監(jiān)視節(jié)點;
所述判斷模塊,用于根據(jù)所述異常心跳查詢結(jié)果和上報所述異常心跳查詢結(jié)果的所述數(shù)據(jù)節(jié)點總個數(shù)確定故障節(jié)點,其中,所述上報所述異常心跳查詢結(jié)果的所述數(shù)據(jù)節(jié)點均有同一相鄰數(shù)據(jù)節(jié)點。
進一步的,所述配置模塊還用于將所述多邊形拓撲結(jié)構(gòu)的頂點節(jié)點節(jié)點的ID值分配至所述數(shù)據(jù)節(jié)點,并根據(jù)所述分配至所述數(shù)據(jù)節(jié)點的ID值及所述多邊形拓撲結(jié)構(gòu)的所述頂點節(jié)點間的相鄰關(guān)系,創(chuàng)建所述配置文件。
進一步的,所述多邊形拓撲結(jié)構(gòu)為蜂巢六邊形拓撲結(jié)構(gòu)。
進一步的,所述配置文件至少包括心跳查詢間隔時間、應(yīng)答超時時間、心跳查詢方式、相鄰數(shù)據(jù)節(jié)點的所述ID值;
所述查詢模塊還用于每隔所述心跳查詢間隔時間,按照所述心跳查詢方式對所述配置文件中所述相鄰數(shù)據(jù)節(jié)點進行心跳查詢;
所述結(jié)果生成模塊,還用于在所述應(yīng)答超時時間內(nèi),所述查詢模塊對所述配置文件中所述相鄰數(shù)據(jù)節(jié)點心跳查詢失敗時,生成異常心跳查詢結(jié)果。
進一步的,所述異常心跳查詢結(jié)果至少包括上報異常心跳查詢結(jié)果的所述數(shù)據(jù)節(jié)點的ID值和心跳查詢失敗的異常數(shù)據(jù)節(jié)點的ID值。
進一步的,所述判斷模塊還用于:
統(tǒng)計所述異常心跳查詢結(jié)果中,所述異常數(shù)據(jù)節(jié)點被其不同相鄰數(shù)據(jù)節(jié)點上報的相鄰數(shù)據(jù)節(jié)點個數(shù),當(dāng)所述相鄰數(shù)據(jù)節(jié)點個數(shù)達到設(shè)定個數(shù)并且小于所述異常數(shù)據(jù)節(jié)點的相鄰數(shù)據(jù)節(jié)點總個數(shù)時,向所述異常數(shù)據(jù)節(jié)點發(fā)起故障查詢,判斷所述異常數(shù)據(jù)節(jié)點是否為所述故障節(jié)點;
統(tǒng)計所述異常心跳查詢結(jié)果中,所述異常數(shù)據(jù)節(jié)點被其不同相鄰數(shù)據(jù)節(jié)點上報的相鄰數(shù)據(jù)節(jié)點個數(shù),當(dāng)所述相鄰數(shù)據(jù)節(jié)點個數(shù)等于所述異常數(shù)據(jù)節(jié)點的相鄰數(shù)據(jù)節(jié)點總個數(shù)時,判斷所述異常數(shù)據(jù)節(jié)點為所述故障節(jié)點。
再一方面,提供了一種心跳檢測裝置,包括監(jiān)視節(jié)點,所述監(jiān)視節(jié)點包括:
拓撲模塊,用于預(yù)生成多邊形拓撲結(jié)構(gòu);
配置模塊,用于根據(jù)所述多邊形拓撲結(jié)構(gòu)創(chuàng)建配置文件,并將所述配置文件發(fā)送至數(shù)據(jù)節(jié)點;
判斷模塊,用于根據(jù)所述數(shù)據(jù)節(jié)點執(zhí)行所述配置文件后上報的異常心跳查詢結(jié)果以及上報所述異常心跳查詢結(jié)果的所述數(shù)據(jù)節(jié)點總個數(shù)確定故障節(jié)點,其中,所述上報所述異常心跳查詢結(jié)果的所述數(shù)據(jù)節(jié)點均有同一相鄰數(shù)據(jù)節(jié)點。
進一步的,所述多邊形拓撲結(jié)構(gòu)為蜂巢六邊形拓撲結(jié)構(gòu)。
進一步的,所述判斷模塊還用于:
統(tǒng)計所述異常心跳查詢結(jié)果中,所述異常數(shù)據(jù)節(jié)點被其不同相鄰數(shù)據(jù)節(jié)點上報的相鄰數(shù)據(jù)節(jié)點個數(shù),當(dāng)所述相鄰數(shù)據(jù)節(jié)點個數(shù)達到設(shè)定個數(shù)并且小于所述異常數(shù)據(jù)節(jié)點的相鄰數(shù)據(jù)節(jié)點總個數(shù)時,向所述異常數(shù)據(jù)節(jié)點發(fā)起故障查詢,判斷所述異常數(shù)據(jù)節(jié)點是否為所述故障節(jié)點;
統(tǒng)計所述異常心跳查詢結(jié)果中,所述異常數(shù)據(jù)節(jié)點被其不同相鄰數(shù)據(jù)節(jié)點上報的相鄰數(shù)據(jù)節(jié)點個數(shù),當(dāng)所述相鄰數(shù)據(jù)節(jié)點個數(shù)等于所述異常數(shù)據(jù)節(jié)點的相鄰數(shù)據(jù)節(jié)點總個數(shù)時,判斷所述異常數(shù)據(jù)節(jié)點為所述故障節(jié)點。
本發(fā)明實施例提供的技術(shù)方案帶來的有益效果是:
本發(fā)明通過數(shù)據(jù)節(jié)點與其相鄰數(shù)據(jù)節(jié)點互相進行心跳檢測,進而得到異常心跳查詢結(jié)果并上報至監(jiān)視節(jié)點,監(jiān)視節(jié)點根據(jù)異常心跳查詢結(jié)果以及上報同一異常數(shù)據(jù)節(jié)點的相鄰數(shù)據(jù)節(jié)點個數(shù)確定故障節(jié)點,進而大幅度降低監(jiān)視節(jié)點的負載,同時,由于每個數(shù)據(jù)節(jié)點的相鄰數(shù)據(jù)節(jié)點很少,進而每個數(shù)據(jù)節(jié)點的負載都極低,提升了數(shù)據(jù)節(jié)點間心跳檢測的穩(wěn)定性和準確性。
附圖說明
為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實施例一提供的集群心跳檢測方法的流程圖;
圖2是本發(fā)明實施例一中步驟S101的詳細子步驟流程圖;
圖3是本發(fā)明實施例一提供的蜂巢六邊形拓撲結(jié)構(gòu)示意圖;
圖4是本發(fā)明實施例一中步驟S102的詳細子步驟流程圖;
圖5是本發(fā)明實施例一中步驟S103的詳細子步驟流程圖;
圖6是本發(fā)明實施例二提供的心跳檢測系統(tǒng)的結(jié)構(gòu)示意圖;
圖7是本發(fā)明實施例三提供的心跳檢測裝置的結(jié)構(gòu)示意圖。
具體實施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明實施方式作進一步地詳細描述。
實施例一
本發(fā)明實施例提供了一種集群心跳檢測方法,參見圖1,包括如下步驟:
S101:監(jiān)視節(jié)點預(yù)生成多邊形拓撲結(jié)構(gòu),并根據(jù)所述多邊形拓撲結(jié)構(gòu)創(chuàng)建配置文件,并將所述配置文件發(fā)送至數(shù)據(jù)節(jié)點。
在本實施例中,該監(jiān)視節(jié)點是一個特殊的數(shù)據(jù)節(jié)點,能夠與所有的數(shù)據(jù)節(jié)點進行通信,包括心跳通信。
在本實施例中,所述根據(jù)所述多邊形拓撲結(jié)構(gòu)創(chuàng)建配置文件的步驟具體包括S1011-S1012兩個子步驟,如圖2所示。
S1011:監(jiān)視節(jié)點將所述多邊形拓撲結(jié)構(gòu)的頂點節(jié)點的ID(Identity,身份)值分配至所述數(shù)據(jù)節(jié)點。
在本實施例中,該多邊形拓撲結(jié)構(gòu)的優(yōu)選實施方式是蜂巢六邊形拓撲結(jié)構(gòu),每一個子結(jié)構(gòu)為六邊形結(jié)構(gòu),具有六個頂點節(jié)點。由于蜂巢六邊形拓撲結(jié)構(gòu)的每一個頂點節(jié)點最多有三個相鄰頂點節(jié)點,并且結(jié)構(gòu)穩(wěn)定,排列整齊,便于按照頂點節(jié)點的相鄰關(guān)系創(chuàng)建配置文件,這就保證了每一個數(shù)據(jù)節(jié)點最多只檢測三個相鄰數(shù)據(jù)節(jié)點,每一個數(shù)據(jù)節(jié)點的檢測負載極低,提升了數(shù)據(jù)節(jié)點間心跳檢測的穩(wěn)定性和準確性。上述多邊形拓撲結(jié)構(gòu)也可以是三邊形拓撲結(jié)構(gòu)、五邊形拓撲結(jié)構(gòu)、七邊形拓撲結(jié)構(gòu),這些拓撲結(jié)構(gòu)也能夠完成數(shù)據(jù)節(jié)點間心跳檢測,例如三邊形拓撲結(jié)構(gòu),其每一個頂點節(jié)點最多有六個相鄰頂點節(jié)點,進而每一個數(shù)據(jù)節(jié)點最多只檢測六個相鄰數(shù)據(jù)節(jié)點。針對上述多邊形拓撲結(jié)構(gòu)的具體結(jié)構(gòu),在此不做限定。
待生成該多邊形拓撲結(jié)構(gòu)后,監(jiān)視節(jié)點接受數(shù)據(jù)節(jié)點注冊,將該多邊形拓撲結(jié)構(gòu)頂點節(jié)點的ID值分配至每一個數(shù)據(jù)節(jié)點,該ID值具有唯一性,ID值可以是一串?dāng)?shù)字,也可以是一串字母,對其形式不做限定,例如該多邊形拓撲結(jié)構(gòu)某一個頂點節(jié)點的ID值為100001。
參見圖3,多邊形拓撲結(jié)構(gòu)為蜂巢六邊形拓撲結(jié)構(gòu),在蜂巢六邊形拓撲結(jié)構(gòu)中,監(jiān)視節(jié)點示例舉出A-H共八個數(shù)據(jù)節(jié)點所分配的頂點節(jié)點位置,當(dāng)然,其他未標(biāo)明字母的頂點節(jié)點也分配有數(shù)據(jù)節(jié)點。
S1012:監(jiān)視節(jié)點根據(jù)分配至所述數(shù)據(jù)節(jié)點的ID值及所述多邊形拓撲結(jié)構(gòu)的所述頂點節(jié)點間的相鄰關(guān)系,創(chuàng)建所述配置文件。
在本實施例中,在該多邊形拓撲結(jié)構(gòu)中,每一個頂點節(jié)點均有若干個相鄰的頂點節(jié)點,也就是說,每一個頂點節(jié)點對應(yīng)的數(shù)據(jù)節(jié)點均有若干個相鄰的數(shù)據(jù)節(jié)點,這些相鄰的數(shù)據(jù)節(jié)點,稱為該數(shù)據(jù)節(jié)點的相鄰數(shù)據(jù)節(jié)點。例如當(dāng)該多邊形拓撲結(jié)構(gòu)為蜂巢六邊形拓撲結(jié)構(gòu)時,每一個數(shù)據(jù)節(jié)點都和三個或者兩個相鄰數(shù)據(jù)節(jié)點,監(jiān)視節(jié)點根據(jù)頂點節(jié)點間的相鄰關(guān)系,得出這些頂點節(jié)點對應(yīng)的數(shù)據(jù)節(jié)點的相鄰關(guān)系,進而創(chuàng)建配置文件。
在本實施例中,所述配置文件至少包括心跳查詢間隔時間、應(yīng)答超時時間、心跳查詢方式、相鄰數(shù)據(jù)節(jié)點的所述ID值。
具體而言,該配置文件規(guī)定了數(shù)據(jù)節(jié)點間相互進行心跳查詢的具體查詢方式。由于心跳查詢是周期性活動,心跳查詢間隔時間規(guī)定了數(shù)據(jù)節(jié)點周期性進行心跳查詢的間隔時間,例如,如果系統(tǒng)性能要求較高,則心跳查詢間隔時間設(shè)置為6-9s,系統(tǒng)性能要求一般時,心跳查詢間隔時間設(shè)置為30-40s。應(yīng)答超時時間為心跳查詢的目標(biāo)數(shù)據(jù)節(jié)點的應(yīng)答時間,如果目標(biāo)數(shù)據(jù)節(jié)點在應(yīng)答超時時間內(nèi)返回心跳信息,則此次心跳查詢成功,如果目標(biāo)數(shù)據(jù)節(jié)點在應(yīng)答超時時間內(nèi)未返回心跳信息,則此次心跳查詢失敗。心跳查詢方式為數(shù)據(jù)節(jié)點間心跳信息的發(fā)送和接收方式,其規(guī)定了傳輸方式的類型,例如傳輸控制協(xié)議(Transmission Control Protocol,TCP)傳輸方式,也規(guī)定了數(shù)據(jù)節(jié)點間心跳信息發(fā)送接收的具體端口。相鄰數(shù)據(jù)節(jié)點的ID值為,和每一個數(shù)據(jù)節(jié)點相鄰的數(shù)據(jù)節(jié)點的ID值,同時,這些相鄰數(shù)據(jù)節(jié)點也是該數(shù)據(jù)節(jié)點心跳查詢的目標(biāo)數(shù)據(jù)節(jié)點。
進一步的,監(jiān)視節(jié)點預(yù)生成多邊形拓撲結(jié)構(gòu),并根據(jù)所述多邊形拓撲結(jié)構(gòu)創(chuàng)建配置文件,其創(chuàng)建方式可以根據(jù)每個數(shù)據(jù)節(jié)點的具體心跳查詢方式及其相鄰數(shù)據(jù)節(jié)點的所述ID值,為每個數(shù)據(jù)節(jié)點創(chuàng)建相應(yīng)的配置文件,并將該配置文件發(fā)送至對應(yīng)的數(shù)據(jù)節(jié)點,此時,每一個配置文件的大小會很小,進而該配置文件很容易進行更新。
上述監(jiān)視節(jié)點預(yù)生成多邊形拓撲結(jié)構(gòu),并根據(jù)所述多邊形拓撲結(jié)構(gòu)創(chuàng)建配置文件,還可以通過創(chuàng)建統(tǒng)一的配置文件的方式,此時,該配置文件包含所有數(shù)據(jù)節(jié)點對應(yīng)的心跳查詢方式,并將該配置文件發(fā)送至所有的數(shù)據(jù)節(jié)點,很容易得出,該配置文件的大小會很大,進而對該配置文件更新時,會占用更多的資源。
S102:所述數(shù)據(jù)節(jié)點根據(jù)所述配置文件,對其相鄰數(shù)據(jù)節(jié)點周期性進行心跳查詢,并將生成的異常心跳查詢結(jié)果上報至所述監(jiān)視節(jié)點。
在本實施例中,所述數(shù)據(jù)節(jié)點根據(jù)所述配置文件,對相鄰數(shù)據(jù)節(jié)點周期性進行心跳查詢,并將生成的異常心跳查詢結(jié)果上報至所述監(jiān)視節(jié)點的步驟S102具體包括S1021-S1022兩個子步驟,如圖4所示。
S1021:所述數(shù)據(jù)節(jié)點每隔所述心跳查詢間隔時間,按照所述心跳查詢方式對所述配置文件中所述相鄰數(shù)據(jù)節(jié)點進行心跳查詢。
在本實施例中,該數(shù)據(jù)節(jié)點對其相鄰數(shù)據(jù)節(jié)點發(fā)起心跳查詢,該相鄰數(shù)據(jù)節(jié)點接收到該心跳查詢后,在應(yīng)答超時時間內(nèi)做出心跳應(yīng)答,該數(shù)據(jù)節(jié)點接收到心跳應(yīng)答后,說明該相鄰節(jié)點正常在線,因此不需要報告任何信息,此時,進入休眠狀態(tài),等待下一個心跳查詢間隔時間到來,重新發(fā)起心跳請求。同時,該數(shù)據(jù)節(jié)點也會作為其相鄰節(jié)點進行心跳查詢的目標(biāo)數(shù)據(jù)節(jié)點,該數(shù)據(jù)節(jié)點需要在應(yīng)答超時時間內(nèi)做出心跳應(yīng)答,來表明自身正常在線。
S1022:如果所述數(shù)據(jù)節(jié)點在所述應(yīng)答超時時間內(nèi),對所述配置文件中所述相鄰數(shù)據(jù)節(jié)點心跳查詢失敗,則生成異常心跳查詢結(jié)果,并將所述異常心跳查詢結(jié)果上報至所述監(jiān)視節(jié)點。
在本實施例中,如果該數(shù)據(jù)節(jié)點對其相鄰數(shù)據(jù)節(jié)點發(fā)起心跳查詢,未在應(yīng)答超時時間內(nèi)接收到心跳應(yīng)答,表明其相鄰數(shù)據(jù)節(jié)點未在應(yīng)答超時時間內(nèi)做出心跳應(yīng)答,即該相鄰節(jié)點成為異常數(shù)據(jù)節(jié)點,可能已掉線,進而該數(shù)據(jù)節(jié)點對其相鄰數(shù)據(jù)節(jié)點心跳查詢失敗,此時,生成異常心跳查詢結(jié)果。
進一步的,當(dāng)下一心跳查詢間隔時間到來,上述該數(shù)據(jù)節(jié)點繼續(xù)對其相鄰數(shù)據(jù)節(jié)點發(fā)起心跳查詢,如果仍未在應(yīng)答超時時間內(nèi)接收到心跳應(yīng)答,此時,有多種處理方式。例如,數(shù)據(jù)節(jié)點可以繼續(xù)生成異常心跳查詢結(jié)果,上報至監(jiān)視節(jié)點,進而該異常數(shù)據(jù)節(jié)點被上報多次,但是,在每一個心跳查詢間隔時間內(nèi),該異常數(shù)據(jù)節(jié)點上報次數(shù)至多一次。再例如,數(shù)據(jù)節(jié)點停止生成異常心跳查詢結(jié)果,或者只生成異常心跳查詢結(jié)果,不上報監(jiān)視節(jié)點,此時,該異常數(shù)據(jù)節(jié)點上報次數(shù)僅為一次,當(dāng)數(shù)據(jù)節(jié)點檢測到該異常數(shù)據(jù)節(jié)點中途暫時恢復(fù)正常又繼續(xù)異常時,該數(shù)據(jù)節(jié)點再次上報異常心跳查詢結(jié)果。
進一步的,當(dāng)該異常數(shù)據(jù)節(jié)點能夠做出心跳應(yīng)答,表明該異常數(shù)據(jù)節(jié)點恢復(fù)正常,此時,該異常數(shù)據(jù)節(jié)點主動上報心跳信息,表明自身正常在線。
在本實施例中,所述異常心跳查詢結(jié)果至少包括上報異常心跳查詢結(jié)果的所述數(shù)據(jù)節(jié)點的ID值和心跳查詢失敗的異常數(shù)據(jù)節(jié)點的ID值。具體而言,數(shù)據(jù)節(jié)點在查詢到異常數(shù)據(jù)節(jié)點時,將查詢到的異常數(shù)據(jù)節(jié)點的ID值加入到異常心跳查詢結(jié)果中,還可以將自身的ID值加入到異常心跳查詢結(jié)果中,便于對該異常數(shù)據(jù)節(jié)點進行定位和上報次數(shù)統(tǒng)計。
需要注意的是,上述異常數(shù)據(jù)節(jié)點還是其他數(shù)據(jù)節(jié)點的相鄰節(jié)點,此時,其他數(shù)據(jù)節(jié)點同樣會發(fā)現(xiàn)該異常數(shù)據(jù)節(jié)點,并生成包括該異常數(shù)據(jù)節(jié)點的ID值的異常心跳查詢結(jié)果。
通過數(shù)據(jù)節(jié)點與其相鄰數(shù)據(jù)節(jié)點互相進行心跳檢測,能夠大幅度降低監(jiān)視節(jié)點的負載,同時,由于每個數(shù)據(jù)節(jié)點的相鄰數(shù)據(jù)節(jié)點很少,進而每個數(shù)據(jù)節(jié)點的負載都極低,提升了數(shù)據(jù)節(jié)點間心跳檢測的穩(wěn)定性和準確性。
S103:所述監(jiān)視節(jié)點根據(jù)所述異常心跳查詢結(jié)果和上報所述異常心跳查詢結(jié)果的所述數(shù)據(jù)節(jié)點總個數(shù)確定故障節(jié)點,其中,所述上報所述異常心跳查詢結(jié)果的所述數(shù)據(jù)節(jié)點均有同一相鄰數(shù)據(jù)節(jié)點。
在本實施例中,所有查詢到異常數(shù)據(jù)節(jié)點的數(shù)據(jù)節(jié)點,均會將各自生成的異常心跳查詢結(jié)果上報至監(jiān)視節(jié)點。本步驟中,上報所述異常心跳查詢結(jié)果的所述數(shù)據(jù)節(jié)點均有同一相鄰數(shù)據(jù)節(jié)點,也就是說,上報所述異常心跳查詢結(jié)果的所述數(shù)據(jù)節(jié)點,均為異常數(shù)據(jù)節(jié)點的相鄰數(shù)據(jù)節(jié)點,只有異常數(shù)據(jù)節(jié)點的所有相鄰數(shù)據(jù)節(jié)點均上報該異常數(shù)據(jù)節(jié)點時,監(jiān)視節(jié)點確定該異常數(shù)據(jù)節(jié)點為故障節(jié)點。
在本實施例中,所述監(jiān)視節(jié)點根據(jù)所述異常心跳查詢結(jié)果和上報所述異常心跳查詢結(jié)果的所述數(shù)據(jù)節(jié)點總個數(shù)確定故障節(jié)點,其中,所述上報所述異常心跳查詢結(jié)果的所述數(shù)據(jù)節(jié)點均有同一相鄰數(shù)據(jù)節(jié)點的步驟S103具體包括S1031-S1032兩個子步驟,如圖5所示。
S1031:所述監(jiān)視節(jié)點統(tǒng)計所述異常心跳查詢結(jié)果中,所述異常數(shù)據(jù)節(jié)點被其不同相鄰數(shù)據(jù)節(jié)點上報的相鄰數(shù)據(jù)節(jié)點個數(shù),當(dāng)所述相鄰數(shù)據(jù)節(jié)點個數(shù)達到設(shè)定個數(shù)并且小于所述異常數(shù)據(jù)節(jié)點的相鄰數(shù)據(jù)節(jié)點總個數(shù)時,所述監(jiān)視節(jié)點向所述異常數(shù)據(jù)節(jié)點發(fā)起故障查詢,判斷所述異常數(shù)據(jù)節(jié)點是否為所述故障節(jié)點。
在本實施例中,判斷故障節(jié)點的規(guī)則是,當(dāng)數(shù)據(jù)節(jié)點被其不同相鄰數(shù)據(jù)節(jié)點上報時,該數(shù)據(jù)節(jié)點成為異常數(shù)據(jù)節(jié)點,當(dāng)上報該異常數(shù)據(jù)節(jié)點的相鄰數(shù)據(jù)節(jié)點個數(shù)達到設(shè)定個數(shù)或者等于相鄰數(shù)據(jù)節(jié)點總個數(shù)時,進行故障確定。例如,當(dāng)該異常數(shù)據(jù)節(jié)點的相鄰數(shù)據(jù)節(jié)點個數(shù)達到相鄰數(shù)據(jù)節(jié)點總個數(shù)的一半,即設(shè)定個數(shù),由于不是所有的相鄰數(shù)據(jù)節(jié)點均上報該異常數(shù)據(jù)節(jié)點,此時,監(jiān)視節(jié)點主動向該異常數(shù)據(jù)節(jié)點發(fā)起故障查詢,進而確定該異常數(shù)據(jù)節(jié)點是否正常在線,若不在線,則說明該異常數(shù)據(jù)節(jié)點為故障節(jié)點。
再次參見圖3,在蜂巢六邊形拓撲結(jié)構(gòu)中,假設(shè)異常數(shù)據(jù)節(jié)點為數(shù)據(jù)節(jié)點C,由于數(shù)據(jù)節(jié)點C只有數(shù)據(jù)節(jié)點A、D、H三個相鄰數(shù)據(jù)節(jié)點。當(dāng)數(shù)據(jù)節(jié)點C異常時,數(shù)據(jù)節(jié)點A、D、H均檢測到數(shù)據(jù)節(jié)點C是異常數(shù)據(jù)節(jié)點,并均上報至監(jiān)視節(jié)點,由于某種原因,監(jiān)視節(jié)點只接收到數(shù)據(jù)節(jié)點A、D的異常心跳查詢結(jié)果,此時,監(jiān)視節(jié)點統(tǒng)計得到,數(shù)據(jù)節(jié)點C被其2個不同的相鄰數(shù)據(jù)節(jié)點上報,超過數(shù)據(jù)節(jié)點C相鄰數(shù)據(jù)節(jié)點總個數(shù)3的一半,此時,監(jiān)視節(jié)點對數(shù)據(jù)節(jié)點A進行故障查詢。
需要注意的是,上述設(shè)定個數(shù)是可以設(shè)置的,設(shè)定原則是,只有當(dāng)異常數(shù)據(jù)節(jié)點被大多數(shù)其相鄰數(shù)據(jù)節(jié)點上報時,監(jiān)視節(jié)點才會介入判斷該異常數(shù)據(jù)節(jié)點是否為故障節(jié)點,有利于節(jié)約系統(tǒng)資源。例如,當(dāng)拓撲結(jié)構(gòu)為蜂巢六邊形拓撲結(jié)構(gòu)時,設(shè)定個數(shù)可以設(shè)定為相鄰數(shù)據(jù)節(jié)點總個數(shù)一半;當(dāng)拓撲結(jié)構(gòu)為三角形拓撲結(jié)構(gòu)時,由于每個數(shù)據(jù)節(jié)點最多會有六個相鄰數(shù)據(jù)節(jié)點,設(shè)定個數(shù)可以設(shè)定為相鄰數(shù)據(jù)節(jié)點總個數(shù)的三分之二。
S1032:所述監(jiān)視節(jié)點統(tǒng)計所述異常心跳查詢結(jié)果中,所述異常數(shù)據(jù)節(jié)點被其不同相鄰數(shù)據(jù)節(jié)點上報的相鄰數(shù)據(jù)節(jié)點個數(shù),當(dāng)所述相鄰數(shù)據(jù)節(jié)點個數(shù)等于所述異常數(shù)據(jù)節(jié)點的相鄰數(shù)據(jù)節(jié)點總個數(shù)時,判斷所述異常數(shù)據(jù)節(jié)點為所述故障節(jié)點。
在本實施例中,當(dāng)異常數(shù)據(jù)節(jié)點被其所有正常在線的相鄰數(shù)據(jù)節(jié)點上報時,即表明該異常數(shù)據(jù)節(jié)點故障,該異常數(shù)據(jù)節(jié)點即為故障節(jié)點。
需要注意的是,上述相鄰數(shù)據(jù)節(jié)點的總個數(shù),是正常在線的相鄰數(shù)據(jù)節(jié)點的總個數(shù)。
通過對異常心跳查詢結(jié)果的進一步篩選,提升了確定故障節(jié)點的準確性,同時縮小了由監(jiān)視節(jié)點來進一步判斷異常節(jié)點是否為故障節(jié)點的范圍,節(jié)約了系統(tǒng)資源。
實施例二
參見圖6,本發(fā)明實施例提供了一種心跳檢測系統(tǒng),可以執(zhí)行實施例一中提供的集群心跳檢測方法,包括監(jiān)視節(jié)點21和數(shù)據(jù)節(jié)點22,其中,監(jiān)視節(jié)點21是一個特殊的數(shù)據(jù)節(jié)點22,其能夠與所有的數(shù)據(jù)節(jié)點22進行通信,包括心跳通信。在集群系統(tǒng)中,監(jiān)視節(jié)點21和數(shù)據(jù)節(jié)點22,均是集群中的一臺主機。在服務(wù)監(jiān)控系統(tǒng)中,監(jiān)視節(jié)點21和數(shù)據(jù)節(jié)點22,均是系統(tǒng)中的一個進程。
在本實施例中,監(jiān)視節(jié)點21包括拓撲模塊211、配置模塊212、判斷模塊213;數(shù)據(jù)節(jié)點22包括查詢模塊221、結(jié)果生成模塊222。
拓撲模塊211,用于預(yù)生成多邊形拓撲結(jié)構(gòu)。
配置模塊212,用于根據(jù)所述多邊形拓撲結(jié)構(gòu)創(chuàng)建配置文件,并將所述配置文件發(fā)送至數(shù)據(jù)節(jié)點22。
查詢模塊221,用于根據(jù)所述配置文件,對相鄰數(shù)據(jù)節(jié)點周期性進行心跳查詢。
結(jié)果生成模塊222,用于將生成的異常心跳查詢結(jié)果上報至所述監(jiān)視節(jié)點21。
判斷模塊213,用于根據(jù)所述異常心跳查詢結(jié)果和上報所述異常心跳查詢結(jié)果的所述數(shù)據(jù)節(jié)點總個數(shù)確定故障節(jié)點,其中,所述上報所述異常心跳查詢結(jié)果的所述數(shù)據(jù)節(jié)點均有同一相鄰數(shù)據(jù)節(jié)點。
在本實施例中,配置模塊212還用于將多邊形拓撲結(jié)構(gòu)的頂點節(jié)點的ID值分配至所述數(shù)據(jù)節(jié)點,并根據(jù)分配至所述數(shù)據(jù)節(jié)點的ID值及所述多邊形拓撲結(jié)構(gòu)的所述頂點節(jié)點間的相鄰關(guān)系,創(chuàng)建配置文件,并將所述配置文件發(fā)送至數(shù)據(jù)節(jié)點22。
上述多邊形拓撲結(jié)構(gòu)為蜂巢六邊形拓撲結(jié)構(gòu),每一個子結(jié)構(gòu)為六邊形結(jié)構(gòu),具有六個頂點節(jié)點。上述多邊形拓撲結(jié)構(gòu)也可以是三邊形拓撲結(jié)構(gòu)、五邊形拓撲結(jié)構(gòu)、七邊形拓撲結(jié)構(gòu),在此不做限定。待生成該多邊形拓撲結(jié)構(gòu)后,監(jiān)視節(jié)點21接受數(shù)據(jù)節(jié)點22注冊,將該多邊形拓撲結(jié)構(gòu)頂點節(jié)點的ID值分配至每一個數(shù)據(jù)節(jié)點22。
在本實施例中,所述配置文件至少包括心跳查詢間隔時間、應(yīng)答超時時間、心跳查詢方式、相鄰數(shù)據(jù)節(jié)點的所述ID值。該配置文件規(guī)定了數(shù)據(jù)節(jié)點22間相互進行心跳查詢的具體查詢方式。
在本實施例中,查詢模塊221還用于每隔所述心跳查詢間隔時間,按照所述心跳查詢方式對所述配置文件中所述相鄰數(shù)據(jù)節(jié)點進行心跳查詢。
在本實施例中,結(jié)果生成模塊222還用于在所述應(yīng)答超時時間內(nèi),所述查詢模塊221對所述配置文件中所述相鄰數(shù)據(jù)節(jié)點心跳查詢失敗時,生成異常心跳查詢結(jié)果。
在本實施例中,所述異常心跳查詢結(jié)果至少包括上報異常心跳查詢結(jié)果的所述數(shù)據(jù)節(jié)點的ID值和心跳查詢失敗的異常數(shù)據(jù)節(jié)點的ID值。
通過數(shù)據(jù)節(jié)點22與其相鄰數(shù)據(jù)節(jié)點互相進行心跳檢測,能夠大幅度降低監(jiān)視節(jié)點21的負載,同時,由于每個數(shù)據(jù)節(jié)點22的相鄰數(shù)據(jù)節(jié)點很少,進而每個數(shù)據(jù)節(jié)點22的負載都極低,提升了數(shù)據(jù)節(jié)點22間心跳檢測的穩(wěn)定性和準確性。
在本實施例中,所述判斷模塊213還用于,統(tǒng)計所述異常心跳查詢結(jié)果中,所述異常數(shù)據(jù)節(jié)點被其不同相鄰數(shù)據(jù)節(jié)點上報的相鄰數(shù)據(jù)節(jié)點個數(shù),當(dāng)所述相鄰數(shù)據(jù)節(jié)點個數(shù)達到設(shè)定個數(shù)并且小于所述異常數(shù)據(jù)節(jié)點的相鄰數(shù)據(jù)節(jié)點總個數(shù)時,向所述異常數(shù)據(jù)節(jié)點發(fā)起故障查詢,判斷所述異常數(shù)據(jù)節(jié)點是否為所述故障節(jié)點。
在本實施例中,所述判斷模塊213還用于,統(tǒng)計所述異常心跳查詢結(jié)果中,所述異常數(shù)據(jù)節(jié)點被其不同相鄰數(shù)據(jù)節(jié)點上報的相鄰數(shù)據(jù)節(jié)點個數(shù),當(dāng)所述相鄰數(shù)據(jù)節(jié)點個數(shù)等于所述異常數(shù)據(jù)節(jié)點的相鄰數(shù)據(jù)節(jié)點總個數(shù)時,判斷所述異常數(shù)據(jù)節(jié)點為所述故障節(jié)點。
通過對異常心跳查詢結(jié)果的進一步篩選,提升了確定故障節(jié)點的準確性,同時縮小了由監(jiān)視節(jié)點來進一步判斷異常節(jié)點是否為故障節(jié)點的范圍,節(jié)約了系統(tǒng)資源。
實施例三
參見圖7,本發(fā)明實施例提供了一種心跳檢測裝置,包括監(jiān)視節(jié)點31,所述監(jiān)視節(jié)點31包括:
拓撲模塊311,用于預(yù)生成多邊形拓撲結(jié)構(gòu);
配置模塊312,用于根據(jù)多邊形拓撲結(jié)構(gòu)創(chuàng)建配置文件,并將所述配置文件發(fā)送至數(shù)據(jù)節(jié)點;
判斷模塊313,用于根據(jù)所述數(shù)據(jù)節(jié)點執(zhí)行所述配置文件后上報的異常心跳查詢結(jié)果以及上報所述異常心跳查詢結(jié)果的所述數(shù)據(jù)節(jié)點總個數(shù)確定故障節(jié)點,其中,所述上報所述異常心跳查詢結(jié)果的所述數(shù)據(jù)節(jié)點均有同一相鄰數(shù)據(jù)節(jié)點。
現(xiàn)有技術(shù)中,監(jiān)視節(jié)點31需要與每一個數(shù)據(jù)節(jié)點進行心跳通信,來對每一個數(shù)據(jù)節(jié)點進行檢測,在本實施例中,監(jiān)視節(jié)點31采用以下方式對數(shù)據(jù)節(jié)點進行心跳檢測。監(jiān)視節(jié)點31通過接收數(shù)據(jù)節(jié)點提供的異常心跳查詢結(jié)果,對篩選出來的異常數(shù)據(jù)節(jié)點重點檢測,進而在異常數(shù)據(jù)節(jié)點中確定最終的故障節(jié)點,這就縮小了檢測范圍,大大降低了監(jiān)視節(jié)點31的負載。
在本實施例中,多邊形拓撲結(jié)構(gòu)為蜂巢六邊形拓撲結(jié)構(gòu)。
在本實施例中,判斷模塊313還用于統(tǒng)計所述異常心跳查詢結(jié)果中,所述異常數(shù)據(jù)節(jié)點被其不同相鄰數(shù)據(jù)節(jié)點上報的相鄰數(shù)據(jù)節(jié)點個數(shù),當(dāng)所述相鄰數(shù)據(jù)節(jié)點個數(shù)達到設(shè)定個數(shù)并且小于所述異常數(shù)據(jù)節(jié)點的相鄰數(shù)據(jù)節(jié)點總個數(shù)時,向所述異常數(shù)據(jù)節(jié)點發(fā)起故障查詢,判斷所述異常數(shù)據(jù)節(jié)點是否為所述故障節(jié)點。
在本實施例中,判斷模塊313還用于統(tǒng)計所述異常心跳查詢結(jié)果中,所述異常數(shù)據(jù)節(jié)點被其不同相鄰數(shù)據(jù)節(jié)點上報的相鄰數(shù)據(jù)節(jié)點個數(shù),當(dāng)所述相鄰數(shù)據(jù)節(jié)點個數(shù)等于所述異常數(shù)據(jù)節(jié)點的相鄰數(shù)據(jù)節(jié)點總個數(shù)時,判斷所述異常數(shù)據(jù)節(jié)點為所述故障節(jié)點。
上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。
以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上。可以根據(jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性的勞動的情況下,即可以理解并實施。
通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到各實施方式可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當(dāng)然也可以通過硬件。基于這樣的理解,上述技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品可以存儲在計算機可讀存儲介質(zhì)中,如ROM/RAM、磁碟、光盤等,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行各個實施例或者實施例的某些部分所述的方法。
以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。