一種解決雙機(jī)集群腦裂的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種解決雙機(jī)集群腦裂的方法及裝置,特別涉及一種雙機(jī)集群存儲(chǔ)系統(tǒng)使用后端共享存儲(chǔ)時(shí)防止腦裂的方法及裝置,適用于雙機(jī)集群存儲(chǔ)系統(tǒng),屬于海量數(shù)據(jù)存儲(chǔ)技術(shù)領(lǐng)域。
【背景技術(shù)】
[0002]在現(xiàn)代存儲(chǔ)領(lǐng)域,為了提高存儲(chǔ)數(shù)據(jù)的可靠性和改善存儲(chǔ)系統(tǒng)的輸入、輸出性能,人們設(shè)計(jì)了多種數(shù)據(jù)存儲(chǔ)方案,這些數(shù)據(jù)存儲(chǔ)方案通常是各種類型的獨(dú)立磁盤冗余陣列(Redundant Arrays of Independent Disks,RAID)。通過使用特定的硬件或軟件,RAID把多個(gè)物理存儲(chǔ)設(shè)備如磁盤,聯(lián)合起來,形成一個(gè)統(tǒng)一的邏輯存儲(chǔ)設(shè)備。基于雙機(jī)集群的技術(shù)大多數(shù)用于應(yīng)用系統(tǒng),將雙機(jī)集群技術(shù)和應(yīng)用技術(shù)緊密結(jié)合,形成應(yīng)用集群,采用串口或者以太網(wǎng)絡(luò)在集群之間進(jìn)行心跳同步傳輸。如圖3所示,傳統(tǒng)的雙機(jī)集群存儲(chǔ)通過心跳網(wǎng)絡(luò)進(jìn)行心跳傳遞,在心跳正常的情況下,不同節(jié)點(diǎn)對不同的資源進(jìn)行導(dǎo)出,如節(jié)點(diǎn)1導(dǎo)出Diskl-Disk6組成的存儲(chǔ)池資源,節(jié)點(diǎn)2導(dǎo)出Disk7-Diskl2組成的存儲(chǔ)池資源,前端業(yè)務(wù)10只在需要訪問的資源導(dǎo)出的節(jié)點(diǎn)上進(jìn)行,但當(dāng)心跳網(wǎng)絡(luò)故障后,雙機(jī)集群無法感知彼此是否存活,陷入腦裂狀態(tài),節(jié)點(diǎn)互相認(rèn)為對方失效且自己活著,雙機(jī)集群的節(jié)點(diǎn)爭搶后端相同資源,且兩個(gè)節(jié)點(diǎn)均會(huì)接管這些資源,并都對業(yè)務(wù)主機(jī)進(jìn)行導(dǎo)出,此時(shí)業(yè)務(wù)主機(jī)依然在正常進(jìn)行業(yè)務(wù)10,節(jié)點(diǎn)1和節(jié)點(diǎn)2均搶奪了所有相同的后端存儲(chǔ)資源,并向前端導(dǎo)出給應(yīng)用,前端應(yīng)用可在不同的節(jié)點(diǎn)上進(jìn)行10操作,在未加鎖的情況下對后端的共享磁盤上的文件進(jìn)行寫入操作,或者對共享存儲(chǔ)的同一個(gè)位置進(jìn)行寫入,某節(jié)點(diǎn)將另一節(jié)點(diǎn)的數(shù)據(jù)覆蓋,從而導(dǎo)致只有某一節(jié)點(diǎn)在最后時(shí)候?qū)懭氲臄?shù)據(jù)才是正確的。如A節(jié)點(diǎn)在某個(gè)時(shí)間點(diǎn)之前寫入的數(shù)據(jù),用戶程序認(rèn)為正確,實(shí)際上已經(jīng)被B節(jié)點(diǎn)在時(shí)間點(diǎn)后寫入的數(shù)據(jù)覆蓋,A節(jié)點(diǎn)上的用戶程序讀取出B節(jié)點(diǎn)寫入的數(shù)據(jù),用于計(jì)算,導(dǎo)致結(jié)果為錯(cuò)誤,造成資源搶奪和數(shù)據(jù)一致性問題。
[0003]下面對RAID中常用的技術(shù)術(shù)語進(jìn)行解釋:
[0004]條帶:又稱為Stripe,是磁盤陣列不同磁盤上的位置相關(guān)的分塊集合,是組織不同磁盤上條塊的單位。
[0005]條帶化:又稱為Striping,是指把一段連續(xù)數(shù)據(jù)分割成相同大小的數(shù)據(jù)塊,把每段數(shù)據(jù)分別寫入到磁盤陣列的不同磁盤上的方法。
[0006]節(jié)點(diǎn):組成雙機(jī)集群系統(tǒng)中的一臺主機(jī),為本文中提到的一個(gè)節(jié)點(diǎn)。
[0007]比較常用的RAID 有 1^100、1^101、1^105、1^106、1^1010、1^1050和1^1060等。其中RAID0不具有冗余能力,RAID1只是對磁盤做了鏡像。其它五種陣列分別有多個(gè)磁盤組成,它們以條帶的方式向陣列中的磁盤寫數(shù)據(jù),奇偶校驗(yàn)數(shù)據(jù)存放在陣列中的各個(gè)磁盤上。腦裂:在集群工作時(shí),當(dāng)心跳信息無法傳遞時(shí),每個(gè)節(jié)點(diǎn)均會(huì)認(rèn)為其他節(jié)點(diǎn)無效,自己有效,此時(shí)形成腦裂狀態(tài)。此時(shí)節(jié)點(diǎn)爭奪資源,如果每個(gè)節(jié)點(diǎn)都爭奪到所有的資源,用戶程序便可以同時(shí)寫入數(shù)據(jù),從而導(dǎo)致有效數(shù)據(jù)被覆蓋,節(jié)點(diǎn)最后寫入的數(shù)據(jù)為有效,此前寫入的數(shù)據(jù)丟失。
[0008]仲裁盤:用于仲裁信息傳遞的共享磁盤,可以為FC或者iSCSI盤陣映射出來的卷,也可以為SAS JB0D上的硬盤。
【發(fā)明內(nèi)容】
[0009]本發(fā)明的目的是為解決因心跳網(wǎng)絡(luò)失效導(dǎo)致的集群系統(tǒng)腦裂的問題,提出一種解決雙機(jī)集群腦裂的方法及裝置,通過設(shè)置仲裁盤并對其寫入/讀取信息實(shí)現(xiàn)信息交換,防止腦裂的發(fā)生。
[0010]本發(fā)明的思想是通過使用一部分共享池空間來交換資源爭奪信息,保證節(jié)點(diǎn)不會(huì)操縱已經(jīng)被其它節(jié)點(diǎn)搶占的資源,進(jìn)而避免腦裂的發(fā)生。
[0011]本發(fā)明的目的是通過以下技術(shù)方案實(shí)現(xiàn)的:
[0012]—種解決雙機(jī)集群腦裂的方法,包括以下內(nèi)容:
[0013]后端共享盤可創(chuàng)建1個(gè)或多個(gè)存儲(chǔ)池,同一個(gè)存儲(chǔ)池可根據(jù)用戶選擇歸屬于某節(jié)點(diǎn),在存儲(chǔ)池中為各節(jié)點(diǎn)創(chuàng)建仲裁盤用于存儲(chǔ)交換信息,交換信息中包括用于標(biāo)識集群及相關(guān)信息位置與長度的仲裁超級塊,用于標(biāo)識資源爭搶結(jié)果的仲裁信息,以及用于標(biāo)識其它節(jié)點(diǎn)放棄對該資源的爭搶的響應(yīng)信息;
[0014]當(dāng)發(fā)生腦裂時(shí),獲得資源的節(jié)點(diǎn)向仲裁盤寫入仲裁信息,表明其已獲得該仲裁盤所在節(jié)點(diǎn)的資源;
[0015]未獲得資源的節(jié)點(diǎn)向仲裁盤寫入響應(yīng)信息,表明其已知道該仲裁盤所在節(jié)點(diǎn)的資源已被其它節(jié)點(diǎn)接管,自己將放棄對該資源的爭搶。
[0016]作為優(yōu)選,所述仲裁超級塊包括仲裁區(qū)域標(biāo)記(MIGIC),集群名稱,集群UUID,仲裁信息起始位置和長度,響應(yīng)信息的起始位置和長度;仲裁區(qū)域標(biāo)記用于表示該盤用作仲裁盤,集群名稱以及集群UUID用于標(biāo)識使用此盤的集群,仲裁信息起始位置和長度用于定位和指示仲裁信息的長度,響應(yīng)信息的起始位置和長度用于定位和指示響應(yīng)信息的長度。
[0017]作為優(yōu)選,所述仲裁信息包括當(dāng)前爭奪成功的節(jié)點(diǎn)名稱、節(jié)點(diǎn)UUID和寫入信息時(shí)的時(shí)間戳。
[0018]作為優(yōu)選,所述響應(yīng)信息包括放棄對該資源爭奪的節(jié)點(diǎn)名稱、節(jié)點(diǎn)UUID和寫入信息的時(shí)間戳。
[0019]作為優(yōu)選,所述獲得資源按照對本節(jié)點(diǎn)所屬資源優(yōu)先搶占的原則獲取資源。
[0020]作為優(yōu)選,為保證腦裂被成功避免以及磁盤10性能,所述獲得資源的節(jié)點(diǎn)向仲裁盤寫入仲裁信息,為間隔一定時(shí)間持續(xù)寫入,直到其輪詢到其它節(jié)點(diǎn)的響應(yīng)信息或?qū)懭氪螖?shù)高于預(yù)設(shè)閾值N時(shí)停止寫入。
[0021]作為優(yōu)選,所述獲得資源的節(jié)點(diǎn)向仲裁盤寫入仲裁信息以及未獲得資源的節(jié)點(diǎn)向仲裁盤寫入響應(yīng)信息通過以下過程實(shí)現(xiàn):
[0022]首先,向本節(jié)點(diǎn)的仲裁盤持續(xù)寫入仲裁信息,并從中讀取響應(yīng)信息,當(dāng)讀取到響應(yīng)信息或?qū)懭氪螖?shù)高于預(yù)設(shè)閾值N時(shí)停止寫入;
[0023]其次,從其它節(jié)點(diǎn)的仲裁盤間隔一定時(shí)間N次讀入仲裁信息,當(dāng)仲裁信息不斷變化時(shí)判斷該節(jié)點(diǎn)資源已被搶占,向該節(jié)點(diǎn)的仲裁盤寫入響應(yīng)信息;
[0024]—種解決雙機(jī)集群腦裂的裝置,如圖4所示,基于仲裁盤,包括控制模塊,仲裁信息寫入模塊,仲裁信息讀取模塊,響應(yīng)信息寫入模塊和響應(yīng)信息讀取模塊,5個(gè)模塊均置于所有節(jié)點(diǎn)中,控制模塊與仲裁信息寫入模塊,仲裁信息讀取模塊,響應(yīng)信息寫入模塊和響應(yīng)信息讀取模塊分別相連;
[0025]控制模塊用于在腦裂發(fā)生時(shí)輪詢集群存儲(chǔ)池,對每個(gè)存儲(chǔ)池判別是否屬于本節(jié)點(diǎn),如果是,啟動(dòng)仲裁信息寫入模塊寫入仲裁信息,啟動(dòng)響應(yīng)信息讀取模塊讀取響應(yīng)信息,當(dāng)讀取到其它節(jié)點(diǎn)放棄資源爭奪的響應(yīng)信息或在預(yù)設(shè)的時(shí)間S內(nèi)沒有讀到響應(yīng)信息時(shí)確認(rèn)其已成功搶占該資源;如果否,啟動(dòng)仲裁信息讀取模塊讀取仲裁信息,當(dāng)讀取到其它節(jié)點(diǎn)已占有該資源的仲裁信息時(shí),啟動(dòng)響應(yīng)信息寫入模塊寫入響應(yīng)信息,否則啟動(dòng)仲裁信息寫入模塊寫入仲裁信息,啟動(dòng)響應(yīng)信息讀取模塊讀取響應(yīng)信息,當(dāng)讀取到其它節(jié)點(diǎn)放棄資源爭奪的響應(yīng)信息或在預(yù)設(shè)的時(shí)間S內(nèi)沒有讀到響應(yīng)信息時(shí)停止仲裁信息寫入模塊;
[0026]仲裁信息寫入模塊用于根據(jù)控制模塊給出的寫入命令向?qū)?yīng)的仲裁盤中寫入本機(jī)已搶占該資源的仲裁信息;
[0027]仲裁信息讀取模塊用于根據(jù)控制模塊給出的讀取命令讀取對應(yīng)的仲裁盤中的有效仲裁ig息;
[0028]響應(yīng)信息寫入模塊用于根據(jù)控制模塊給出的寫入命令向?qū)?yīng)的仲裁盤中寫入