一種增強雙機集群可靠、可用性的方法及裝置的制造方法
【技術領域】
[0001]本發明涉及一種增強雙機集群可靠、可用性的方法及裝置,特別涉及一種雙機存儲系統使用后端共享存儲時提高其可靠、可用性的方法及裝置,適用于雙機集群存儲系統,屬于集群海量數據存儲技術領域。
【背景技術】
[0002]在現代存儲領域,為了提高存儲數據的可靠性和改善存儲系統的輸入、輸出性能,人們設計了多種數據存儲方案,這些數據存儲方案通常是各種類型的獨立磁盤冗余陣列(Redundant Arrays of Independent Disks,RAID)。通過使用特定的硬件或軟件,RAID把多個物理存儲設備如磁盤,聯合起來,形成一個統一的邏輯存儲設備對應用系統提供存儲服務。為了提高應用系統的可用性,人們設計了集群方案,通過集群技術對外提供服務;此時集群內各節點服務器通過心跳網絡通訊進行心跳傳遞。目前應用廣泛的是雙機應用集群,集群的通訊大多通過串口或以太網絡進行,當串口或網絡出現故障,沒有其他的心跳機制來保障集群心跳通信,集群將處于腦裂狀態,即雙機都認為對方已失效,將接管對方的業務及資源,由此帶來雙機均操縱對方的共享磁盤空間,出現寫入同一個磁盤位置或者文件,不可避免地造成數據的一致性問題,此時集群無法正常工作,集群的可靠性及可用性極大降低。下面對RAID中常用的技術術語進行解釋:
[0003]條帶:又稱為Stripe,是磁盤陣列不同磁盤上的位置相關的分塊集合,是組織不同磁盤上條塊的單位。
[0004]條帶化:又稱為Striping,是指把一段連續數據分割成相同大小的數據塊,把每段數據分別寫入到磁盤陣列的不同磁盤上的方法。
[0005]共享磁盤:后端通過光纖和以太網通道將磁盤陣列的LUN映射到節點上或者SAS通道鏈接JBOD上的磁盤,這些磁盤對于所有的前端節點均可見和讀寫。
[0006]節點:傳統概念中的一個控制器,為本文中提到的一個節點。
[0007]XOR運算:異或運算。
[0008]比較常用的RAID 有 1^100、1^101、1^105、1^106、1^1010、1^1050和1^1060等。其中RAIDO不具有冗余能力,RAIDl只是對磁盤做了鏡像。其它五種陣列分別有多個磁盤組成,它們以條帶的方式向陣列中的磁盤寫數據,奇偶校驗數據存放在陣列中的各個磁盤上。傳統的陣列在數據量較小的情況得到了廣泛應用。
[0009]集群:一般情況下,程序運行在一個節點上,集群則是將運行在多個節點上的程序,同一時間選擇某一個節點上的程序為用戶提供服務,而正在服務的節點損壞或者下電維護時,將應用切換到其他節點工作,達到連續服務的目的。
[0010]雙機:單獨一個節點運行時為單機,兩個節點協調工作為雙機。
[0011]心跳:節點之間的用于表示自己還存活的信息傳遞。
【發明內容】
[0012]本發明的目的是為解決由于集群節點間的網絡故障帶來的數據不可靠、系統不可用問題,提出一種增強雙機集群可靠、可用性的方法。
[0013]本發明的思想是采用控制器和磁盤分離的方式部署雙機集群系統,通過設置心跳盤來進行心跳信息傳遞,從而解決因為心跳網絡故障而導致的節點會認為對方失效的問題。
[0014]本發明的目的是通過以下技術方案實現的:
[0015]—種增強雙機集群可靠、可用性的方法,包括以下內容:
[0016]在后端共享磁盤中保留一部分共享空間用于設置心跳盤;
[0017]當心跳網絡正常時按照原雙機集群的工作模式通過心跳網絡傳遞心跳消息;
[0018]當心跳網絡發生故障時啟用心跳盤傳遞心跳消息,當心跳網絡恢復后,按照原雙機集群的工作模式通過心跳網絡傳遞心跳消息,停止使用心跳盤傳遞心跳消息。
[0019]作為優選,所述心跳盤分為兩個信息區,分別存儲兩個節點的信息,每個信息區分為集群超級塊、寫超級塊、消息區以及保留區四部分;集群超級塊用于標識集群,包括心跳盤標記、集群名稱和集群UUID;寫超級塊用于標識當前寫入消息的條數SEQ以及最近寫入消息的時間;消息區用于存儲具體的消息,其為長度M的環形隊列,每個消息結構體為校驗碼、時間戳和消息數據本身;保留區用于當消息區所在塊為壞塊時,從中分割出一定空間作為消息區;
[0020]所述傳遞心跳消息通過在2個節點啟用2個同樣的線程:發送線程和接收線程實現,二者的工作過程如下:
[0021]發送線程:首先根據本節點所在集群的信息寫入集群超級塊,初始化寫超級塊,然后間隔預設寫入時間閾值Tl向本節點對應的信息區寫入一個消息,寫前將需要發送的消息打包,即封裝成所述消息結構體,然后寫入消息區,寫入位置由寫超級塊中的SEQ和消息區大小M決定,當SEQ為M的整數倍時從頭覆蓋寫入,然后更新寫超級塊的SEQ值為SEQ+1;
[0022]接收線程:首先讀取對方節點對應的信息區的集群超級塊,驗證有效后,初始化已讀消息個數sequence為0,然后輪詢讀取對方的寫超級塊,如果讀到的寫超級塊SEQ大于本節點程序中的s e q u e n c e,貝Ij讀取對方的消息區中序號從s e q u e n c e到S E Q -1的消息,并更新sequence為SEQ;對于讀取到的每一條心跳信息,驗證消息的校驗碼和時間戳,若不能通過完整性校驗驗證或者消息的時間戳與系統當前時間超過一定的時間差T,說明該消息無效,丟棄此消息;當經過預設讀取時間間隔T2沒有讀取到對方有效的消息時,則判定對方節點失效,開始接管對方的資源和業務;否則,判定對方節點有效,繼續讀取心跳信息。
[0023]作為優選,為提高心跳盤的向后兼容性,所述集群超級塊還包括版本號。
[0024]作為優選,為增強系統的可靠性,設置多個心跳盤,每個心跳盤占用一個磁盤的部分空間,當啟用心跳盤時,首先使用第一個,當第一個失效時使用第二個,以此類推。
[0025]作為優選,所述使用心跳盤的順序為按照用戶預設的順序或按照預設的考慮了磁盤1的算法選擇。
[0026]—種增強雙機集群可靠、可用性的裝置,基于心跳盤,包括控制模塊、心跳寫入模塊和心跳讀取模塊,3個模塊同時部署于2個節點上,控制模塊分別與心跳寫入模塊和心跳讀取模塊相連,心跳寫入模塊和心跳讀取模塊分別與心跳盤相連;
[0027]所述心跳盤分為兩個信息區,分別存儲兩個節點的信息,每個信息區分為集群超級塊、寫超級塊、消息區以及保留區四部分;集群超級塊用于標識集群,包括心跳盤標記、集群名稱和集群UUID;寫超級塊用于標識當前寫入消息的條數SEQ以及最近寫入消息的時間;消息區用于存儲具體的消息,其為長度M的環形隊列,每個消息結構體為校驗碼、時間戳和消息數據本身;保留區用于當消息區所在塊為壞塊時,從中分割出一定空間作為消息區;
[0028]所述控制模塊用于在心跳網絡故障后啟動心跳寫入模塊,向心跳盤中不斷寫入心跳信息,同時啟動心跳讀取模塊,從心跳盤中不斷讀取心跳信息,并根據心跳讀取模塊讀取的心跳信息判斷對方節點是否有效,如有效,當探測到心跳網絡恢復時,停止本節點的心跳寫入模塊和心跳讀取模塊的運行,心跳信息通訊切換到心跳網絡;如無效,通知原雙機集群接管模塊接管對方節點的資源和業務;
[0029]所述心跳寫入模塊用于將心跳盤標識和集群標識初始化后寫入心跳盤集群超級塊,然后間隔預設寫入時間閾值Tl按照所述消息的結構打包一個心跳消息,根據當前消息的條數計算出該心跳消息的寫入位置,將心跳消息寫入到心跳盤相應位置,并更新寫超級塊,更新寫入的心跳信息條數和時間戳;
[0030]所述心跳讀取模塊用于讀取心跳盤中寫超級塊信息,驗證通過后通過定時輪詢從心跳盤中讀取心跳信息,并更新本地已讀取的心跳信息條數sequence。
[0031]作為優選,為提高心跳盤的向后兼容性,所述集群超級塊還包括版本號。