專利名稱:一種適應(yīng)于大規(guī)模存儲集群的失效檢測方法
技術(shù)領(lǐng)域:
本發(fā)明涉及集群存儲領(lǐng)域,更具體的地說,涉及一種適應(yīng)于大規(guī)模存儲集群的失效檢測方法。
背景技術(shù):
隨著信息化和網(wǎng)絡(luò)技術(shù)的快速發(fā)展,數(shù)據(jù)快速增長,使得人們無法準(zhǔn)確的根據(jù)對數(shù)據(jù)量的預(yù)測和估計來規(guī)劃存儲系統(tǒng)方案,而且存儲硬件隨著技術(shù)的發(fā)展價格在迅速下降,逐步的按需擴(kuò)展存儲節(jié)點(diǎn)有利于提高投資的利用率,企業(yè)需要存儲系統(tǒng)具有按需擴(kuò)展的能力。集群存儲技術(shù)能很好的滿足這種需求,部署大規(guī)模存儲集群可以實(shí)現(xiàn)高性能、高可用性、高擴(kuò)展性。失效檢測是檢測者利用一定的檢測模型及算法對被檢測者進(jìn)行檢測,判斷被檢測者在某時刻是否失效的過程。所以高效的失效檢測方法是實(shí)現(xiàn)集群存儲系統(tǒng)高可用性的基 礎(chǔ),它對運(yùn)行時系統(tǒng)中節(jié)點(diǎn)的存活狀態(tài)進(jìn)行及時和準(zhǔn)確的檢測,從而通知系統(tǒng)采取應(yīng)對措施,如啟用備用節(jié)點(diǎn),狀態(tài)遷移和數(shù)據(jù)恢復(fù)等。然而由于網(wǎng)絡(luò)狀況的多變性,如消息丟失,進(jìn)程負(fù)載過大時導(dǎo)致的消息處理延時過大和緩沖區(qū)溢出等問題,實(shí)現(xiàn)完全高效和正確的失效檢測機(jī)制是相當(dāng)困難的。衡量失效檢測方法的指標(biāo)有準(zhǔn)確性、完整性和擴(kuò)展性。目前流行的2種失效檢測方法=Gossip失效檢測方法和層次式失效檢測方法。Gossip失效檢測的主要思想借鑒了類似病毒的傳播方式。個人信息以及對其他人的看法不被保密并且在其他人之間傳播。這種流言消息的接收者把流言消息再傳播給他相識的人。Gossip失效檢測方法就采用了這種消息傳播機(jī)制,系統(tǒng)中的節(jié)點(diǎn)頻繁地交換著各節(jié)點(diǎn)狀態(tài)的信息。具體實(shí)現(xiàn)過程如下
心跳消息是失效檢測方法的基礎(chǔ)。Gossip協(xié)議是一種概率型的廣播協(xié)議,最開始是用來保持分布式數(shù)據(jù)庫系統(tǒng)的一致性。在該方法中,每個節(jié)點(diǎn)都維護(hù)一個Gossip列表。Gossip列表其實(shí)是系統(tǒng)中節(jié)點(diǎn)的標(biāo)識符以及該節(jié)點(diǎn)的心跳計數(shù)值的列表。每個節(jié)點(diǎn)周期性的將自己的Gossip列表發(fā)送給一個隨機(jī)選擇的節(jié)點(diǎn)。收到Gossip列表的節(jié)點(diǎn)將會把自己的Gossip列表與收到的列表進(jìn)行合并,對于相同節(jié)點(diǎn)標(biāo)識符的項(xiàng),其對應(yīng)的心跳計數(shù)值取兩者的最大值。如果一個節(jié)點(diǎn)的Gossip列表中,另外一個節(jié)點(diǎn)的心跳值在超出一個時間值之后,仍然未更新,將被懷疑為失效。并且如果在L秒后,仍然沒有接收到該節(jié)點(diǎn)的心跳更新信息,就將該成員從列表中刪除,采用這種方法使所有的成員最后都能檢測出失效的成員。該方法對于網(wǎng)絡(luò)造成的負(fù)載最小。并且如果設(shè)定的超時值足夠長,準(zhǔn)確度也最高。但是隨著失效節(jié)點(diǎn)數(shù)的增多,所需的檢測時間迅速增長。為了提高準(zhǔn)確度,必須將超時值(timeout)設(shè)置的足夠大,這樣將使得檢測時間過長,檢測速度降低。也就是說Gossip失效檢測方法是采用犧牲檢測時間換取對網(wǎng)絡(luò)負(fù)載的低影響和高準(zhǔn)確度的。該方法會導(dǎo)致系統(tǒng)網(wǎng)絡(luò)負(fù)載隨節(jié)點(diǎn)的增加線性增加。
層次式失效檢測方法是為了解決大規(guī)模失效檢測技術(shù)對網(wǎng)絡(luò)負(fù)載影響的問題而提出的。多層次的失效檢測方法主要是針對單層次的基本失效檢測方法在對網(wǎng)絡(luò)負(fù)載的影響方面加以改進(jìn)的,多層次的失效檢測把一個失效檢測系統(tǒng)劃分為多個層次,各節(jié)點(diǎn)上的失效檢測模塊不再是對等的,各失效檢測模塊所完成的功能和在失效檢測系統(tǒng)內(nèi)的作用也是有差異的。在多層次的失效檢測方法中節(jié)點(diǎn)存在普通節(jié)點(diǎn)與領(lǐng)導(dǎo)者節(jié)點(diǎn)之分,每個層次內(nèi)部的普通節(jié)點(diǎn)只能看到本組中的所有節(jié)點(diǎn),對于其它組的成員信息普通節(jié)點(diǎn)是看不到的。組內(nèi)的普通節(jié)點(diǎn)發(fā)送心跳消息時也只需要向本組中的節(jié)點(diǎn)發(fā)送,不同組之間節(jié)點(diǎn)的失效檢測是通過組領(lǐng)導(dǎo)者的通知來實(shí)現(xiàn)的。多層次系統(tǒng)中的特殊節(jié)點(diǎn),我們稱之為組領(lǐng)導(dǎo)者,負(fù)責(zé)組間檢測消息的傳遞。組領(lǐng)導(dǎo)者可以看到整個系統(tǒng)中的所有節(jié)點(diǎn)的狀態(tài)信息。處于同組內(nèi)的節(jié)點(diǎn)之間的失效檢測采用PUSH模型。不同組之間的失效檢測采用由組領(lǐng)導(dǎo)通知的方式。對于系統(tǒng)中的普通節(jié)點(diǎn)來說。系統(tǒng)中任意節(jié)點(diǎn)每隔相同的時間間隔T,向組內(nèi)所有其它節(jié)點(diǎn)發(fā)送心跳消息證明自己的存活狀態(tài)。假設(shè)組內(nèi)節(jié)點(diǎn)間的消息延遲的超時值上限為Tmin,組內(nèi)節(jié)點(diǎn)在發(fā)送心跳消息的同時接收來自組內(nèi)其他節(jié)點(diǎn)的心跳消息,如果在Tmin時間后仍然沒有接收到組內(nèi)某個節(jié)點(diǎn)的心跳消息就認(rèn)為此節(jié)點(diǎn)已經(jīng)失效。與此同時也接收來自組領(lǐng)導(dǎo)者的系統(tǒng)中其他組的節(jié)點(diǎn)狀態(tài)信息,同時更新本節(jié)點(diǎn)的節(jié)點(diǎn)成員信息列表。 對于系統(tǒng)中的組領(lǐng)導(dǎo)者。除了完成普通節(jié)點(diǎn)的任務(wù)以外。每隔時間間隔T向系統(tǒng)中其他組領(lǐng)導(dǎo)者發(fā)送本組所有節(jié)點(diǎn)的狀態(tài)列表。同時接收來自其他組領(lǐng)導(dǎo)者的關(guān)于其他組的節(jié)點(diǎn)狀態(tài)信息列表,并在更新本節(jié)點(diǎn)的節(jié)點(diǎn)成員狀態(tài)信息的同時.把該成員狀態(tài)列表轉(zhuǎn)發(fā)給組內(nèi)所有其它普通節(jié)點(diǎn)。該方法的問題是基于領(lǐng)導(dǎo)者節(jié)點(diǎn)的模式容易造成領(lǐng)導(dǎo)者節(jié)點(diǎn)成為熱點(diǎn)而使檢測時間增加,影響失效檢測的效率。對于按需擴(kuò)展的集群存儲系統(tǒng)中,系統(tǒng)由于節(jié)點(diǎn)規(guī)模動態(tài)變化,除了對檢測速度和準(zhǔn)確性的要求外,同時需要失效檢測具有很好的可擴(kuò)展性,能夠保證在節(jié)點(diǎn)數(shù)量較大且不斷變化的情況下保持穩(wěn)定的低負(fù)載。當(dāng)前的Gossip失效檢測方法和層次失效檢測方法均不具有很好的擴(kuò)展性,從而無法適用于大規(guī)模的存儲集群。
發(fā)明內(nèi)容
本發(fā)明針對上述背景技術(shù)中的不足之處,提出了一種適應(yīng)于大規(guī)模存儲集群的失效檢測方法,以保證在大規(guī)模存儲集群且不斷變化的情況下保持穩(wěn)定的低負(fù)載。本發(fā)明的目的是通過如下技術(shù)措施來實(shí)現(xiàn)的。一種適應(yīng)于大規(guī)模存儲集群的失效檢測方法,該方法在存儲集群系統(tǒng)中設(shè)置有失效檢測模塊,該方法采用的失效檢測故障模型為失效/恢復(fù)模型,該方法采用的失效節(jié)點(diǎn)信息的傳播機(jī)制為永久免疫傳染病的傳播模型。所述失效檢測故障模型,大多數(shù)失效檢測模塊采用失效/停止模型,但在存儲集群中,有些節(jié)點(diǎn)可能死機(jī)之后,重啟就可恢復(fù)正常,因此本方法失效檢測故障模型采用失效/恢復(fù)模型。每個存儲節(jié)點(diǎn)都有唯一 ID號,對于被檢測出的失效節(jié)點(diǎn),重啟后恢復(fù)將被賦予新的ID號。進(jìn)一步地,假定節(jié)點(diǎn)之間通信鏈路不會產(chǎn)生或者復(fù)制信息,也就是說節(jié)點(diǎn)間通信不會發(fā)生拜占庭錯誤,但是鏈路中的消息可能會有丟失和延遲。所述失效節(jié)點(diǎn)信息的傳播機(jī)制,在存儲集群中,系統(tǒng)中各個節(jié)點(diǎn)需要盡快知道失效節(jié)點(diǎn)的信息,以便快速的處理數(shù)據(jù)恢復(fù)、遷移和啟用備用節(jié)點(diǎn)的工作。在all-to-all的心跳檢測模式下,每個節(jié)點(diǎn)在每個檢測周期都會檢測其他節(jié)點(diǎn)的狀態(tài),而本方法中,在每個檢測周期各個節(jié)點(diǎn)只會從成員列表中隨機(jī)選取一個節(jié)點(diǎn)進(jìn)行檢測,因此需要一種有效的方式將檢測到的失效節(jié)點(diǎn)信息通知系統(tǒng)中的其他節(jié)點(diǎn)。最簡單的方式是采用廣播方式,通過讓所有的節(jié)點(diǎn)復(fù)制和轉(zhuǎn)發(fā)收到的失效節(jié)點(diǎn)信息來實(shí)現(xiàn),這種方式代價較大,造成較大的網(wǎng)絡(luò)負(fù)載。組播方式可以減少網(wǎng)絡(luò)傳播的消息量,但是難于管理,點(diǎn)對點(diǎn)的傳播方式效率低下,可靠性差。因此,在本方法中,失效節(jié)點(diǎn)信息的傳播機(jī)制是采用永久免疫傳染病的傳播模型,實(shí)現(xiàn)失效節(jié)點(diǎn)信息快速、高效的傳播,其將失效節(jié)點(diǎn)信息附加在Ping和ack消息中,根據(jù)永久免疫傳染病的傳播模型進(jìn)行傳播。在上述技術(shù)方案中,所述永久免疫傳染病模型,具體實(shí)現(xiàn)時,系統(tǒng)中任意一個存儲節(jié)點(diǎn)需要在緩存中保存兩個節(jié)點(diǎn)列表,一個列表Pl保存正常節(jié)點(diǎn)的ID號和相關(guān)信息;一個列表P2保存最近被認(rèn)為失效的節(jié)點(diǎn)的ID號和一個計數(shù)器,所述計數(shù)器用于記錄失效節(jié)點(diǎn)信息被傳播的次數(shù);系統(tǒng)根據(jù)計數(shù)器選擇下一個傳播的失效節(jié)點(diǎn)信息,每一個失效節(jié)點(diǎn)信息最多被傳播a Iogn次,其中n表示整個系統(tǒng)中存儲節(jié)點(diǎn)的總數(shù),a是整數(shù),取{2,3}兩個 值,當(dāng)最初發(fā)出失效節(jié)點(diǎn)信息的存儲節(jié)點(diǎn),收到所有存儲節(jié)點(diǎn)發(fā)回的確認(rèn)消息后,失效節(jié)點(diǎn)將會從該存儲節(jié)點(diǎn)的列表P2中刪除,當(dāng)計數(shù)器的值大于a Iogn后,該存儲節(jié)點(diǎn)也會把失效節(jié)點(diǎn)從列表P2中刪除,如果附加的成員更新信息,比如系統(tǒng)中加入了新的存儲節(jié)點(diǎn),或舊的存儲節(jié)點(diǎn)被替換了,類似這樣的系統(tǒng)成員更新信息太多,超過了 Ping和ack消息包的最大值時,將優(yōu)先選擇計數(shù)器值較小的失效節(jié)點(diǎn)信息進(jìn)行傳播;所述失效節(jié)點(diǎn)信息是在失效檢測模塊中產(chǎn)生的,若系統(tǒng)中有節(jié)點(diǎn)被認(rèn)為失效,就會產(chǎn)生失效節(jié)點(diǎn)信息,包括該節(jié)點(diǎn)ID號和認(rèn)為該節(jié)點(diǎn)失效的時刻,永久免疫傳染病的傳播模型就將失效節(jié)點(diǎn)信息附加在Ping和ack消息中傳播到系統(tǒng)中的所有節(jié)點(diǎn),使得系統(tǒng)中所有節(jié)點(diǎn)都獲知該存儲節(jié)點(diǎn)失效了。在上述技術(shù)方案中,該方法中判斷節(jié)點(diǎn)失效并產(chǎn)生失效節(jié)點(diǎn)信息的步驟包括
(1)存儲集群系統(tǒng)中每個節(jié)點(diǎn)周期性的按輪詢方式從成員列表P1,即保存正常節(jié)點(diǎn)的ID號和相關(guān)信息的列表中選取一個成員并發(fā)送心跳消息,存儲節(jié)點(diǎn)I向存儲節(jié)點(diǎn)J發(fā)送心跳消息,心跳消息用來確認(rèn)存儲節(jié)點(diǎn)J是否失效,消息格式是ping(I;J;timestampe),若存儲節(jié)點(diǎn)J正常工作,在收到存儲節(jié)點(diǎn)I的心跳消息之后馬上回復(fù)ack消息,遍歷完成員列表Pl后,以隨機(jī)方式重新排序成員列表Pl ;
(2)若在規(guī)定時間內(nèi),存儲節(jié)點(diǎn)I收到存儲節(jié)點(diǎn)J的回復(fù)ack消息,則進(jìn)行步驟3;否貝U,認(rèn)為存儲節(jié)點(diǎn)J失效,生成失效節(jié)點(diǎn)信息,進(jìn)行步驟5 ;
(3)根據(jù)接收到恢復(fù)ack消息和發(fā)送ping消息的時間差值,計算得到時間差T,并加入到W列表中,若T大于回復(fù)的平均時間間隔,則進(jìn)行步驟4 ;否則,進(jìn)行步驟5 ;所述W列表是一個長度固定為L的列表,保存最近收到存儲節(jié)點(diǎn)J應(yīng)答的L個心跳消息的檢測時間,用來計算本步驟所述的回復(fù)的平均時間間隔;
(4)存儲節(jié)點(diǎn)I從成員列表Pl中隨機(jī)選擇M個存儲節(jié)點(diǎn),并向M個存儲節(jié)點(diǎn)發(fā)送ping-req消息,ping-req的消息格式為(I; J; Timestampe), I表示發(fā)送請求消息的節(jié)點(diǎn),J表示希望其他存儲節(jié)點(diǎn)幫助檢測的可能失效的存儲節(jié)點(diǎn),Timestampe記錄了發(fā)送消息的時間信息;該消息用來向成員列表Pl中的存儲節(jié)點(diǎn)確認(rèn)存儲節(jié)點(diǎn)J是否真正的失效了,若在規(guī)定時間N內(nèi)存儲節(jié)點(diǎn)I沒有收到任何一個存儲節(jié)點(diǎn)的ack消息,則認(rèn)為存儲節(jié)點(diǎn)J失效,生成失效節(jié)點(diǎn)信息,進(jìn)行步驟5 ;否則,至少收到一個存儲節(jié)點(diǎn)ack消息,說明存儲節(jié)點(diǎn)J正常;
(5)程序結(jié)束。綜上所述,本發(fā)明提出的一種適應(yīng)于大規(guī)模存儲集群的失效檢測方法,使得失效檢測時間與存儲集群規(guī)模無關(guān),并具有良好的擴(kuò)展性。在滿足應(yīng)用對失效檢測時間和誤報率要求的前提下,網(wǎng)絡(luò)負(fù)載最優(yōu)。
圖I為本發(fā)明一種適應(yīng)于大規(guī)模存儲集群的失效檢測方法的存儲集群系統(tǒng)結(jié)構(gòu)圖。圖2為本發(fā)明方法中判斷節(jié)點(diǎn)失效并產(chǎn)生失效節(jié)點(diǎn)信息的步驟流程圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖以及具體實(shí)施例對本發(fā)明做進(jìn)一步的描述。如圖I所示,是本發(fā)明實(shí)施例提供的存儲集群的系統(tǒng)架構(gòu),包含四個部分的內(nèi)容。第一部分是客戶端101,與元數(shù)據(jù)服務(wù)器103進(jìn)行交互完成元數(shù)據(jù)IO操作,獲取數(shù)據(jù)的存放位置,與存儲集群104進(jìn)行交互完成數(shù)據(jù)IO操作,完成數(shù)據(jù)的讀寫。第二部分監(jiān)控器102,監(jiān)控元數(shù)據(jù)服務(wù)器103和存儲集群104的狀態(tài)。第三部分元數(shù)據(jù)服務(wù)器103管理數(shù)據(jù)的存放以及數(shù)據(jù)的訪問權(quán)限等,元數(shù)據(jù)服務(wù)器103通過與存儲集群104的交互,將元數(shù)據(jù)存放在存儲集群104中。第四部分是存儲集群104,是多個存儲節(jié)點(diǎn)的集合,所有數(shù)據(jù)都存儲在104中,通過與元數(shù)據(jù)服務(wù)器103交互完成元數(shù)據(jù)操作,與客戶端101交互完成數(shù)據(jù)操作。這種結(jié)構(gòu)實(shí)現(xiàn)了控制路徑和數(shù)據(jù)路徑的分離。進(jìn)一步的,存儲集群104內(nèi)部各存儲節(jié)點(diǎn)使用網(wǎng)絡(luò)互聯(lián)。本實(shí)施例提供一種適應(yīng)于大規(guī)模存儲集群的失效檢測方法,該方法在存儲集群系統(tǒng)中設(shè)置有失效檢測模塊,該方法采用的失效檢測故障模型為失效/恢復(fù)模型,該方法采用的失效節(jié)點(diǎn)信息的傳播機(jī)制為永久免疫傳染病的傳播模型;
所述失效檢測故障模型采用失效/恢復(fù)模型,每個存儲節(jié)點(diǎn)都有唯一 ID號,對于被檢測出的失效節(jié)點(diǎn),重啟后恢復(fù)將被賦予新的ID號。所述失效節(jié)點(diǎn)信息的傳播機(jī)制采用永久免疫傳染病的傳播模型,其將失效節(jié)點(diǎn)信息附加在ping和ack消息中,根據(jù)永久免疫傳染病的傳播模型進(jìn)行傳播。所述永久免疫傳染病模型,具體實(shí)現(xiàn)時,系統(tǒng)中任意一個存儲節(jié)點(diǎn)需要在緩存中保存兩個節(jié)點(diǎn)列表,一個列表Pl保存正常節(jié)點(diǎn)的ID號和相關(guān)信息;一個列表P2保存最近被認(rèn)為失效的節(jié)點(diǎn)的ID號和一個計數(shù)器,所述計數(shù)器用于記錄失效節(jié)點(diǎn)信息被傳播的次數(shù),所述失效節(jié)點(diǎn)信息即失效了的節(jié)點(diǎn)的相關(guān)信息,包括節(jié)點(diǎn)ID號;系統(tǒng)根據(jù)計數(shù)器選擇下一個傳播的失效節(jié)點(diǎn)信息,每一個失效節(jié)點(diǎn)信息最多被傳播a Iogn次,其中n表示整個系統(tǒng)中存儲節(jié)點(diǎn)的總數(shù),a表示一個參數(shù),a是整數(shù),取{2,3}兩個值,當(dāng)最初發(fā)出失效節(jié)點(diǎn)信息的存儲節(jié)點(diǎn),收到所有存儲節(jié)點(diǎn)發(fā)回的確認(rèn)消息后,失效節(jié)點(diǎn)將會從該存儲節(jié)點(diǎn)的列表P2中刪除,當(dāng)計數(shù)器的值大于a Iogn后,該存儲節(jié)點(diǎn)也會把失效節(jié)點(diǎn)從列表P2中刪除,如果附加的成員更新信息,比如系統(tǒng)中加入了新的存儲節(jié)點(diǎn),或舊的存儲節(jié)點(diǎn)被替換了,類似這樣的系統(tǒng)成員更新信息太多,超過了 Ping和ack消息包的最大值時,將優(yōu)先選擇計數(shù)器值較小的失效節(jié)點(diǎn)信息進(jìn)行傳播;所述失效節(jié)點(diǎn)信息是在失效檢測模塊中產(chǎn)生的,若系統(tǒng)中有節(jié)點(diǎn)被認(rèn)為失效,就會產(chǎn)生失效節(jié)點(diǎn)信息,包括該節(jié)點(diǎn)ID號和認(rèn)為該節(jié)點(diǎn)失效的時刻,永久免疫傳染病的傳播模型就將失效節(jié)點(diǎn)信息附加在Ping和ack消息中傳播到系統(tǒng)中的所有節(jié)點(diǎn),使得系統(tǒng)中所有節(jié)點(diǎn)都獲知該存儲節(jié)點(diǎn)失效了。如圖2所示,本實(shí)施例中判斷節(jié)點(diǎn)失效并產(chǎn)生失效節(jié)點(diǎn)信息的步驟包括
(1)存儲集群系統(tǒng)中每個節(jié)點(diǎn)周期性的按輪詢方式從成員列表P1,即保存正常節(jié)點(diǎn)的ID號和相關(guān)信息的列表中選取一個成員并發(fā)送心跳消息,存儲節(jié)點(diǎn)I向存儲節(jié)點(diǎn)J發(fā)送心跳消息,心跳消息用來確認(rèn)存儲節(jié)點(diǎn)J是否失效,消息格式是ping(I;J;timestampe),若存儲節(jié)點(diǎn)J正常工作,在收到存儲節(jié)點(diǎn)I的心跳消息之后馬上回復(fù)ack消息,遍歷完成員列表Pl后,以隨機(jī)方式重新排序成員列表Pl ;
(2)若在規(guī)定時間內(nèi),存儲節(jié)點(diǎn)I收到存儲節(jié)點(diǎn)J的回復(fù)ack消息,則進(jìn)行步驟3;否貝U,認(rèn)為存儲節(jié)點(diǎn)J失效,生成失效節(jié)點(diǎn)信息,進(jìn)行步驟5 ;
(3)根據(jù)接收到恢復(fù)ack消息和發(fā)送ping消息的時間差值,計算得到時間差T,并加入到W列表中,若T大于回復(fù)的平均時間間隔,則進(jìn)行步驟4 ;否則,進(jìn)行步驟5 ;所述W列表是一個長度固定為L的列表,保存最近收到存儲節(jié)點(diǎn)J應(yīng)答的L個心跳消息的檢測時間,用來計算本步驟所述的回復(fù)的平均時間間隔;
(4)存儲節(jié)點(diǎn)I從成員列表Pl中隨機(jī)選擇M個存儲節(jié)點(diǎn),并向M個存儲節(jié)點(diǎn)發(fā)送ping-req消息,ping-req的消息格式為(I; J; Timestampe), I表示發(fā)送請求消息的節(jié)點(diǎn),J表示希望其他存儲節(jié)點(diǎn)幫助檢測的可能失效的存儲節(jié)點(diǎn),Timestampe記錄了發(fā)送消息的時間信息;該消息用來向成員列表Pl中的存儲節(jié)點(diǎn)確認(rèn)存儲節(jié)點(diǎn)J是否真正的失效了,若在規(guī)定時間N內(nèi)存儲節(jié)點(diǎn)I沒有收到任何一個存儲節(jié)點(diǎn)的ack消息,則認(rèn)為存儲節(jié)點(diǎn)J失效,生成失效節(jié)點(diǎn)信息,進(jìn)行步驟5 ;否則,至少收到一個存儲節(jié)點(diǎn)ack消息,說明存儲節(jié)點(diǎn)J正常;
(5)程序結(jié)束。綜上所述,以上僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種適應(yīng)于大規(guī)模存儲集群的失效檢測方法,該方法在存儲集群系統(tǒng)中設(shè)置有失效檢測模塊,其特征在于該方法采用的失效檢測故障模型為失效/恢復(fù)模型,該方法采用的失效節(jié)點(diǎn)信息的傳播機(jī)制為永久免疫傳染病的傳播模型; 所述失效檢測故障模型采用失效/恢復(fù)模型,每個存儲節(jié)點(diǎn)都有唯一 ID號,對于被檢測出的失效節(jié)點(diǎn),重啟后恢復(fù)將被賦予新的ID號;所述失效節(jié)點(diǎn)信息的傳播機(jī)制采用永久免疫傳染病的傳播模型,將失效節(jié)點(diǎn)信息附加在Ping和ack消息中,根據(jù)永久免疫傳染病的傳播模型進(jìn)行傳播。
2.根據(jù)權(quán)利要求I所述的一種適應(yīng)于大規(guī)模存儲集群的失效檢測方法,其特征在于所述永久免疫傳染病模型,具體實(shí)現(xiàn)時,系統(tǒng)中任意一個存儲節(jié)點(diǎn)需要在緩存中保存兩個節(jié)點(diǎn)列表,一個列表Pl保存正常節(jié)點(diǎn)的ID號和相關(guān)信息;一個列表P2保存最近被認(rèn)為失效的節(jié)點(diǎn)的ID號和一個計數(shù)器,所述計數(shù)器用于記錄失效節(jié)點(diǎn)信息被傳播的次數(shù);系統(tǒng)根據(jù)計數(shù)器選擇下一個傳播的失效節(jié)點(diǎn)信息,每一個失效節(jié)點(diǎn)信息最多被傳播a Iogn次,其中η表示整個系統(tǒng)中存儲節(jié)點(diǎn)的總數(shù),α是整數(shù),取{2,3}兩個值,當(dāng)最初發(fā)出失效節(jié)點(diǎn)信息的存儲節(jié)點(diǎn),收到所有存儲節(jié)點(diǎn)發(fā)回的確認(rèn)消息后,失效節(jié)點(diǎn)將會從該存儲節(jié)點(diǎn)的列表Ρ2中刪除,當(dāng)計數(shù)器的值大于alogn后,該存儲節(jié)點(diǎn)也會把失效節(jié)點(diǎn)從列表P2中刪除,如果附加的系統(tǒng)成員更新信息太多,超過了 Ping和ack消息包的最大值時,將優(yōu)先選擇計數(shù)器值較小的失效節(jié)點(diǎn)信息進(jìn)行傳播;所述失效節(jié)點(diǎn)信息是在失效檢測模塊中產(chǎn)生的,若系統(tǒng)中有節(jié)點(diǎn)被認(rèn)為失效,就會產(chǎn)生失效節(jié)點(diǎn)信息,包括該節(jié)點(diǎn)ID號和認(rèn)為該節(jié)點(diǎn)失效的時亥IJ,永久免疫傳染病的傳播模型就將失效節(jié)點(diǎn)信息附加在Ping和ack消息中傳播到系統(tǒng)中的所有節(jié)點(diǎn),使得系統(tǒng)中所有節(jié)點(diǎn)都獲知該存儲節(jié)點(diǎn)失效了。
3.根據(jù)權(quán)利要求2所述的一種適應(yīng)于大規(guī)模存儲集群的失效檢測方法,其特征在于該方法中判斷節(jié)點(diǎn)失效并產(chǎn)生失效節(jié)點(diǎn)信息的步驟包括 (1)存儲集群系統(tǒng)中每個節(jié)點(diǎn)周期性的按輪詢方式從成員列表P1,即保存正常節(jié)點(diǎn)的ID號和相關(guān)信息的列表中選取一個成員并發(fā)送心跳消息,存儲節(jié)點(diǎn)I向存儲節(jié)點(diǎn)J發(fā)送心跳消息,心跳消息用來確認(rèn)存儲節(jié)點(diǎn)J是否失效,消息格式是ping(I;J;timestampe),若存儲節(jié)點(diǎn)J正常工作,在收到存儲節(jié)點(diǎn)I的心跳消息之后馬上回復(fù)ack消息,遍歷完成員列表Pl后,以隨機(jī)方式重新排序成員列表Pl ; (2)若在規(guī)定時間內(nèi),存儲節(jié)點(diǎn)I收到存儲節(jié)點(diǎn)J的回復(fù)ack消息,則進(jìn)行步驟3;否貝U,認(rèn)為存儲節(jié)點(diǎn)J失效,生成失效節(jié)點(diǎn)信息,進(jìn)行步驟5 ; (3)根據(jù)接收到恢復(fù)ack消息和發(fā)送ping消息的時間差值,計算得到時間差T,并加入到W列表中,若T大于回復(fù)的平均時間間隔,則進(jìn)行步驟4 ;否則,進(jìn)行步驟5 ;所述W列表是一個長度固定為L的列表,保存最近收到存儲節(jié)點(diǎn)J應(yīng)答的L個心跳消息的檢測時間,用來計算本步驟所述的回復(fù)的平均時間間隔; (4)存儲節(jié)點(diǎn)I從成員列表Pl中隨機(jī)選擇M個存儲節(jié)點(diǎn),并向M個存儲節(jié)點(diǎn)發(fā)送ping-req消息,ping-req的消息格式為(I; J; Timestampe), I表示發(fā)送請求消息的節(jié)點(diǎn),J表示希望其他存儲節(jié)點(diǎn)幫助檢測的可能失效的存儲節(jié)點(diǎn),Timestampe記錄了發(fā)送消息的時間信息;該消息用來向成員列表Pl中的存儲節(jié)點(diǎn)確認(rèn)存儲節(jié)點(diǎn)J是否真正的失效了,若在規(guī)定時間N內(nèi)存儲節(jié)點(diǎn)I沒有收到任何一個存儲節(jié)點(diǎn)的ack消息,則認(rèn)為存儲節(jié)點(diǎn)J失效,生成失效節(jié)點(diǎn)信息,進(jìn)行步驟5 ;否則,至少收到一個存儲節(jié)點(diǎn)ack消息,說明存儲節(jié)點(diǎn)J正常; (5)程序結(jié)束。
全文摘要
本發(fā)明涉及集群存儲領(lǐng)域,提供一種適應(yīng)于大規(guī)模存儲集群的失效檢測方法,該方法在存儲集群系統(tǒng)中設(shè)置有失效檢測模塊,該方法采用的失效檢測故障模型為失效/恢復(fù)模型,該方法采用的失效節(jié)點(diǎn)信息的傳播機(jī)制為永久免疫傳染病的傳播模型。使用本發(fā)明方法使得失效檢測時間與存儲集群規(guī)模無關(guān),并具有良好的擴(kuò)展性,保證在大規(guī)模存儲集群且不斷變化的情況下保持穩(wěn)定的低負(fù)載。
文檔編號H04L29/08GK102769673SQ20121025925
公開日2012年11月7日 申請日期2012年7月25日 優(yōu)先權(quán)日2012年7月25日
發(fā)明者鄭勝, 黃駿 申請人:楚云漢智武漢網(wǎng)絡(luò)存儲系統(tǒng)有限公司