程可表示為(k+r,k)4(V ,r7 );本發(fā)明中,舊節(jié)點是指擴(kuò)容前RS糾刪碼集群中的節(jié)點,新增節(jié)點是指擴(kuò)容時向RS糾刪碼集群中增加的節(jié)點;新條帶是指擴(kuò)容過程中經(jīng)過糾刪編碼生成的條帶,舊條帶是指擴(kuò)容前的條帶。
[0041]預(yù)分配緩沖區(qū):預(yù)先在節(jié)點的內(nèi)存中申請固定大小的連續(xù)內(nèi)存,用以臨時保存數(shù)據(jù);在本發(fā)明中,為RS糾刪碼集群中的所有節(jié)點預(yù)分配內(nèi)存,緩充客戶端讀請求的數(shù)據(jù)分塊;在響應(yīng)客戶端的同時,迀移緩存中的數(shù)據(jù)分塊實現(xiàn)RS糾刪碼集群存儲擴(kuò)容,從而整體上優(yōu)化客戶端響應(yīng)性能和擴(kuò)容效率。
[0042]元數(shù)據(jù)服務(wù)器:維護(hù)一個全局的元數(shù)據(jù)分配表,元數(shù)據(jù)分配表中的每條記錄格式如(節(jié)點號,塊號,條帶號,flag(標(biāo)記位于新條帶還是舊條帶)),用于管理新條帶分塊和舊條帶分塊;當(dāng)響應(yīng)客戶端讀數(shù)據(jù)請求時,客戶端首先與RS糾刪碼集群中的元數(shù)據(jù)服務(wù)器交互,查找目標(biāo)數(shù)據(jù)分塊所在位置,以及該目標(biāo)數(shù)據(jù)分塊所在的條帶。如果位于新條帶,從RS糾刪碼集群的節(jié)點上讀取目標(biāo)數(shù)據(jù)分塊時無需再發(fā)送到新增節(jié)點,否則需要將目標(biāo)數(shù)據(jù)分塊發(fā)送到新增節(jié)點進(jìn)行計算校驗;新條帶分塊的重新分布以及舊條帶分塊迀移都需要更新元數(shù)據(jù)記錄表,確保全局?jǐn)?shù)據(jù)一致性。
[0043]RS糾刪碼編碼校驗過程:根據(jù)同一條帶中數(shù)據(jù)分塊計算出校驗分塊的過程,若用f
表不計算過程,則編碼過程可以表不為f (Do, j,Di, j,......,Dk—1’j) — (Po, j,Pi, j,......,Pr—1’j),
其中Di, j,Pi, j分別表不條帶j中的第i個數(shù)據(jù)分塊和第i個校驗分塊。
[0044]圖2所示,是糾刪集群響應(yīng)客戶端請求示意圖;客戶端首先訪問元數(shù)據(jù)服務(wù)器查找客戶端讀請求的數(shù)據(jù)所在的數(shù)據(jù)分塊,當(dāng)該數(shù)據(jù)分塊位于舊條帶時,將該數(shù)據(jù)分塊從磁盤中讀入緩存,并將該數(shù)據(jù)分塊中的客戶端請求的數(shù)據(jù)發(fā)送到客戶端,同時將該數(shù)據(jù)分塊發(fā)送給新增節(jié)點。
[0045]圖3所示,是本發(fā)明條帶上的分塊迀移示意圖,如圖3(a)所示,舊節(jié)點緩存的數(shù)據(jù)分塊向新增節(jié)點迀移,RS糾刪碼集群中的每個舊節(jié)點依次向新增節(jié)點發(fā)送數(shù)據(jù)分塊,如圖3(b)所示,各個新增節(jié)點將計算得到的整個新條帶中的部分校驗分塊發(fā)送回舊節(jié)點以及部分?jǐn)?shù)據(jù)分塊發(fā)送回其它新增節(jié)點。
[0046]以下結(jié)合實施例進(jìn)一步闡述本發(fā)明提供的糾刪碼存儲集群擴(kuò)容方法,實施例中,糾刪集群實現(xiàn)(4,2) — (6,3)擴(kuò)容,即Ak = 2,Ar=l,擴(kuò)容方法的流程如圖4所示,具體包括如下步驟:
[0047](1)客戶端請求的數(shù)據(jù)分塊(1(),(11,‘",(15依次位于節(jié)點他小1,‘",他的磁盤分區(qū),并位于舊條帶上;響應(yīng)客戶端讀數(shù)據(jù)請求,包括如下子步驟:
[0048](1.1)從舊節(jié)點No,N1,…,池磁盤分區(qū)中依次讀取對應(yīng)的數(shù)據(jù)塊do,cU,…,d5,放到相應(yīng)節(jié)點的緩存中,記為do*,cU'…,d5*;
[0049](1.2)將緩存中客戶端請求的數(shù)據(jù)發(fā)送給客戶端;
[0050](1.3)將緩存中數(shù)據(jù)分塊do'cU*,...,#依次發(fā)送到新增節(jié)點SNo,如圖5所示;下一次將從舊條帶讀取的數(shù)據(jù)分塊均發(fā)送到SN1,依此循環(huán),直到客戶端讀請求結(jié)束;
[0051](2)糾刪校驗計算與分塊重新分布過程,包括如下兩個子步驟:
[0052](2.1)新增節(jié)點SNo緩存中接收到整個新條帶的全部數(shù)據(jù)分塊do'cU*,...,^*,根據(jù)糾刪編碼過程計算校驗分塊,即ri* = f (do*,di*,…,d5*);其中,i = O,I,2;
[0053](2.2)整個新條帶的分塊重新分布,新增節(jié)點SNo將校驗分塊ro*存入本地磁盤分區(qū),將數(shù)據(jù)分塊do*發(fā)送到其余的新增節(jié)點SN1,將數(shù)據(jù)分塊CU*發(fā)送到新增節(jié)點SN2;
[0054](2.3)新增節(jié)點SN1接收數(shù)據(jù)分塊do*,SN2接收數(shù)據(jù)分塊cU'將數(shù)據(jù)分塊均存入緩存分區(qū),并寫入磁盤分區(qū);
[0055](2.4)新增節(jié)點SNo將校驗分塊η*發(fā)送給No,r/發(fā)送給節(jié)點N1;節(jié)點No接收校驗分塊η*并替換掉磁盤中的數(shù)據(jù)分塊do,回收緩存中相應(yīng)的數(shù)據(jù)分塊dQ%節(jié)點N1接收校驗分塊r/并換替換掉磁盤中的數(shù)據(jù)分塊di,回收緩存中的數(shù)據(jù)分塊di%
[0056](2.5)更新元數(shù)據(jù)管理器,記錄新條帶中各個分塊的位置。
[0057]上述步驟(1.2)、(1.3)之間不存在制約,可并行執(zhí)行,提高吞吐率;重復(fù)上述步驟
(I)?(2),在響應(yīng)客戶端讀請求的同時,高效完成熱數(shù)據(jù)從舊節(jié)點到新增節(jié)點迀移,實現(xiàn)所有集群節(jié)點熱數(shù)據(jù)以及同一條帶的數(shù)據(jù)分塊和校驗分塊均勻分布。
[0058]本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【主權(quán)項】
1.一種基于數(shù)據(jù)緩存的糾刪碼集群存儲擴(kuò)容方法,其特征在于,具體包括如下步驟: (1)根據(jù)客戶端讀數(shù)據(jù)請求,在元數(shù)據(jù)服務(wù)器上定位目標(biāo)數(shù)據(jù)分塊所在的節(jié)點;并判斷該目標(biāo)數(shù)據(jù)分塊是否命中該節(jié)點的緩存; 將命中緩存的數(shù)據(jù)分塊直接返回給客戶端;對于未命中緩存的數(shù)據(jù)分塊,則將其從磁盤讀取到緩存;若從磁盤讀取的數(shù)據(jù)分塊處于新條帶,則將其從緩存發(fā)送到客戶端,若從磁盤讀取的數(shù)據(jù)分塊處于舊條帶,則在將其發(fā)送到客戶端,并發(fā)送到新增節(jié)點; (2)新增節(jié)點根據(jù)接收到的舊數(shù)據(jù)分塊,采用RS糾刪編碼計算得到新校驗分塊;由所述舊數(shù)據(jù)分塊和新校驗分塊構(gòu)成新條帶;將新條帶上的分塊均勻分布到存儲集群的各節(jié)點;所述舊數(shù)據(jù)分塊指的是新增節(jié)點接收的處于舊條帶的數(shù)據(jù)分塊。2.如權(quán)利要求1所述的糾刪碼集群存儲擴(kuò)容方法,其特征在于,在所述步驟(I)之前,還包括初始化步驟:為每個集群節(jié)點分配緩存,在集群中指定一個節(jié)點作為元數(shù)據(jù)服務(wù)器用來管理集群中的節(jié)點,并維護(hù)一個全局?jǐn)?shù)據(jù)分配表;所述全局?jǐn)?shù)據(jù)分配表用于管理存儲集群中所有分塊的放置位置,以及各分塊所屬的條帶。3.如權(quán)利要求1所述的糾刪碼集群存儲擴(kuò)容方法,其特征在于,所述步驟(I)具體包括如下子步驟: (1.1)元數(shù)據(jù)服務(wù)器根據(jù)接收到的讀數(shù)據(jù)請求,判斷存儲集群中是否存在請求所包含的目標(biāo)數(shù)據(jù)分塊;若是,則進(jìn)入步驟(1.2);若否,則接收下一條客戶端讀數(shù)據(jù)請求; (1.2)查找目標(biāo)數(shù)據(jù)分塊在集群節(jié)點所處的位置以及目標(biāo)數(shù)據(jù)分塊所在的條帶; (1.3)判斷在該集群節(jié)點的緩存中是否命中目標(biāo)數(shù)據(jù)分塊,若是,將緩存中的目標(biāo)數(shù)據(jù)分塊發(fā)送給客戶端;若否,則進(jìn)入步驟(1.4); (1.4)從磁盤中讀取目標(biāo)數(shù)據(jù)分塊發(fā)送到緩存,并判斷目標(biāo)數(shù)據(jù)分塊是否位于舊條帶,若是,則將目標(biāo)數(shù)據(jù)分塊發(fā)送到新增節(jié)點的緩存,同時將目標(biāo)數(shù)據(jù)分塊發(fā)送到客戶端;若否,則直接將目標(biāo)數(shù)據(jù)分塊發(fā)送到客戶端。4.如權(quán)利要求1或2所述的糾刪碼集群存儲擴(kuò)容方法,其特征在于,所述步驟(2)具體包括如下子步驟: (2.1)往存儲集群中添加新節(jié)點,以在物理上增加存儲集群的容量; (2.2)新增節(jié)點接收并緩存I日數(shù)據(jù)分塊; (2.3)判斷新增節(jié)點緩存中接收到的數(shù)據(jù)分塊數(shù)目是否達(dá)到閾值;若是,則采用RS糾刪編碼方法生成新校驗分塊;若否,則進(jìn)入步驟(2.2);其中,閾值是指一個完整新條帶中的數(shù)據(jù)分塊數(shù)目; (2.4)將新條帶上的分塊均勻分布到存儲集群的各個節(jié)點,使得分塊在存儲集群各節(jié)點間傳輸所產(chǎn)生的網(wǎng)絡(luò)開銷最小。5.如權(quán)利要求4所述的糾刪碼集群存儲擴(kuò)容方法,其特征在于,步驟(2.4)具體包括如下子步驟: (2.4.1)新增節(jié)點將緩存中的一個校驗分塊寫入磁盤,將(△ k+ △ r-Ι)個數(shù)據(jù)分塊發(fā)送到其他新增節(jié)點;將r’-l個校驗分塊寫回舊條帶所在節(jié)點的磁盤,并替換所在節(jié)點上的舊數(shù)據(jù)分塊; 其中,Ak是新條帶相比舊條帶增加的數(shù)據(jù)分塊數(shù),Ar是新條帶相比舊條帶增加的校驗分塊數(shù),r ’是新條帶中的新校驗分塊數(shù); (2.4.2)當(dāng)新條帶中全部的數(shù)據(jù)分塊和校驗分塊寫入存儲集群節(jié)點的磁盤時,更新元數(shù)據(jù)服務(wù)器中的全局?jǐn)?shù)據(jù)分配表。
【專利摘要】本發(fā)明公開了一種基于數(shù)據(jù)緩存的糾刪碼集群存儲擴(kuò)容方法,包括響應(yīng)用戶讀請求、遷移緩存數(shù)據(jù)分塊和更新校驗分塊的步驟;遷移舊節(jié)點緩存中的數(shù)據(jù)分塊,同時利用新節(jié)點生成新條帶中的校驗分塊,實現(xiàn)擴(kuò)容后存儲集群中各個節(jié)點的負(fù)載均衡;每個計算校驗分塊的節(jié)點本地磁盤保存一個校驗分塊,其他的校驗分塊發(fā)送給舊節(jié)點替換掉條帶中的數(shù)據(jù)分塊,條帶中其余數(shù)據(jù)分塊在舊節(jié)點的位置保持不變,當(dāng)一個新條帶分塊均勻分布在集群各節(jié)點后,熱數(shù)據(jù)分塊從舊節(jié)點遷移到新增節(jié)點,由此最小化條帶分塊重新分布帶來的網(wǎng)絡(luò)傳輸流量開銷;緩存數(shù)據(jù)分塊遷移支持熱點數(shù)據(jù)在所有節(jié)點上的均勻分布,有效提高集群節(jié)點的并行訪問效率;新增節(jié)點利用接收的緩存數(shù)據(jù)分塊生成校驗分塊,分散計算操作的同時可減少新校驗分塊的網(wǎng)絡(luò)傳輸量;充分利用緩存數(shù)據(jù)來減少存儲擴(kuò)容時的舊數(shù)據(jù)分塊讀取,可及時響應(yīng)客戶端請求,且能提高擴(kuò)容效率。
【IPC分類】G06F3/06
【公開號】CN105630423
【申請?zhí)枴緾N201511000387
【發(fā)明人】黃建忠, 曹強(qiáng), 謝長生, 黃文勝, 王爽
【申請人】華中科技大學(xué)
【公開日】2016年6月1日
【申請日】2015年12月25日