欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于磁盤服務鎖的裂腦預防的方法和裝置的制作方法

文檔序號:7553406閱讀:131來源:國知局
專利名稱:一種基于磁盤服務鎖的裂腦預防的方法和裝置的制作方法
技術領域
本發(fā)明屬于計算機集群技術領域,適用于高可用性集群(High-avaiIabiIityclusters),尤其適用于一種基于磁盤服務鎖的高可用性系統(tǒng)的裂腦預防的方法和裝置。
背景技術
隨著通信網絡技術的飛速發(fā)展,電信、金融、電子政務等關鍵領域對服務器可用性的要求越來越高,高可用集群系統(tǒng)日益被越來越多的用戶接受和廣泛使用。為了避免因服務器或交換機的故障而使業(yè)務停止造成的巨大的經濟損失,通過高可用性(HighAvailability,HA)系統(tǒng)可以大大減少了業(yè)務系統(tǒng)的常規(guī)維護和業(yè)務因軟件、硬件等故障影響的停止時間。當前高可用集群系統(tǒng)主要通過網絡或串口等連接作為集群通信的私有心跳網絡,負責交換同步節(jié)點間的信息,監(jiān)測集群中各個節(jié)點的運行情況。一般來說,集群有工作機和備份機,當備份機不能在一定時間內收到工作機的心跳信息,備份機則認為工作機發(fā)生了故障,接管了工作機上的業(yè)務并繼續(xù)對外提供服務。高可用集群通過上述過程提高了業(yè)務的可用性,但是當心跳網絡故障時,可能會導致工作機和備份機同時提供服務,會出現(xiàn)裂腦(Split Brain, SB),導致數(shù)據損壞。在實際的實施案例中,發(fā)明人發(fā)現(xiàn)網絡容易受到網卡、交換機、心跳線路以及驅動等的影響。尤其在長時間運作的業(yè)務中,網卡故障、交換機掉電、網線被拔或驅動異常也時有發(fā)生,嚴重的時候會出現(xiàn)集群心跳網絡全部斷開,集群被分為多個。這時非常容易出現(xiàn)同一個服務同時在兩節(jié)點上運行,導致客戶的數(shù)據丟失或被破壞,這是高可用集群普遍存在的一個安全隱患問題。為了保障用戶的數(shù)據不受破壞和服務可持續(xù)性,在集群心跳網絡斷開或異常時,防止集群裂腦是必不可少的。目前市場中為了解決此問題,通用做法都是采用將節(jié)點重啟系統(tǒng)或將共享存儲對其他節(jié)點進行隔離。但發(fā)明人發(fā)現(xiàn)這些方法并不能滿足市場的要求,在實際的實施當中,備用節(jié)點上同樣運行著其他重要的業(yè)務,客戶不允許操作系統(tǒng)重啟或整一塊共享存儲被隔離。在解決集群防止裂腦的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有的技術存在如下的問題:集群心跳網絡中斷時,無法區(qū)別是心跳網絡故障,還是節(jié)點死機,容易做出錯誤的判斷,從而產生裂腦;在上述判斷中,能夠檢測到工作機仍然活著,但無法確定服務是否停止成功,存在短暫裂腦的可能,造成數(shù)據損壞;在上述判斷中,如果判斷節(jié)點死機了,存在多個節(jié)點同時啟動服務,產生裂腦,造成數(shù)據被破壞的可能。

發(fā)明內容
本發(fā)明實例提供一種基于磁盤服務鎖的裂腦預防的方法和裝置,在不需要將節(jié)點系統(tǒng)重啟或共享存儲隔離的情況下,仍然能夠在集群心跳網絡中斷或異常時,實現(xiàn)防止集群裂腦發(fā)生,提高集群的高可用性。
一方面,提供了一種基于磁盤服務鎖的裂腦預防的方法,包括:當心跳網絡中斷時,能夠迅速區(qū)別是心跳網絡故障還是節(jié)點死機的情況,避免做出誤判,防止裂腦;如果是心跳網絡故障,持續(xù)檢測一段時間后,該服務鎖沒有釋放,其他節(jié)點則不會再啟動服務,避免工作機節(jié)點服務沒有停止完成,備份機已啟動而造成短暫的裂腦問題;如果是工作機死機,多個節(jié)點同時去搶占服務鎖,只有唯一搶占成功的節(jié)點才有啟動服務的權限,從而防止裂腦發(fā)生。另一方面,提供了一種基于磁盤服務鎖的裂腦預防的裝置,包括:節(jié)點檢測判斷模塊,用于檢測所有節(jié)點的心跳,判斷出所有節(jié)點的當前的狀態(tài)。當心跳網絡中斷時,判別心跳網絡故障與工作節(jié)點死機的情況。磁盤服務鎖查詢模塊,用于當心跳網絡故障時,其他節(jié)點可以通過查詢磁盤服務鎖是否釋放或已失效而做出對應策略,避免發(fā)生工作機的服務沒有停止成功,備份機已啟動造成的短暫裂腦發(fā)生。搶奪磁盤服務鎖模塊,用于在工作節(jié)點死機或因心跳網絡故障后主機釋放服務鎖的情況下,多個節(jié)點同時去搶占服務鎖,只有唯一搶占成功的節(jié)點才可以啟動服務,防止裂腦發(fā)生。本發(fā)明實施提供了上述一種基于磁盤服務鎖的裂腦預防的方法和裝置,在心跳網絡中斷時,有效判別心跳網絡故障還是節(jié)點死機的情況;通過查詢磁盤服務鎖可以正確獲取服務是否已停止成功,從而避免了存在的短暫裂腦問題;在多個節(jié)點通過搶占服務鎖,只有唯一搶占成功的節(jié)點才可以啟動服務,防止裂腦發(fā)生。本發(fā)明實施提供的技術解決方案成功解決了目前在不需要將系統(tǒng)重啟或共享存儲隔離的情況下,集群在心跳網絡中斷或異常時,難以克服和避免的裂腦問題。


