專利名稱:一種基于糾刪碼集群存儲系統的交叉重構方法
技術領域:
本發明屬于數據存儲領域,更具體地,涉及一種基于糾刪碼集群存儲系統的交叉重構方法。
背景技術:
隨著計算機技術和網絡技術的發展,集群存儲系統需要具有高存儲利用率和高容錯率的容錯技術以應對海量數據對集群可靠性提出的挑戰。糾刪碼容錯技術在上述兩方面具有優勢而越來越受到重視。糾刪碼容錯技術通過糾刪碼算法將數據進行編碼得到少量冗余,再將數據與冗余一起存儲。如圖1所示,每個節點的磁盤空間被劃分成一個個條塊。整個集群的磁盤空間由一個個相互獨立的條帶組成。每個條帶將k個數據塊通過一定編碼算法計算出r個冗余塊,將這k+r個條塊分布到集群的不同節點。集群可以使用某一條帶中的任意k個條塊,解碼得到該條帶內的所有數據塊和冗余塊。因此該集群存儲系統最多可以容忍r個節點失效。但是糾刪碼容錯技術存在一個缺點,即任意一個節點失效都需要通過網絡傳輸k個存活節點的數據來恢復這個失效節點上的數據,這個過程的網絡帶寬開銷大。特別是隨著數據量的爆炸性增長,不斷增大的存儲規模使得出現失效節點已成為集群存儲系統的常態。為了恢復失效節點上的數據并替換失效的節點,糾刪碼集群存儲系統需要讓新加入的節點向k個存活的節點獲取數據以進行重構,引起網絡帶寬的大量占用。特別是當集群中有f (f ^ 2)個節點同時失效時,現有的重構方法或者需要讓這f個替換節點各自向k個存活節點獲取數據,需要占用fXk倍的網絡帶寬開銷,從而造成重構時間的延長,降低集群的可靠性。所以,多節點同時失效而引起的大量網絡帶寬開銷是糾刪碼集群存儲系統的目前重構方法面臨的巨大挑戰。
發明內容
針對現有技術的缺陷,本發明的目的在于提供一種基于糾刪碼集群存儲系統的交叉重構方法,旨在解決現有重構方法面對糾刪碼集群存儲系統中出現多個節點同時失效的情況下造成大量網絡帶寬開銷的問題,本發明的方法將需要恢復的數據劃分給各個替換節點,每個替換節點只負責一部分條帶的恢復,各自重構之后得到的少量數據在兩兩替換節點之間相互發送和接收,能夠降低網絡帶寬開銷和加快重構速度,同時具有高可靠性和高可擴展性。為實現上述目的,本發明提供了一種基于糾刪碼集群存儲系統的交叉重構方法,包括以下步驟:(1)糾刪碼集群存儲系統的第i個替換節點RNi將自身條帶號的基準值rowstep初始化為0,其中i=l,…,f,f為系統中失效節點的數量;(2)替換節點RNi向集群中任意k個存活節點發出請求,獲取這k個存活節點的第rowstep+i個條塊,分別記為B1,…,Bk,其中k為系統中數據節點的數量;(3)替換節點RNi使用條塊B1,...,Bk根據下式計算出屬于集群的第rowstep+i個條帶的f個失效塊,分別記為RBratstel^1,…,RBrowstep+i,f:RBrow,j = DECj(B1,...,Bk)其中DECO代表水平編碼算法的解碼操作,row表示正在處理的是集群中第row個條帶的各個條塊,j表示通過這次解碼操作計算出來的是第j個替換節點上的失效塊,且有j=l,…,f ;(4)替換節點RNi將失效塊RBratstel^i寫入本地磁盤,成為本地的第rowstep+i個條塊;(5)替換節點RNi將失效塊
^^rowstep+i, I j ^^rowstep+i, 1-1 ^^rowstep+i, i+1 j ^^rowstep+i, f
一一對應地發送給替換節點RN1,…,RNi+ RNi+1,…,RNf,同時替換節點RNi接收從替換節點RN1, -, RNi^1, RNi+1,…,RNf發來的各一個失效塊,一一對應地記為RBratstel^i,…,
RRRR...RR-
^-^rowstep+1-l, i ^-^rowstep+i+l, i ,^-^rowstep+f, i (6)替換節點RNi將 在步驟(5)中從其他替換節點接收到的f_l個失效塊寫入本地磁盤;(7)替換節點RNi將自身條帶號的基準值rowstep加f ;(8)替換節點尺隊判斷是否已恢復所有條塊,若是,則返回步驟(2),否則過程結束。條塊B1,…,Bk可以是數據塊,也可以是冗余塊。水平編碼算法包括CRS和VRS算法。步驟(3 )具體為,第i個替換節點RNi取row的值為rowstep+i ,然后依次取
j=l,…,f,分別計算出f個失效塊 RBrowstep+i,I, ,RBrowstep+i,f ο通過本發明所構思的以上技術方案,與現有技術相比,本發明具有以下的有益效果:(I)網絡帶寬的開銷小:由于在步驟(2)中讓一個替換節點只向獲取存活節點獲取一部分數據,所以減少了重復的數據在網絡中的傳輸量,從而減少了對網絡帶寬的占用。(2)重構速度的加快使得集群可靠性良好:由于替換節點的網絡帶寬是制約重構速度的瓶頸,步驟(2)帶來的小的網絡帶寬開銷能讓替換節點縮短重構時間,減小集群在重構期間出現下一個失效節點的可能,從而提高了集群的可靠性。(3)可擴展性良好:由步驟(2)和步驟(5)可知,當集群中同時失效的節點數量增多時,每個替換節點需要向存活節點獲取的數據量將減小,替換節點兩兩之間相互傳遞已被重構出來的數據,保證了失效數據能夠被完整恢復,因此本發明方法在失效節點個數越多的情況下重構速度越快,從而具有良好的可擴展性。
圖1為現有糾刪碼集群存儲系統的數據條帶化分布與重構示意圖;圖2為本發明基于糾刪碼集群存儲系統的交叉重構方法的流程圖;圖3為本發明方法的數據流向示意圖。
具體實施方式
為了使本發明的目的、技術方案及優點更加清楚明白,以下結合附圖及實施例,對本發明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發明,并不用于限定本發明。首先給出本發明相關概念的定義: 條帶:在糾刪碼中,條帶是可以獨立地恢復出失效數據的信息集合。 條塊:處于同一存儲設備上的屬于同一條帶的數據的集合。一個條塊可以只包含數據或者冗余,也可以同時包含數據和冗余。本發明方法使用水平編碼,一個條塊只包含數據或者冗余。 水平編碼:一種糾刪碼,所有數據塊和校驗塊在同一條帶上。 數據塊:只存儲原始數據的條塊,本說明書使用DBra^i表示屬于第row個條帶且位于第i個數據節點的數據塊。 冗余塊:只存儲冗余數據的條塊,本說明書使用PBratii表示屬于第row個條帶且位于第i個冗余節點的冗余塊。 數據節點:存儲數據塊的節點,本說明書使用DNi來表示第i個數據節點。 冗余節點:存儲冗余塊的節點,本說明書使用PNi來表示第i個冗余節點。 失效節點:集群中由于存儲介質損壞、網絡故障或者宕機等原因而不可使用的節點。 存活節點:集群中能正常工作的節點。 替換節點:新加 入集群中用來替換失效節點的節點,本說明書使用RNi表示第i個替換節點。 失效數據:位于失效節點上的數據。 重構:在替換節點上進行的恢復失效數據的操作。 失效塊:位于失效節點上的條塊。特別地,本說明書中也使用“失效塊”來稱呼被重構過程計算得到的條塊,它與被失效節點丟失的條塊在信息上是完全一致的,說明書中用RBrat, i來表示屬于集群中第row個條帶且位于第i個替換節點上的失效塊。本發明提供的一種基于糾刪碼集群存儲系統的交叉重構方法使用IRS(k,r, f)表示,k, r, f均為正整數。其中k是數據節點的個數,r是冗余節點的個數,f是失效節點的個數,也是替換節點的個數。該方法讓多個替換節點在重構過程中相互合作,以達到減少網絡帶寬開銷,加快重構速度的目的,適用于集群中同時出現多個節點失效的情況。如圖2所示,本發明基于糾刪碼集群存儲系統的交叉重構方法包括以下步驟:(I)糾刪碼集群存儲系統的第i個替換節點RNi將自身條帶號的基準值rowst印初始化為0,其中i=l,…,f,f為系統中失效節點的數量;具體而言,集群中每個替換節點都執行本發明方法所示的步驟,這里使用標號i來表示可以任意選取一個替換節點;(2)替換節點RNi向集群中任意k個存活節點發出請求,獲取這k個存活節點的第rowstep+i個條塊,分別記為B1,…,Bk,其中k為系統中數據節點的數量;具體而言,條塊B1,…,Bk可以是數據塊,也可以是冗余塊;(3)替換節點RNi使用條塊B1,...,Bk根據下式計算出屬于集群的第rowstep+i個條帶的f個失效塊,分別記為RBratstel^1,…,RBMwstep+i,f。RBrow;j = DECj(B1, -,Bk)
上式中,DECO代表一種水平編碼算法,包括CRS (Cauchy Reed-Solomon), VRS(Vandermonde Reed-Solomon)等的解碼操作,它可以計算出f個失效塊,下標row表示正在處理的是集群中第row個條帶的各個條塊,下標j表示通過這次解碼操作計算出來的是第j個替換節點上的失效塊,其中j=l,…,f ;具體而言,第i個替換節點RNi取row的值為 rowstep+i,然后依次取 j=l,..., f,分別計算出 f 個失效塊 RBrowste3^1,..., RBrowstep+i;f ;因為替換節點RNi表示集群中的任意一個替換節點,因此到本步驟結束時為止替換節點RNi計算得到屬于第rowstep+i個條帶的f個失效塊ABratste^1…,RBrowste^f ;替換節點RN2計算得到屬于第rowstep+2個條帶的f個失效塊=RBratstelrtu,..., RBrowstep+2;f,依次類推;(4)替換節點RNi將失效塊RBratstel^i寫入本地磁盤,成為本地的第rowstep+i個條塊;(5)替換節點RNi將失效塊
^^rowstep+i, I j ^^rowstep+i, 1-1 ^^rowstep+i, i+1 j ^^rowstep+i, f
一一對應地發送給替換節點RN1,…,RNh,RNi+1,…,RNf,在這里,替換節點的標號與失效塊的第2個下標對應,表示替換節點RNi將屬于第rowstep+i個條帶的失效塊發送給其他替換節點;同時,替換節點RNi接收從替換節點RN1,…,RNi^1, RNi+1,…,RNf發來的各一個失效塊,--對應地記為
^■^rowstep+1, i ,^-^rowstep+1-lJ i,^-^rowstep+i+1, i ,^^rowstep+f, i
在這里,
替換節點的標號與失效塊的第I個下標對應,表示其他替換節點將應該位于第i個失效節點上的失效塊發送給第i個替換節點RNi ;(6)替換節點RNi將在步驟(5)中從其他替換節點接收到的f_l個失效塊寫入本地磁盤;具體而言,到步驟(6)結束為止 ,替換節點RNi完成了對本地磁盤的第rowstep+i個到第rowstep+f個條塊的恢復;因為替換節點RNi表示集群中的任意一個替換節點,所以到步驟(6)結束為止,集群中的第rowstep+i個到第rowstep+f個條帶都已經被恢復;(7)替換節點RNi將自身條帶號的基準值rowstep加f ;(8)替換節點RNi判斷是否已恢復所有條塊,若是,則返回步驟(2),否則過程結束;具體而言,從步驟(2)到步驟(6),集群完成對當前f個條帶的恢復,之后以f為步長遞增rowstep進行接下來的循環,每一輪循環順序恢復f個條帶。為了使本發明方法更容易理解,下面結合圖3所示的實施例1RS(k,r,2)來說明。圖3為出現兩個失效節點(f=2)的情況下,本發明方法的數據流向示意圖。如圖3所示,DN1, -,DNk為數據節點,PN1, -,PNr為冗余節點,其中數據節點DN1和DN2失效,替換節點RN1和RN2進行交叉重構來替換失效節點DN1和DN2。圖3下方的虛線方框里是替換節點RNi和RN2在交叉重構中根據步驟(2)到(6) —次循環計算出來的失效塊,箭頭為數據流向。為了便于顯示,圖3將替換節點RN1和RN2的條帶號基準rowstep設置為O,并指定替換節點RN1獲取DN3, -,DNk, PN1, PN2這k個存活節點的第I個條塊,即條塊DB3,…,DBk7PB17PB2 ;同樣指定替換節點RN2獲取上述k個存活節點的第2個條塊。接著,替換節點RN1計算出屬于第I個條帶的2個失效塊RB1;1和RB1^并將失效塊RB1;1寫入本地磁盤,成為替換節點RN1的第I個條塊;替換節點RN2計算出屬于第2個條帶的2個失效塊RB2il和RB2j2,并將失效塊RB2,2寫入本地磁盤,成為替換節點RN2的第2個條塊。此時,替換節點RN1多余的失效塊RBy是替換節點RN2需要的,替換節點RN2多余的失效塊RB2;1是替換節點RN1需要的。于是替換節點RN1和RN2相互交換上述2個失效塊。失效塊RB。成為替換節點RN1的第2個條塊,失效塊RBli2成為替換節點RN2的第I個條塊。所以整個集群的第I個和第2個條帶被完整恢復。替換節點RN1和RN2互相交換各自缺少的失效塊,是本發明方法被稱為交叉重構的含義所在。本領域的技術人員容易理解,以上所述僅為本發明的較佳實施例而已,并不用以限制本發明,凡在本發明的精神和原則之內所作的任何修改、等同替換和改進等,均應包含在本發明的保護范圍之內。
權利要求
1.一種基于糾刪碼集群存儲系統的交叉重構方法,其特征在于,包括以下步驟: (O糾刪碼集群存儲系統的第i個替換節點RNi將自身條帶號的基準值rowstep初始化為0,其中i=l,…,f,f為系統中失效節點的數量; (2)替換節點RNi向集群中任意k個存活節點發出請求,獲取這k個存活節點的第rowstep+i個條塊,分別記為B1,…,Bk,其中k為系統中數據節點的數量; (3)替換節點RNi使用條塊B1,...,Bk根據下式計算出屬于集群的第rowstep+i個條帶的f個失效塊,分別記為RBratstel^1,…,RBrowstep+i, f.RBrow, j = DECj (B1,…,Bk) 其中DECO代表水平編碼算法的解碼操作,row表示正在處理的是集群中第row個條帶的各個條塊,j表示通過這次解碼操作計算出來的是第j個替換節點上的失效塊,且有j=l,…,f ; (4)替換節點RNi將失效塊RBrowstep+i,i寫入本地磁盤,成為本地的第rowst印+i個條塊; (5)替換節點RNdf失效塊^^rowstep+i, I ,^^rowstep+i, 1-1 ^^rowstep+i, i+1 ,^^rowstep+i, f一一對應地發送給替換節點RN1,…,RNi+ RNi+1,…,RNf,同時替換節點RNi接收從替換節點RN1, -, RNi^1, RNi+1,…,RNf發來的各一個失效塊,一一對應地記為RBratstel^i,…,RRRR...RR-^-^rowstep+1-l, i ^-^rowstep+i+l, i ,^-^rowstep+f, i(6)替換節點RNi將在步驟(5)中從其他替換節點接收到的f-Ι個失效塊寫入本地磁盤; (7)替換節點RNi將自身條帶號的基準值rowstep加f; (8)替換節點RNi判斷是否已恢復所有條塊,若是,則返回步驟(2),否則過程結束。
2.根據權利要求1所述的交叉重構方法,其特征在于,條塊B1,…,Bk可以是數據塊,也可以是冗余塊。
3.根據權利要求1所述的交叉重構方法,其特征在于,水平編碼算法包括CRS和VRS算法。
4.根據權利要求1所述的交叉重構方法,其特征在于,步驟(3)具體為,第i個替換節點RNi取row的值為rowstep+i,然后依次取j=l,..., f,分別計算出f個失效塊"RR..."RRjAurowsl:ep+i,I,,ivi^rOwstep+!, f °
全文摘要
本發明公開了一種基于糾刪碼集群存儲系統的交叉重構方法,包括第i個替換節點RNi將自身條帶號的基準值rowstep初始化為0,替換節點RNi向集群中任意k個存活節點發出請求,獲取這k個存活節點的第rowstep+i個條塊,分別記為B1,…,Bk,替換節點RNi使用條塊B1,…,Bk計算出屬于集群的第rowstep+i個條帶的f個失效塊,分別記為RBrowstep+i,1,…,RBrowstep+i,f,替換節點RNi將失效塊RBrowstep+i,i寫入本地磁盤,成為本地的第rowstep+i個條塊。本發明能夠降低網絡帶寬開銷和加快重構速度。
文檔編號G06F11/14GK103106124SQ20121059129
公開日2013年5月15日 申請日期2012年12月29日 優先權日2012年12月29日
發明者黃建忠, 曹強, 謝長生, 黃思倜, 張峰豪 申請人:華中科技大學