適用于雙控高可用存儲系統(tǒng)的磁盤心跳收發(fā)方法
【技術領域】
[0001]本發(fā)明涉及計算機存儲技術領域,尤其是涉及一種適用于雙控高可用存儲系統(tǒng)的磁盤心跳收發(fā)方法。
【背景技術】
[0002]隨著數據訪問業(yè)務對連續(xù)性要求的日益提高,高可用成為存儲系統(tǒng)的必備特性之一。中小型的高可用集群一般采用雙控節(jié)點向用戶提供數據訪問業(yè)務。當其中一個節(jié)點失效時,另一個節(jié)點接管失效節(jié)點的資源和業(yè)務,保證業(yè)務連續(xù)性。
[0003]節(jié)點間的狀態(tài)感知是高可用存儲系統(tǒng)的核心模塊之一。通過網絡發(fā)送心跳包是系統(tǒng)常用的狀態(tài)監(jiān)測感知的方法。網絡心跳具有部署靈活,狀態(tài)信息豐富等特點。然而以高可用的標準評判,交換機掉電,網絡接口故障,網線松動斷開等風險使得網絡心跳的可靠性堪憂。出現網絡隔離時,節(jié)點無法判斷是網絡故障,還是對端節(jié)點離線。此外,由于承載心跳包的管理網絡與數據鏈路是分離的,網絡隔離狀態(tài)下節(jié)點更無法得知對端節(jié)點的數據鏈路是否正常。
[0004]綜上可知,網絡隔離將使得系統(tǒng)將面臨兩難境地:導出數據資源造成業(yè)務中斷,或者雙控節(jié)點同時導入資源而造成數據不一致。因此,高可用系統(tǒng)有必要在網絡心跳存在的基礎上,配備另一種心跳方案一一通過共享磁盤發(fā)送和接收心跳。
【發(fā)明內容】
[0005]本發(fā)明的目的就是為了克服上述現有技術存在的缺陷而提供一種適用于雙控高可用存儲系統(tǒng)的磁盤心跳收發(fā)方法,提高了雙控高可用存儲系統(tǒng)感知節(jié)點狀態(tài)和資源狀態(tài)的能力;在節(jié)點網絡隔離狀態(tài)下,能保持數據服務高可用,降低數據不一致的風險。
[0006]本發(fā)明的目的可以通過以下技術方案來實現:
[0007]—種適用于雙控高可用存儲系統(tǒng)的磁盤心跳收發(fā)方法,其特征在于,包括以下步驟:
[0008]I)將共享存儲池作為雙控節(jié)點的存儲資源,自動選擇存儲池的一塊磁盤作為心跳盤;
[0009]2)發(fā)送端在心跳盤的心跳區(qū)域寫入心跳標記,接收端讀取心跳標記后將其清除;
[0010]3)當存儲池的磁盤發(fā)生變動時,自動更新心跳盤以保證磁盤心跳連續(xù)收發(fā)。
[0011]所述的存儲池有且僅有一塊心跳盤。
[0012]所述的心跳區(qū)域為磁盤非數據區(qū)域,收發(fā)心跳的方式為直接讀寫磁盤非數據區(qū)域;主節(jié)點作為發(fā)送端寫入心跳標記,備節(jié)點作為接收端清除心跳標記。
[0013]所述的心跳標記為主備節(jié)點約定的特定字符串。
[0014]所述的發(fā)送端發(fā)送心跳具體為:
[0015]1.1)主節(jié)點檢查存儲池狀態(tài),若可用,轉步驟1.2 ;否則轉步驟1.4 ;
[0016]1.2)讀取心跳區(qū)域,若存在心跳標記,轉步驟1.4 ;否則轉步驟1.3 ;
[0017]1.3)向心跳區(qū)域寫入心跳標記,本次心跳發(fā)送成功,并轉步驟1.4 ;
[0018]1.4)等待111秒,轉步驟1.1。
[0019]所述的主節(jié)點以異步方式感知存儲池狀態(tài)。
[0020]線程定時查詢存儲池狀態(tài)并實時更新狀態(tài)標記,主節(jié)點在發(fā)送磁盤心跳前只需讀取狀態(tài)標記來判斷存儲池是否可用。
[0021]所述的接收端接收心跳具體如下:
[0022]2.1)讀取心跳區(qū)域,心跳標記若存在,轉步驟2.2 ;否則轉步驟2.3 ;
[0023]2.2)清除心跳標記,本次心跳接收成功,轉步驟2.4 ;
[0024]2.3)心跳連續(xù)發(fā)送失敗次數若超過上限,轉步驟2.5 ;否則轉步驟2.4。
[0025]2.4)等待m秒,轉步驟2.1 ;
[0026]2.5)結束磁盤心跳的接收。
[0027]節(jié)點導入存儲池之前,對存儲池進行腦裂預防檢測。
[0028]所述的腦裂預防檢測具體如下:
[0029]3.1)判斷是否存在心跳標記,若為是,執(zhí)行步驟3.2,若沒有心跳標記殘留,允許導入存儲池;
[0030]3.2)若有心跳標記殘留,等待η秒后再次檢查心跳標記是否存在,若存在,不允許導入存儲池,否則允許導入存儲池。
[0031]與現有技術相比,本發(fā)明具有以下優(yōu)點:
[0032]I)磁盤心跳使得雙控高可用存儲系統(tǒng)的節(jié)點擁有獨立于網絡心跳的另一條心跳鏈路,提高了節(jié)點之間相互感知彼此狀態(tài)的可靠性。
[0033]2)網絡隔離狀態(tài)下,磁盤心跳能夠維持存儲池的主備節(jié)點相互的狀態(tài)感知,保證數據服務的高可用,避免資源發(fā)生不必要的切換。
[0034]3)在節(jié)點導入資源前檢測磁盤心跳,當網絡隔離狀態(tài)下系統(tǒng)掉電重啟時,能起到區(qū)分存儲池的主備節(jié)點的作用,防止發(fā)生腦裂。
[0035]4)心跳盤隨存儲池磁盤的變動而動態(tài)更新,全過程自動完成,對用戶透明,省去繁瑣的手動配置和維護過程。
【附圖說明】
[0036]圖1為本發(fā)明雙控高可用存儲系統(tǒng)磁盤心跳架構圖;
[0037]圖2為本發(fā)明磁盤心跳發(fā)送流程圖;
[0038]圖3為本發(fā)明磁盤心跳接收流程圖;
[0039]圖4為本發(fā)明腦裂預防檢測流程圖。
【具體實施方式】
[0040]下面結合附圖和具體實施例對本發(fā)明進行詳細說明。
[0041]實施例
[0042]本發(fā)明針對共享式的高可用存儲系統(tǒng),提出一種讀寫共享磁盤的心跳收發(fā)方法。該方法使用共享存儲池作為存儲資源,自動選擇存儲池的一塊磁盤作為心跳盤。發(fā)送端在心跳盤的心跳區(qū)域寫入心跳標記,接收端讀取心跳標記后清除。當存儲池的磁盤發(fā)生變動時,自動更新心跳盤以保證磁盤心跳連續(xù)收發(fā)。雙控高可用系統(tǒng)的磁盤心跳如圖1所示。
[0043]本發(fā)明包括以下要點:
[0044]1.自動選擇心跳盤
[0045]存儲心跳標記的磁盤稱為心跳盤。本發(fā)明選擇存儲池的第一塊磁盤作為心跳盤。當存儲池的磁盤出現添加、替換、移除等變動時,心跳盤將自動更新。全過程自動完成,省去繁瑣的手動配置和維護管理,對用戶透明。
[0046]2.約定心跳區(qū)域
[0047]心跳區(qū)域是主備節(jié)點在初始化時約定的一段用來存放心跳標記的非數據區(qū)域。心跳標記是主備節(jié)點約定的一個特殊字符串。心跳區(qū)域默認不存放任何信息,因而寫入心跳標記不破壞存儲系統(tǒng)原本的數據或元數據。
[0048]3.收發(fā)磁盤心跳
[0049]導入存儲池的節(jié)點被稱為這個存儲池的主節(jié)點,另一節(jié)點稱為備節(jié)點。主備節(jié)點分別作為磁盤心跳的發(fā)送端和接收端,每隔m秒(2〈m〈5)讀寫一次心跳區(qū)域。發(fā)送端讀取心跳區(qū)域后寫入心跳標記。接收端讀取心跳區(qū)域后寫入空白數據,即清除心跳標記。這樣。每隔m秒,心跳標記在心跳區(qū)域寫入一次,然后被清除一次。發(fā)送端從心跳區(qū)域讀取的數據若為空白,表明接收端心跳接收正常。接收端從心跳區(qū)域讀取的數據若為心跳標記,表明發(fā)送端心跳發(fā)送正常。其余狀態(tài)