為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將用實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹。圖1為本發(fā)明提供的高可用雙節(jié)點帶磁盤服務鎖的集群系統(tǒng)拓撲圖;圖2為本發(fā)明提供的磁盤服務鎖內部結構圖;圖3為本發(fā)明提供的高可用多節(jié)點集群系統(tǒng)拓撲圖;圖4為本發(fā)明實施例一提供一種基于磁盤服務鎖的裂腦預防的方法流程圖;圖5為本發(fā)明實施例一提供一種基于磁盤服務鎖的裂腦預防的方法中情景之一的流程圖;圖6為本發(fā)明實施例一提供一種基于磁盤服務鎖的裂腦預防的方法中情景之二的流程圖;圖7為本發(fā)明實施例一提供一種基于磁盤服務鎖的裂腦預防的方法中情景之三的流程圖;圖8為本發(fā)明實施例一提供一種基于磁盤服務鎖的裂腦預防的方法中情景之四的流程圖;圖9為本發(fā)明實施例二提供一種基于磁盤服務鎖的裂腦預防的方法流程圖;圖10為本發(fā)明實施例三提供一種基于磁盤服務鎖的裂腦預防的裝置示意圖一;
圖11為本發(fā)明實施例三提供一種基于磁盤服務鎖的裂腦預防的裝置示意圖二 ;
具體實施例方式下面將結合附圖和實施例對本發(fā)明進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他的實施例,都屬于本發(fā)明保護的范圍。為了解決在集群心跳網絡中斷時,因不能有效判斷其他節(jié)點及其運行服務狀態(tài)而容易做出錯誤的策略,進而產生裂腦,破壞數(shù)據的問題。本發(fā)明實施例提供了一種基于磁盤服務鎖,在不需要將系統(tǒng)重啟或存儲隔離的情況下,仍然有效地防裂腦的方法和裝置。如圖1所示,為有代表性的雙機高可用帶磁盤服務鎖的集群系統(tǒng)拓撲圖,系統(tǒng)有兩臺節(jié)點,服務器節(jié)點A和B,業(yè)務通過公有網絡對外提供服務,節(jié)點間通過私有網絡進行交換節(jié)點信息,監(jiān)控節(jié)點上的服務運行狀態(tài),其中私有網絡一般是兩條或以上的直連網線或串口線。節(jié)點A定時將極小量的數(shù)據寫磁盤分區(qū)中,同時由節(jié)點B讀取,同樣的,節(jié)點B也如此,本發(fā)明裝置通過此原理檢測節(jié)點的狀態(tài)。而集群中的每一個服務在磁盤分區(qū)中有對應的一把服務鎖,節(jié)點在啟動服務前先搶到該服務鎖,節(jié)點在停止服務后釋放此服務鎖。當節(jié)點持續(xù)一個時間常量,沒有更新心跳,對應的節(jié)點所占用的服務鎖將失效。運行在兩臺服務器中的集群軟件包含本發(fā)明的裝置。如圖2所示,為雙機高可用帶磁盤服務鎖的集群系統(tǒng)對應的磁盤服務鎖的結構圖,包括內容有分區(qū)唯一的分區(qū)標識、集群的節(jié)點和服務信息、服務鎖以及節(jié)點信息等。如圖3所示,高可用多節(jié)點集群系統(tǒng)拓撲圖,在多節(jié)點高可用帶磁盤服務鎖的集群系統(tǒng)中,與雙機系統(tǒng)類似地,各個節(jié)點分別定時將極小量的數(shù)據寫到同一磁盤分區(qū)中的對應的區(qū)域,同時,讀取其他所有節(jié)點寫入的數(shù)據,各個節(jié)點根據讀取的數(shù)據自動生成一份一致的節(jié)點狀態(tài)列表。而集群中的每一個服務在磁盤分區(qū)中有對應的一把服務鎖,節(jié)點在啟動服務前先搶到該服務鎖,節(jié)點在停止服務后釋放此服務鎖。當節(jié)點持續(xù)一個時間常量,沒有更新心跳,對應的節(jié)點所占用的服務鎖將失效。當工作節(jié)點死機或服務停止后,同一個服務域其他的節(jié)點都可以通過搶奪服務鎖而接管服務。而運行在各個節(jié)點的服務器中的集群軟件包含本發(fā)明的裝置。以下的描述的實施例內容中,同時涵蓋了雙機和多節(jié)點的高可用性系統(tǒng)。如圖4所示,本發(fā)明實施一提供一種基于磁盤服務鎖的裂腦預防的方法,包括:步驟401,當集群心跳網絡中斷時,區(qū)別是心跳網絡故障還是節(jié)點死機。在本實施例中,當集群心跳網絡中斷時,區(qū)別是心跳網絡故障還是節(jié)點死機的過程包括:檢測心跳斷開的節(jié)點在磁盤的信息在最近一個時間常量t內是否有更新;根據更新的時間判斷心跳斷開的節(jié)點是否在線,從而區(qū)別心跳網絡中斷的原因是心跳網絡故障還是節(jié)點死機。其中檢測的時間常量t略小于接收到最后一個網絡心跳到達到判定心跳網絡中斷的時間常量T,這樣當時間常量t內的磁盤信息都沒有更新,就可以有效力說明該節(jié)點網絡與存儲同時是崩潰了,我們可以認定。最為關鍵的是存儲與系統(tǒng)斷開,應用無法寫入數(shù)據,不會對數(shù)據造成影響。一般來說,時間常量t越長越好,但這與高可用要求的故障時間短相悖,所以常量t 一般略小于時間常量T即可;如果在時間常量t內的磁盤信息仍然正常更新,我們可以證明該節(jié)點是由于集群私有網絡故障而導致了該節(jié)點的心跳全部斷開的。在本實施例中,如果采用的通過公有網絡PING心跳斷開節(jié)點的IP來判斷節(jié)點的狀態(tài),在系統(tǒng)不允許PING(即系統(tǒng)不會回應icmp的請求包)、交換機端口損壞、網絡風暴等等情況下,都不能有效地判斷節(jié)點的狀態(tài),存在很大的安全風險隱患。發(fā)明人通過磁盤讀寫信息可以更準確地檢測節(jié)點的狀態(tài),并且檢測時間相對較長且不影響業(yè)務的切換時間,這是其他通過網絡檢測節(jié)點狀態(tài)的方法無法做到的。在本實施例中,值得注意的是上述中的磁盤信息,并不是有關于集群的信息,而只是一個不會回卷的時間戳。因為集群的信息量很大,對磁盤的IO產生比較大的影響。而本發(fā)明只需要該時間戳的更新來判別出節(jié)點的狀態(tài)的而非集群和服務的狀態(tài)。所以本發(fā)明中使用的數(shù)據量極少,并非集群的心跳。在本實施例中,如果通過步驟401判斷出心跳斷開的節(jié)點是死機,就可以由集群其他備份工作節(jié)點進入步驟403搶鎖,嘗試去接受服務,如圖5所示;如果通過步驟401判斷出心跳斷開的節(jié)點是網絡故障,則集群其他備份工作節(jié)點進入了步驟402進行查詢服務鎖是否已釋放,進而下一步操作。步驟402,在節(jié)點心跳全斷了,但節(jié)點仍然在線的情況下,檢測在一個時間常量S內該節(jié)點占用的磁盤服務鎖是否已釋放。在本實施例中,通過步驟401判斷出心跳斷開的節(jié)點是網絡故障,此時存在很大的可能性是心跳斷開節(jié)點的工作公有網絡發(fā)生異常,會導致該節(jié)點上的服務停止。一般來說,節(jié)點的工作公有網絡出現(xiàn)了故障都將服務轉移,而服務停止的時間一般比上述判別節(jié)點心跳死的時間常量要長,因此,很容易出現(xiàn)一邊還在停止服務,一邊已在啟動服務,產生了裂腦,短暫性的數(shù)據受損,磁盤陣列出現(xiàn)只讀(read-only,R0)。對于多節(jié)點的集群更為容易出現(xiàn)這類問題。正確的做法,只有通過心跳斷開的節(jié)點服務停止完成后,才可以啟動服務,并且只能有一個節(jié)點啟動。但心跳斷開了,節(jié)點將服務停止完成后仍然不能告知其他節(jié)點。但通過磁盤服務鎖就可以解決這一難以克服的問題,當故障節(jié)點將服務停止完成后,就會釋放磁盤服務鎖。其他節(jié)點就可以檢測到,從而可以獲知服務已停止成功。備份節(jié)點可以通過磁盤服務鎖安全可靠地接管服務。在本實施例中,檢測的時間常量S為兩倍的服務停止超時時間,如果在一個時間常量S內心跳斷開節(jié)點占用的磁盤服務鎖仍然沒有釋放,可能存在兩種情況,一是心跳斷開的節(jié)點上的服務正常運行,二是該服務無法停止,服務不可轉移。對于這兩種情況,備份節(jié)點都不需要做出處理,并放棄接管服務。在本實施例中,如果通過步驟402在一個時間常量內心跳斷開節(jié)點占用的磁盤服務鎖已釋放了,則其他備份節(jié)點可以進入步驟403進行搶鎖,如圖6和圖7所示;如果一個時間常量內心跳斷開節(jié)點占用的磁盤服務鎖沒有釋放,則其他備份節(jié)點放棄接管服務,如圖8所示。步驟403,在心跳斷開節(jié)點死機或其占用的服務鎖已釋放的情況下,進行搶奪磁盤服務鎖。在本實施例中,通過步驟401和步驟402判別允許搶奪磁盤服務鎖,但只有唯一節(jié)點會搶奪服務鎖成功,并且搶奪服務鎖成功的節(jié)點才有啟動該服務的權限。對于多節(jié)點,只有搶奪服務鎖的機制才能保證只有一個節(jié)點能啟動服務,防止裂腦。搶奪磁盤服務鎖的機制包括:在加鎖之前,各個節(jié)點都要按順序去搶奪磁盤分區(qū)中的三個搶占點,如果搶占點I沒有節(jié)點先占了,則繼續(xù)搶奪搶占點2,搶占點3 ;如果搶占點I被占用了,則要休眠ls,再去搶奪搶占法2,搶占點2已被先占了,則搶奪失?。蝗绻麆t前兩個中成功搶奪一個或以上的才能搶奪搶占點3,搶奪搶占點2失敗的同樣需要休眠2s ;如果搶占點3已被占,則搶奪服務鎖失敗,至少三個搶占點中要獲取兩個才能勝出。勝出的節(jié)點才有權對磁盤服務鎖進行加鎖,并還原各個搶占點。通過多數(shù)搶奪,延時的優(yōu)勝劣汰的算法成功地解決多節(jié)點共同競爭的問題。本實施例中,通過多次搶奪,延時的優(yōu)勝劣汰的機制,決出唯一的勝出節(jié)點,勝出的節(jié)點才可以啟動對應的服務,防止裂腦的發(fā)生。本實施例中,通過上述過程,在心跳網絡中斷的情況下,有效判別節(jié)點死機還是網絡故障,避免將網絡故障誤判為節(jié)點死機,啟動了服務而產生裂腦的風險;在上述過程中,當網絡故障造成的心跳斷開時,避免了在服務在停止過程中,但備份節(jié)點不去接管服務的問題;通過磁盤服務鎖,也可以準備獲知服務是否停止成功,從而防止一邊仍在停止過程,一邊已啟動服務的問題;在啟動服務之前通過上述中的搶奪服務鎖的機制,有效避免多節(jié)點存在的共同競爭搶奪磁盤服務鎖的問題,防止裂腦的發(fā)生。在本實施例中,對雙機而言,服務A在節(jié)點I上運行,則認為節(jié)點I是服務A的工作節(jié)點,相應地,另外一個節(jié)點就是備份節(jié)點。如果兩節(jié)點都有服務,則同一節(jié)點既是工作節(jié)點也是備份節(jié)點。對于多節(jié)點,服務所在節(jié)點為工作節(jié)點,相應地,服務域中其他的節(jié)點為備份節(jié)點。本發(fā)明實施例提供一種基于磁盤服務鎖的裂腦預防的方法,在心跳網絡中斷的情況下,能夠準確判別是節(jié)點死機還是網絡故障,其他節(jié)點仍然能夠準確獲知服務是否已停止成功,避免裂腦產生的同時,也可以安全可靠地接管服務。本發(fā)明實施例提供的技術方案解決了目前在不需要將系統(tǒng)重啟或共享存儲隔離的情況下,在集群心跳網絡中斷時,難以克服和避免的裂腦問題。如圖9所示,本發(fā)明實例二提供一種基于磁盤服務鎖的裂腦預防的方法,包括:步驟901,在集群心跳網絡中斷時,通過網絡都無法判別出節(jié)點的狀態(tài),但磁盤節(jié)點更新的信息,可以有效地判別出節(jié)點仍然在線。步驟901與步驟401功能類似,只是這里判別出了網絡故障導致了心跳異常,在此不再一一贅述。本實施例中,通過步驟901判別心跳全部斷開,但出節(jié)點仍然在線,則要進入步驟902.
步驟902,在一個時間常量S如果沒有釋放鎖,可能存在兩種情況,一是心跳斷開的節(jié)點上的服務正常運行,二是該服務無法停止,服務不可轉移。因此,備份節(jié)點認為服務仍然是正常的,并放棄接管服務,避免產生裂腦。本實施例中,通過步驟902在一個時間常量S如果沒有釋放鎖,則可以放棄接管服務了。但為了增強集群的可高用性,在集群心跳全部斷開的情況下,實際的環(huán)境中,有可能維護人員要經過一兩天才能獲知故障然后去維護,也有些沒有告警的環(huán)境,因為業(yè)務能正常在運行,很可能不知道現(xiàn)場的集群已出現(xiàn)了異常。為了更好地解決在集群心跳網絡中斷的情況的問題,本實施例中還包括了步驟903.
步驟903,在心跳網絡中斷的情況下,各個節(jié)點仍然可以通過查詢各個服務鎖,而持續(xù)地監(jiān)控各個服務的狀態(tài)。本實施例中,通過步驟903可以查詢到各個服務鎖在心跳全部斷開之后的服務的狀態(tài)。當各個節(jié)點的心跳斷開時,各個節(jié)點的服務仍然可能故障,需要其他可用的節(jié)點進行接管服務。通過步驟903可以接管能夠正常停止故障服務的業(yè)務繼續(xù)對外提供服務,事實上,這將實現(xiàn)了服務高可用性的最大化。在保證安全的并不影響其他業(yè)務的情況下,使得服務高可用最大化是一個集群系統(tǒng)最根本的原則。本實施例中,通過步驟903,進一步地解決了步驟402和步驟403中因為在一個時間常量S內釋放了服務鎖,并且由一個節(jié)點搶奪服務鎖成功,并啟動服務,但啟動服務失敗時,該服務將無法由其他節(jié)點接管的問題。因此,本實施例是對實施例一的功能進一步補充和完善。步驟904,通過三個搶占點最大程度地解決了多個節(jié)點同時加鎖的問題,決出唯一勝出者獲得啟動服務的權限。本實施例中,步驟904與步驟403是類似的,但在這里,因為是在集群心跳全部斷開后持續(xù)很長的時間,很可能要經過多次地服務倒換,由不同的節(jié)點進行接管,步驟904的搶奪服務鎖機制為防止裂腦提供了很重要的保障。在此不再一一贅述了。在本實施例中,對雙機而言,服務A在節(jié)點I上運行,則認為節(jié)點I是服務A的工作節(jié)點,相應地,另外一個節(jié)點就是備份節(jié)點。如果兩節(jié)點都有服務,則同一節(jié)點既是工作節(jié)點也是備份節(jié)點。對于多節(jié)點,服務所在節(jié)點為工作節(jié)點,相應地,服務域中其他的節(jié)點為備份節(jié)點。本發(fā)明實施例提供一種基于磁盤服務鎖的裂腦預防的方法,在心跳網絡中斷后,判別是網絡故障后,各個節(jié)點仍然可以持續(xù)監(jiān)控各個服務鎖的狀態(tài),繼續(xù)可以接管可以正常停止的故障業(yè)務對外提供服務,實現(xiàn)服務高可用性的最大化。本發(fā)明實施例提供的技術方案解決了目前在不需要將系統(tǒng)重啟或共享存儲隔離的情況下,在集群心跳網絡中斷后,仍然繼續(xù)可以盡可能地接管故障節(jié)點的服務。如圖10所示,本發(fā)明實例三提供一種基于磁盤服務鎖的裂腦預防的裝置,包括:節(jié)點狀態(tài)檢測判別模塊1001,用于更新本節(jié)點的磁盤信息的同時,讀取其他節(jié)點的信息并記錄下來,作為判別節(jié)點狀態(tài)的依據。本實施例中,節(jié)點狀態(tài)檢測判別模塊1001首先通過讀取系統(tǒng)信息自動生成一個永不會回卷的時間戳,并更新到磁盤中提供給其他節(jié)點讀?。煌瑫r讀取其他節(jié)點的在磁盤中的更新了的時間戳,并記錄下來,作為判別節(jié)點狀態(tài)的依據。根據各個節(jié)點的磁盤信息是定時去更新的并且時間戳是不會回卷的,因此,檢測模塊通過一個時間常量t各節(jié)點更新的時間戳的時間間隔就可以判別出各個節(jié)點的狀態(tài)。本實施例中,值得注意的是為了不影響實際的業(yè)務正常的讀寫IO及增加系統(tǒng)的負擔,上述的磁盤信息要求的數(shù)據量極少(為最小的磁盤IO讀寫單位:一個扇區(qū)),并且采用不帶緩存的讀寫的技術,實現(xiàn)低時延。本裝置是經過大量反復測試的,尤其在磁盤IO壓力很大情況下,模擬滿負荷的條件下,仍然保持穩(wěn)定的讀寫更新磁盤信息。使得模塊1001檢測節(jié)點狀態(tài)的準確度提供了保障。本實施例中,通過節(jié)點狀態(tài)檢測模塊判別節(jié)點的狀態(tài),而現(xiàn)有的技術中在集群心跳網絡中斷后,可以通過業(yè)務公有網絡判別節(jié)點的狀態(tài),如果能夠PING到了 IP,則認為節(jié)點依然在線,不接管服務,但不確定服務的狀態(tài),是否處于停止的過程;如果不能PING到IP,則認為對方節(jié)點死機,就會嘗試去啟動服務,在實際應用環(huán)境中,有很多實例證明,這是不可靠,因為此時實際的網絡很可能處于異常或堵塞的情況下,PING不到該節(jié)點也是很有可能的,這樣直接產生了裂腦。節(jié)點狀態(tài)檢測模塊就是可以解決了此問題,網絡容易受到其他因素的影響,但對節(jié)點本身來說,讀寫磁盤依然是很正常的,不容易受到了干擾,就是有最壞的時間,到了干擾,節(jié)點狀態(tài)檢測模塊在一個時間常量t,依然可以兼容和排除干擾,以避免不穩(wěn)定的因素。本實施例中,通過節(jié)點狀態(tài)檢測模塊判別節(jié)點的狀態(tài),可以準確地判別節(jié)點的狀態(tài),并且?guī)缀醪粫黾雍陀绊懴到y(tǒng)上運行的業(yè)務。當集群心跳網絡中斷時,通過模塊1001判別如果是節(jié)點死機,則啟動搶奪服務鎖模塊;如果判別只是網絡故障,則啟動磁盤服務鎖檢測模塊。磁盤服務鎖檢測模塊1002,用于檢測服務是否已經加鎖或釋放,同時檢測服務鎖是否有效的。本實施例中,各個節(jié)點都是通過磁盤服務鎖檢測模塊來判斷對應的服務是否已被加鎖,從而各個節(jié)點都可以獲知各個服務分別在哪個節(jié)點上運行。節(jié)點在啟動服務之前要先加鎖,服務停止成功后再解鎖,每一個服務均有一把服務鎖,這樣才保證一個服務只能在一個節(jié)點上運行,不管心跳好還是心跳全斷了。本實施例中,值得注意的是本發(fā)明中的磁盤服務鎖不會出現(xiàn)“死鎖”,通常鎖機制都會因為加鎖的一方異?;蛩劳龆鵁o法解鎖,而造成“死鎖”,其他節(jié)點無法去加鎖,進一步會導致服務無法接管。但本發(fā)明中磁盤服務鎖引入了“有效期”,但判別加鎖的節(jié)點死機,則對應地服務鎖都將失效。其他節(jié)點就可以加鎖,接管服務。本實施例中,根據模塊1001判別出集群心跳網絡斷開了,但心跳斷開的工作節(jié)點仍然在線,但這種情況下,而備份節(jié)點無法獲知其服務狀態(tài),是否在停止服務。一個保守的策略就是不接管服務,但在這種情況下,事實告訴我們,工作節(jié)點的服務往往是異常了。這種的策略將影響了集群的高可用性,現(xiàn)有技術中因為無法解決該問題,只能通過將該節(jié)點的存儲隔離或將其系統(tǒng)重啟,以保證同時只有一個節(jié)點啟動服務。但這里會帶出了很多問題與風險,并不能滿足市場的需求,在此不再一一贅述。本實施例中,通過模塊1002,在一個時間常量S內如果能服務鎖釋放了,就可以安全地接管服務,啟動搶奪服務鎖模塊。因為檢測的時間常量S為兩倍的服務停止超時時間,如果在一個時間常量S內心跳斷開節(jié)點占用的磁盤服務鎖仍然沒有釋放,可能存在兩種情況,一是心跳斷開的節(jié)點上的服務正常運行,二是該服務無法停止,服務不可轉移。對于這兩種情況,備份節(jié)點都不需要做出處理,并放棄接管服務。通過服務鎖,節(jié)點可以獲知工作節(jié)點的服務已停止成功,但無法停止。并且,這不需要將工作節(jié)點的存儲隔離或將其系統(tǒng)重啟,不影響系統(tǒng)上其他正常的服務或應用服務,當網絡恢復正常時,又可以安全地加入到集群當中。搶奪服務鎖模塊1003,采用了多次搶奪,延時的優(yōu)勝劣汰的機制,用于避免多個節(jié)點同時加鎖啟動服務而產生的裂腦問題。本實施例中,搶奪服務鎖模塊1003,包括了多次搶奪,搶奪失敗者延時優(yōu)勝劣汰的機制決出唯一的獲勝者以及加鎖和解鎖三部分的實現(xiàn)。在多節(jié)點的環(huán)境中,心跳網絡主要是通過局域網絡進行通信的,當局域網的網絡異常,就會將多節(jié)點集群劃分多個集群,每集群都有節(jié)點嘗試去啟動服務,這時候就存在同時去搶奪服務鎖的情況,為了避免同時搶奪的問題,本發(fā)明采用了多次搶奪,搶奪失敗者延時優(yōu)勝劣汰的機制,可以最大程度地避免此問題。本實施例中,通過搶奪機制,決出唯一的勝利者才能去加鎖并且啟動服務。而當服務停止成功,就相應去解鎖。通過啟動服務前去加鎖,就可以通告其他節(jié)點,避免其他節(jié)點去嘗試啟動服務。通過停止服務完成后解鎖,通告其他節(jié)點,可以讓其他節(jié)點去接管服務。本發(fā)明服務鎖的裝置,就是使用最簡單的設計,發(fā)揮最大的作用。進一步地,如圖11所示,本發(fā)明實例三提供一種基于磁盤服務鎖的裂腦預防的裝置,還將包括:磁盤服務鎖查詢模塊1103,用于提供對其他模塊或進程進行查詢,查詢的內容包括節(jié)點的當前狀態(tài)和服務鎖的當前占用者等信息。在本實施例中,為了進一步地實現(xiàn)服務高可用的最大化,在心跳網絡中斷后,當工作節(jié)點的服務故障后仍然可以由其他備份節(jié)點接管。磁盤服務鎖查詢模塊1103,提供了節(jié)點狀態(tài)和服務鎖的當然狀態(tài)查詢的接口,當心跳全部斷開后,各個節(jié)點無法準確通過其他路徑了解其他節(jié)點的服務狀態(tài)。但通過查詢磁盤服務鎖的當前狀態(tài),就可以了解到各個節(jié)點上服務上的狀態(tài)。顯然的是,各個節(jié)點上的服務存在故障時,很多服務是可以停止成功的,但也存在有服務是停止不成功的。通過磁盤服務鎖,卻可以保障停止成功的服務可以由其他節(jié)點接管,不能停止的服務不會發(fā)生裂腦。在本實施例中,模塊1103提供僅僅是查詢接口,節(jié)點狀態(tài)和服務鎖的狀態(tài)結果都是由磁盤服務鎖檢測模塊1102去提供。所以,本裝置具有很高統(tǒng)一性,各個模塊相對獨立,但每一個功能所調用的模塊接口是一樣的,保障什么時候都只有一份統(tǒng)一的數(shù)據,對于同一時候點,各個節(jié)點模塊中的數(shù)據也是一致的。只有這樣,才能使各個節(jié)點在行動上保持一致。在本實施例中,顯然地,根據不同的需要,模塊1103可以提供各種不同的查詢接口,還可以不同的操作,如加鎖或解鎖等等的操作接口。在本實施例中,對雙機而言,服務A在節(jié)點I上運行,則認為節(jié)點I是服務A的工作節(jié)點,相應地,另外一個節(jié)點就是備份節(jié)點。如果兩節(jié)點都有服務,則同一節(jié)點既是工作節(jié)點也是備份節(jié)點。對于多節(jié)點,服務所在節(jié)點為工作節(jié)點,相應地,服務域中其他的節(jié)點為備份節(jié)點。本發(fā)明實施例提供一種基于磁盤服務鎖的裂腦預防的裝胃,在集群心跳網絡中斷的情況下,能夠準備判別是節(jié)點機死機還是網絡故障,如果心跳斷開的節(jié)點死機,則可以搶奪服務鎖,進而啟動服務;如果心跳斷開的節(jié)點是網絡故障,則檢測服務鎖在一個時間常量S內是否釋放,如果已釋放,則可以搶奪服務鎖,進而啟動服務;如果沒有釋放,則放棄啟動服務;通過查詢功能,還可以接管再次出現(xiàn)故障的節(jié)點。本發(fā)明實施例提供一種基于磁盤服務鎖的裂腦預防的裝置,在心跳網絡中斷的情況下,能夠準確判別是節(jié)點死機還是網絡故障,其他節(jié)點仍然能夠準確獲知服務是否已停止成功,避免裂腦產生的同時,也可以安全可靠地接管服務。在心跳網絡中斷后,判別是網絡故障后,各個節(jié)點仍然可以持續(xù)監(jiān)控各個服務鎖的狀態(tài),繼續(xù)可以接管可以正常停止的故障業(yè)務對外提供服務,實現(xiàn)服務高可用性的最大化。本發(fā)明實施例提供的技術方案解決了目前在不需要將系統(tǒng)重啟或共享存儲隔離的情況下,在集群心跳網絡中斷后,仍然繼續(xù)可以盡可能地接管故障節(jié)點的服務。本發(fā)明實施例提供一種基于磁盤服務鎖的裂腦預防的方法和裝置,都可以直接應用在高可用性的集群中。結合本文所公開的實施描述的方法或算法步驟可以直接應用于硬件、處理器執(zhí)行的軟件模塊,或者二者綜合來實施。以上所述,僅為本發(fā)明的具體實施方式
,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術領域的技術人員發(fā)明揭露的技術范圍內,可輕易想到變化或替換,都應涵蓋在本發(fā)明的保護范圍之內。因此,本發(fā)明的保護范圍應所述以權利要求的保護范圍為準。
權利要求
1.一種基于磁盤服務鎖的裂腦預防的方法,其特征在于,包括: 在心跳網絡中斷時,備份節(jié)點通過磁盤服務鎖的工作節(jié)點更新的時間戳判別工作節(jié)點是死機還是因網絡故障而導致心跳斷開; 所述工作節(jié)點是因網絡故障而導致心跳斷開時,所述的備份節(jié)點檢測在一個時間常量S內工作節(jié)點占用的服務鎖是否已釋放; 所述工作節(jié)點占用的服務已釋放,所述的備份節(jié)點可以進行搶奪磁盤服務鎖,獲勝者將啟動對應的服務。
2.根據權利要求1所述的一種基于磁盤服務鎖的裂腦預防的方法,其特征在于,還包括: 在心跳網絡中斷時,所述的備份節(jié)點通過磁盤服務鎖判別所述的工作節(jié)點是否死機;所述的工作節(jié)點已死機,所述的備份節(jié)點可以進行搶奪磁盤服務鎖,獲勝者進行加鎖并啟動對應的服務。
3.根據權利要求1所述一種基于磁盤服務鎖的裂腦預防的方法,其特征在于,還包括: 在心跳網絡中斷時,所述的備份節(jié)點通過磁盤服務鎖判別所述的工作節(jié)點是否死機; 所述的工作節(jié)點沒有死機,是因為網絡故障而導致的心跳斷開,所述的備份節(jié)點檢測在一個時間常量S內工作節(jié)點占用的服務鎖已釋放,所述的備份節(jié)點可以進行搶奪磁盤服務鎖,獲勝者將啟動對應的服務。
4.根據權利要求3所述的一種基于磁盤服務鎖的裂腦預防的方法,其特征在于,還包 括: 所述的工作節(jié)點沒有死機,是因為網絡故障而導致的心跳網絡斷開,所述的備份節(jié)點檢測在一個時間常量S內工作節(jié)點占用的服務鎖沒有釋放,所述的備份節(jié)點放棄啟動對應的服務。
5.根據權利要求4所述的一種基于磁盤服務鎖的裂腦預防的方法,其特征在于,還包括: 所述的備份節(jié)點放棄啟動對應的服務后,還可以繼續(xù)提供查詢檢測該服務的磁盤服務鎖是否因故障而停止成功,并釋放鎖的,所述的備份節(jié)點仍然可以加鎖啟動服務。
6.根據權利要求2和5所述的一種基于磁盤服務鎖的裂腦預防的方法,其特征在于,還包括: 所述的備份節(jié)點成功接管對應的服務后,成為工作節(jié)點,當工作節(jié)點因故障而停止成功后,所述的其他備份節(jié)點仍然可以加鎖啟動服務。
7.根據權利要求3和5所述的一種基于磁盤服務鎖的裂腦預防的方法,其特征在于,還包括: 所述的備份節(jié)點成功接管對應的服務后,成為工作節(jié)點,當工作節(jié)點因故障而停止成功后,通過查詢磁盤服務鎖的狀態(tài),所述的其他備份節(jié)點仍然可以加鎖啟動服務,直到最后一個備份節(jié)點故障而停止服務。
8.根據權利要求5所述的一種基于磁盤服務鎖的裂腦預防的方法,其特征在于,所述的查詢接口,包括: 查詢節(jié)點的當前狀態(tài),包括節(jié)點距離節(jié)點死機的大致時間; 查詢磁盤服務鎖的當前狀態(tài),包括每個節(jié)點上的服務及每個服務所在節(jié)點。
9.根據權利要求1所述的一種基于磁盤服務鎖的裂腦預防的方法,其特征在于,搶奪磁盤服務鎖,包括: 加鎖前,先按順序搶奪三個搶占點; 每一個搶占點只能一個搶奪成功的,搶奪成功的,繼續(xù)搶奪其他的,不成功將延時; 至少獲取二個或以上的為獲勝者,并且是唯一。
10.一種基于磁盤服務鎖的裂腦預防的裝置,其特征在于,包括: 節(jié)點狀態(tài)檢測判別模塊,用于更新本節(jié)點的磁盤信息的同時,讀取其他節(jié)點的信息并記錄下來,作為判別節(jié)點狀態(tài)的依據; 磁盤服務鎖檢測模塊,用于檢測服務是否已經加鎖或釋放,同時檢測服務鎖是否有效的; 搶奪服務鎖模塊,采用了多次搶奪,延時的優(yōu)勝劣汰的機制,用于加鎖和解鎖,解決多個節(jié)點同時搶奪的問題。
磁盤服務鎖查詢模塊,用于提供查詢的內容包括節(jié)點的當前狀態(tài)和服務鎖的當前占用者等信息的接口。
11.根據權利要求10所述的一種基于磁盤服務鎖的裂腦預防的裝置,其特征在于,節(jié)點狀態(tài)檢測判別模塊,還包括: 用于更新本節(jié)點的磁盤信息的同時,讀取其他節(jié)點的信息并記錄下來,作為判別節(jié)點狀態(tài)的依據; 各個節(jié)點根據系統(tǒng)的配置生成一個永不`會回卷的時間戳更新到磁盤,并由其他節(jié)點讀取,不直接傳遞集群的信息,但也可以拓展傳遞集群指令; 節(jié)點在一個時間常量t內沒有更新對應的時間戳,則認為此節(jié)點死機。
12.根據權利要求10所述的一種基于磁盤服務鎖的裂腦預防的裝置,其特征在于,磁盤服務鎖檢測模塊,還包括: 用于檢測服務是否已經加鎖或釋放,同時檢測服務鎖是否有效的; 服務啟動前必須加鎖成功,服務成功停止完成才能解鎖; 服務鎖是有有效期的,只要占用服務鎖的節(jié)點死機,則該服務鎖失效,不存在死鎖的情況。
13.根據權利要求10所述的一種基于磁盤服務鎖的裂腦預防的裝置,其特征在于,搶奪服務鎖模塊,還包括: 采用了多次搶奪,延時的優(yōu)勝劣汰的機制,用于加鎖和解鎖,解決多個節(jié)點同時搶奪的問題; 加鎖前,至少搶奪兩個或以上的搶占點,才能加鎖。
14.根據權利要求10所述的一種基于磁盤服務鎖的裂腦預防的裝置,其特征在于,還包括: 在心跳全部斷開時,通過檢測所述工作節(jié)點在一個時間常量t內無時間戳更新則判別死機,則調用搶奪服務鎖模塊,加鎖成功后啟動服務。
15.根據權利要求10所述的一種基于磁盤服務鎖的裂腦預防的裝置,其特征在于,還包括: 在心跳全部斷開時,通過檢測所述工作節(jié)點在一個時間常量t內時間戳更新正常,而磁盤服務鎖檢測模塊在一個時間常量S內檢測服務鎖已釋放,則調用搶奪服務鎖模塊,力口鎖成功后啟動服務。
16.根據權利要求10所述的一種基于磁盤服務鎖的裂腦預防的裝置,其特征在于,還包括: 在心跳全部斷開時,通過檢測工作節(jié)點在一個時間常量t內時間戳更新正常,而磁盤服務鎖檢測模塊在一個時間常量S內檢測服務鎖尚且沒有釋放,則放棄啟動服務。
17.根據權利要求10所述的一種基于磁盤服務鎖的裂腦預防的裝置,其特征在于,還包括: 在心跳全部斷開一個時間常量S后,通過磁盤服務鎖查詢模塊提供的查詢功能,可以持續(xù)監(jiān)控各個節(jié)點和服務鎖的狀態(tài),在節(jié)點死機或因故障而成功停止解鎖的,所述的其他備份節(jié)點可以調用搶奪磁盤服務鎖模塊進行加鎖,并接管服務,直到最后一個備份節(jié)點故障而 服務停止。
全文摘要
本發(fā)明公開一種基于磁盤服務鎖的裂腦預防的方法和裝置,屬于計算機集群技術領域,適用于高可用性集群。為解決在集群心跳網絡中斷時,無法準確判別其他節(jié)點及其運行服務的狀態(tài),而出現(xiàn)無法接管服務或難以避免裂腦的問題,尤其是不使用將系統(tǒng)重啟或存儲隔離的技術的情況下。本發(fā)明實施例提供的技術方案包括在心跳網絡中斷時,有效判別是心跳網絡故障還是節(jié)點死機的情況;通過查詢磁盤服務鎖能夠正確獲取服務是否已停止成功,從而避免了存在的短暫裂腦問題;在多個節(jié)點同時搶奪服務鎖,只有唯一搶奪成功的節(jié)點才可以啟動服務,防止裂腦發(fā)生。
文檔編號H04L12/24GK103209095SQ201310081528
公開日2013年7月17日 申請日期2013年3月13日 優(yōu)先權日2013年3月13日
發(fā)明者莫慶良, 蔡強, 董春青, 袁泉 申請人:廣東新支點技術服務有限公司
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
讷河市| 勃利县| 扎鲁特旗| 曲松县| 九龙城区| 禄劝| 平山县| 盐源县| 永德县| 迁安市| 庆城县| 阿尔山市| 建湖县| 平陆县| 南康市| 肇东市| 那曲县| 潮安县| 栾城县| 锡林浩特市| 常州市| 宜宾市| 江城| 民权县| 潮安县| 连州市| 和林格尔县| 丹巴县| 固始县| 什邡市| 米泉市| 岑巩县| 尼玛县| 梅河口市| 方山县| 扬州市| 兰溪市| 鸡泽县| 天水市| 县级市| 普兰县|