一種基于寫重定向的糾刪碼存儲重構優化方法
【專利摘要】本發明公開了一種基于寫重定向的糾刪碼存儲重構優化方法,將寫入失效數據節點的數據重定向到由存活節點空余空間所組成的RS陣列,將數據重定向過程與包括失效數據節點的重構、重定向數據的遷移以及遷移所引起的校驗數據更新的數據遷移過程分開處理,降低二者對磁盤、內存、網絡帶寬等資源的競爭,在加速后臺重構過程的同時,優化前臺用戶訪問性能。
【專利說明】—種基于寫重定向的糾刪碼存儲重構優化方法
【技術領域】
[0001]本發明屬于計算機存儲領域,更具體地,涉及一種基于寫重定向的糾刪碼存儲重構優化方法。
【背景技術】
[0002]廉價冗余磁盤陣列RAID (Redundant Array of Independent Disk)是將多個磁盤進行連接,構成具有一定容錯能力的存儲設備。構成RAID的多個磁盤驅動器在邏輯上可以看成是一個磁盤驅動器,各個磁盤可以同時工作,提高I/O并行性。RAID大多提供一定的校驗技術,在一定數量的磁盤數據丟失的情況下,解碼出丟失數據,達到容錯的目的。一般地,數據恢復操作和用戶I/O相互影響。一方面,在丟失數據恢復的過程中,磁盤陣列的讀寫性能將降低;另一方面,相對于離線重構模式,在線重構的時間也將增加,原因在于用戶I/O對磁盤、網絡和內存等資源的競爭。另外,研究表明,RAID系統中的磁盤錯誤存在“爆發”式特性,即當一個磁盤失效后,同一系統中的其它磁盤失效的概率將增大;此外,在高負載強度的重構過程中,存活磁盤發生失效的概率將進一步提高。
[0003]如圖1所示,在(k+r,k)糾刪碼存儲集群中,含k個數據節點,r個校驗節點。集群內數據分布示意圖如圖2所示。失效寫(Missed Writes)表示往失效數據節點中寫入數據。參看圖3,失效寫的傳統處理過程如下:(1)接收用戶寫數據請求,得到所寫分塊數據在糾刪碼集群的具體位置(即某數據節點上的某偏移地址)和所寫入數據(以下稱為新數據);
(2)將新數據寫入替代數據節點的相應磁盤位置;(3)從k-Ι個存活節點讀取所對應的分塊數據;(4)由該k-Ι個存活分塊數據和新數據分塊計算出其余r個節點對應位置分塊數據,并發送至r個節點,該r個節點完成數據更新;(5)返回更新操作的結果(成功或失效)。圖4給出該傳統糾刪碼存儲集群中數據寫的流程圖。
[0004]傳統糾刪碼存儲集群中的寫失效數據過程存在以下問題:
[0005]1、寫失效數據節點過程與失效數據重構過程同時進行,兩個過程之間相互競爭網絡帶寬、磁盤、內存等資源,重構時間隨之增加,從而降低了系統可靠性。
[0006]2、用戶的寫請求涉及失效數據恢復、新數據寫入,以及校驗數據更新等三方面操作,因此用戶寫請求的響應時間也會增大。
【發明內容】
[0007]針對傳統失效寫方法存在的不足,本發明提供一種糾刪碼存儲中寫失效數據節點的優化方法,其不僅能夠保證失效數據節點的重構性能,而且能降低用戶失效寫的響應時間。
[0008]為實現以上發明目的,本發明采用以下技術方案:
[0009]一種基于寫重定向的糾刪碼存儲重構優化方法,包括數據重定向過程和數據遷移過程。
[0010]重定向過程包括以下步驟:[0011](Al)接收用戶寫失效數據節點的用戶請求記錄;
[0012](A2)將用戶請求記錄寫入空余RS陣列數據區;
[0013](A3)更新空余RS陣列校驗區域;
[0014](A4)返回用戶寫失效數據節點請求結果,判斷用戶請求是否結束,如果結束,則程序結束,否則轉入步驟(Al)。[0015]數據遷移過程與重定向過程分開處理。數據遷移過程包括失效數據節點的重構、重定向數據的遷移,以及遷移數據所導致的校驗更新三個子過程。重定向數據遷移過程包括以下步驟:
[0016](BI)判斷糾刪碼存儲集群中失效數據節點數據是否恢復完成。若恢復完成,則轉入步驟(B6),否則轉入步驟(B2);
[0017](B2)假設寫入失效數據節點node的失效數據塊是Di,」,記錄其偏移地址為offset ;
[0018](B3)讀取任意k個存活節點偏移位置為offset的數據塊Dlij (I ! =i);
[0019](B4)從該k個存活分塊數據解碼出失效數據分塊Di, j ;并將數據Di, j寫入數據節點node的替代節點node’中偏移地址為offset的位置;
[0020](B5)判斷失效節點的數據是否恢復完成。若沒有完成,則轉入至步驟(B2),否則轉入步驟(B6);
[0021](B6)讀取RS陣列中用戶請求記錄(包括node、offset、newdata等信息);
[0022](B7)從替代數據節點node’中偏移位置為offset處讀取數據分塊olddata ;
[0023](B8)在替代節點node’中偏移位置為offset處寫入新數據分塊newdata ;
[0024](B9)將新舊數據分塊(olddata和newdata)發送至各校驗節點,各校驗節點利用新舊數據分塊結合已有校驗分塊,采用校驗數據更新算法實現校驗數據的更新;
[0025](BlO)讀取空閑RS陣列中下一條用戶請求記錄,并判斷是否結束,若未結束,則轉入至步驟(B6);否則轉入步驟(BII)。
[0026](BH)數據遷移過程結束。
[0027]與現有失效寫技術相比,本發明具有以下有益效果:
[0028]1、在重定向過程中,使用存活節點空余磁盤空間構成空余RS陣列,如步驟(Al)。將寫入失效數據節點的數據重定向到該RS陣列中,如步驟(A3),并完成空閑RS陣列中的校驗部分的更新,如步驟(A4)。這種由空閑磁盤區域構成的RS陣列能夠提高重定向數據的可靠性。
[0029]2、在重定向過程中,將用戶寫入失效數據節點的數據重定向到空閑RS陣列中后,用戶請求立即返回,如步驟(A5),縮短了用戶請求的響應時間。
[0030]3、將重定向過程和數據遷移過程分開處理,兩過程相互獨立,減少了兩個過程對內存、磁盤、網絡帶寬等資源的競爭,確保了重構1/0和用戶1/0之間的相互獨立,從整體上優化重構性能和用戶響應時間。
【專利附圖】
【附圖說明】
[0031]參照下面的說明,結合附圖,可以對本發明有最佳的理解。在附圖中,相同的部分可由相同的標號表不。[0032]圖1為(k+r,k)糾刪碼存儲集群磁盤示意圖。
[0033]圖2為糾刪碼存儲集群中各節點數據分塊示意圖。
[0034]圖3為傳統糾刪碼存儲集群寫數據示意圖。
[0035]圖4為傳統糾刪碼存儲集群寫數據流程圖。
[0036]圖5為本發明糾刪碼存儲集群寫數據示意圖。
[0037]圖6為本發明糾刪碼存儲集群重定向過程流程圖。
[0038]圖7為本發明糾刪碼存儲集群數據遷移過程流程圖。
[0039]圖8為RS (9,6)編碼實施例示意圖。
【具體實施方式】
[0040]為了使本發明的目的、技術方案及優點更加清楚明白,以下結合附圖及示例性實施例,對本發明進行進一步詳細說明。應當理解,此處所描述的示例性實施例僅用以解釋本發明,并不用于限定本發明的適用范圍。
[0041]以下首先就本發明的技術術語進行解釋和說明:
[0042]寫懲罰:在寫數據節點的過程中,由于數據節點中數據分塊內容的改變,根據糾刪碼的編碼存儲方式,校驗節點對應位置的數據分塊也要隨之改變,帶來額外的校驗節點的寫操作。如圖l(k+r,k)糾刪碼存儲集群磁盤示意圖所示,磁盤陣列包含k個數據節點,分別標記為“數據節點0”,“數據節點1”,……,“數據節點k-1” ;r個校驗節點,分別標記為“校驗節點0”,“校驗節點1”,……,“校驗節點r-1’。圖2為圖1對應各節點的數據分塊示意圖,Di.j表示數據節點i中偏移位置為j*512字節處的數據塊,Pi,j-表示校驗節點i中偏移位置為j*512字節處的數據塊。數據節點中數據塊D0.j,D1,j、……Dk-1,1和校驗節點中數據塊P0.j,P1,j、……、Pr-1,j構成一個條帶。Po.j,P1,j、……、存放由D0.j,D1,j,……Dk-1,j編碼得到的校驗數據。寫懲罰即為當Di,j (0〈=i〈k)中數據發生改變時,條帶中校驗節點數據Poj,P1,j……、Pr-1,j也隨之發生改變,而帶來額外的寫操作。
[0043]偏移位置:數據分塊的偏移位置為數據分塊在低地址處的起始位置。如圖2各節點數據分塊示意圖所示,數據分塊的大小為512字節,則Dij的偏移位置為j*512字節。糾刪碼集群中的數據讀寫最小單位為數據分塊,即512字節。
[0044]編解碼過程:編碼過程為根據所有數據節點中特定數據分塊計算出同一條帶中對應位置校驗節點數據分塊塊的過程。在圖2各節點數據分塊示意圖中,若用f表示計算過
程,貝1J編碼過程可以表不為f (D0j , Dlj ,......,Dk-1,j)— (Po,j,P1,j,......,Pr-1,j)。解碼過
程為編碼過程的逆過程,即在存活節點(未失效的數據節點和校驗節點)數量大于等于k的情況下,任意選取k個存活節點數據分塊,計算出同一條帶中其它節點數據分塊的過程。
[0045]RS陣列:RS類糾刪碼為三大糾刪碼中的一種,具有很強的糾錯能力,包括范德蒙碼和柯西碼兩種編碼方式。RS陣列即為使用RS類糾刪碼進行數據校驗的磁盤陣列。
[0046]在本發明實施例中,選定m個存活節點,利用該m個節點的空余空間構成空余RS陣列,用于存儲用戶的請求。總體思路為:將寫入失效數據節點的數據重定向到由存活節點空余空間所組成的RS陣列(以下稱為重定向RS陣列)中,以保障重定向數據的可靠性。本發明將數據重定向過程(以下稱之為重定向過程)與其后續過程(包括失效數據節點的重構、重定向數據的遷移,以及遷移所引起的校驗數據更新,以下稱之為數據遷移過程)分開處理,降低二者對磁盤、內存、網絡帶寬等資源的競爭,在加速后臺重構過程的同時,優化前臺用戶訪問性能。
[0047]如圖3所示,為傳統糾刪碼寫數據過程示意圖。其中,DO數據節點為失效數據節點,D0’為DO失效數據節點的替代節點。標有的數據塊為失效數據塊,標有“**”的數據塊為用戶請求寫入的數據塊。圖中數字表示傳統糾刪碼寫過程的具體步驟。
[0048]如圖5所示,為本發明糾刪碼存儲集群寫數據示意圖。其中DO數據節點為失效數據節點,D0’為DO失效數據節點的替換節點。標有的數據塊為失效數據塊,標有“**”的數據塊為用戶請求寫入的數據塊。圖中數字如“A1”、“A2”、“A3”為重定向過程步驟號碼,圖中數字為“Β1”、“Β2”、“Β3”等為數據遷移過程步驟號碼。空余空間RS陣列為由存活節點空余空間構成的具有一定容錯能力的磁盤陣列,整個空余RS陣列的起始偏移地址為baseoffset,即重定向的基準偏移量為baseoffset。
[0049]對于重定向過程,存儲集群將用戶請求的寫失效節點的數據重定向至空余空間RS陣列之后,用戶請求立即返回,并繼續響應其它用戶請求。用戶寫請求包括寫數據的具體信息,如寫數據節點編號node,寫數據偏移地址offset,寫數據大小size,和寫入的新數據newdata。以下稱用戶寫數據的具體信息為一條用戶請求記錄。
[0050]圖6為本發明糾刪碼存儲集群重定向過程流程圖,如圖所示,重定向過程步驟如下:
[0051](Al)接收用戶寫失效數據節點的用戶請求記錄。其中,所述用戶請求記錄包括寫數據節點編號node,寫數據偏移地址offset和寫入的新數據newdata。
[0052]例如,應用訪問請求命令為〈1,2,1,buffer〉,則表示從buffer中取出1*512字節的數據,從磁盤編號為I的數據節點中偏移位置為2*512字節的位置開始寫入。
[0053](A2)將用戶請求記錄寫入空余RS陣列數據區。具體為:假設選取k’ +r’個存活節點構成RAID5 (k,+r’,k’)陣列,RAID5陣列的起始偏移地址為baseoffset,則將用戶請求記錄寫入RAID5 (k’+r’,k’)中數據分塊,中,其中Di^表示數據節點i ‘中偏移位置為j’ *512字節處的數據塊。
[0054](A3)更新空余RS陣列校驗區。即根據新寫入的數據,完成RAID5的寫懲罰過程。
[0055](A4)返回用戶寫失效數據節點請求結果,判斷用戶請求是否結束,如果結束,則重定向過程結束,否則轉入步驟(Al)。
[0056]圖7為本發明糾刪碼存儲集群數據遷移過程流程圖,數據遷移過程步驟如下:
[0057](BI)判斷糾刪碼存儲集群中失效數據節點數據是否恢復完成。若恢復完成,則轉入步驟(B6),否則轉入步驟(B2);
[0058](B2)假設寫入失效數據節點node的失效數據塊是Di,」,記錄其偏移地址為offset ;
[0059](B3)讀取任意k個存活節點偏移位置為offset的數據塊D1,」(I ! =i);
[0060](B4)從該k個存活分塊數據解碼出失效數據分塊Di, j ;并將數據Di, j寫入數據節點node的替代節點node’中偏移地址為offset的位置;
[0061](B5)判斷失效節點的數據是否恢復完成。若沒有完成,則轉入至步驟(B2),否則轉入步驟(B6);
[0062](B6)讀取空余R S陣列中用戶請求記錄(包括node、offset、newdata等信息);[0063](B7)從替代數據節點node’中偏移位置為offset處讀取數據分塊olddata ;
[0064](B8)在替代節點node’中偏移位置為offset處寫入新數據分塊newdata ;
[0065](B9)將舊數據分塊olddata和新數據分塊newdata發送至各校驗節點,各校驗節點利用新舊數據分塊結合已有校驗分塊,采用校驗數據更新算法實現校驗數據的更新;
[0066](BlO)讀取空余RS陣列中下一條用戶請求記錄,并判斷是否結束,若未結束,則轉入至步驟(B6);否則轉入步驟(BII)。
[0067](BH)數據遷移過程結束。
[0068]如圖8所示,DO, Dl, D2,D3,D4,D5為數據節點,DO為失效數據節點,DO'為DO的
替代節點,PO,PI, P2為校驗節點。圖中a,b,c,d,e, f,g,h,i,j分別為各個節點偏移位置為2*512處開始1*512字節大小的數據分塊。圖中A,B,C,D,E為由D4,D5,PO,Pl,P2空閑區域在baseoffset偏移位置之后構成的RAID (5,3)陣列。用戶發出一條〈0,2,I,buffer)的應用訪問請求。該應用訪問請求在兩種不同的寫過程中的操作過程如下所示:
[0069](I)傳統糾刪碼存儲集群中的操作為:
[0070]從buffer中取出1*512字節的數據(newdata),寫入替代節點Dtl'偏移位置為2*512即圖8中a所示位置。讀取存活節點D1, D2, D3, D4, D5, D6 ψ 2*512字節偏移位置(即c, d, e, f, g, h)處數據,解碼出失效節點D0中b處舊數據olddata,將新數據newdata和舊數據olddata發送至校驗節點PO,P1,P2。PO,Pl,P2在位置h,i,j處進行更新。最后向用戶返回操作結果。
[0071](2)本發明中的操作過程為:
[0072]第一步:將用戶請求記錄寫入由空閑區域組成的RAID (5,3)陣列中的位置A。讀取位置B,C中數據,將A,B, C中數據進行編碼之后,將編碼后數據寫入位置D,E中。
[0073]第二步:用戶寫請求返回,繼續監聽用戶請求。
[0074]第三步:讀取〈C, d, e, f, g, h>位置數據分塊,解碼出位置b的舊數據(olddata),并將舊數據olddata寫入替代節點D0’對應位置,即為圖中位置a。
[0075]第四步:讀取A位置舊數據olddata,在DQ’中位置a處寫入新數據newdata。并將olddata和newdata發送至校驗節點PO, Pl, P2。
[0076]第五步:P0,Pl, P2根據新舊數據和原始校驗數據在位置h,i,j處進行數據更新。數據遷移過程完成。
[0077]總而言之,本發明具有以下的有益效果:
[0078]1、在重定向過程中,使用存活節點空余磁盤空間構成空余RS陣列,如步驟(Al)。將寫入失效數據節點的數據重定向到該RS陣列中,如步驟(A3),并完成空閑RS陣列中的校驗部分的更新,如步驟(A4)。這種由空閑磁盤區域構成的RS陣列能夠提高重定向數據的可靠性。
[0079]2、在重定向過程中,將用戶寫入失效數據節點的數據重定向到空閑RS陣列中后,用戶請求立即返回,如步驟(A5),縮短了用戶請求的響應時間。
[0080]3、將重定向過程和數據遷移過程分開處理,兩過程相互獨立,減少了兩個過程對內存、磁盤、網絡帶寬等資源的競爭,確保了重構1/0和用戶1/0之間的相互獨立,從整體上優化重構性能和用戶響應時間。
[0081]以上所述僅為本發明的較佳實施例而已,并不用以限制本發明,凡在本發明的精神和原則之內所作的任何修改、等同替換和改進等,均應包含在本發明的保護范圍之內。
【權利要求】
1.一種基于寫重定向的糾刪碼存儲重構優化方法,包括數據重定向過程和數據遷移過程,其中,數據重定向過程包括以下步驟: (Al)接收用戶寫失效數據節點的用戶請求記錄; (A2)將用戶請求記錄寫入空余RS陣列數據區; (A3)更新空余RS陣列校驗區; (A4)返回用戶寫失效數據節點請求結果,判斷用戶請求是否結束,如果結束,則重定向過程結束,否則轉入步驟(Al); 數據遷移過程包括以下步驟: (BI)判斷糾刪碼存儲集群中失效數據節點數據是否恢復完成,若恢復完成,則轉入步驟(B6),否則轉入步驟(B2); (B2)假設寫入失效數據節點node的失效數據塊是Di,」,記錄其偏移地址為offset,其中Dy表示數據節點i中偏移位置為j*512字節處的數據塊; (B3)讀取任意k個存活節點偏移位置為offset的數據塊D1,」(I ! =i); (B4)從該k個存活分塊數據解碼出失效數據分塊Dm,并將數據Dm寫入數據節點node的替代節點node’中偏移地址為offset的位置; (B5)判斷失效節點的數據是否恢復完成,若沒有完成,則轉入至步驟(B2),否則轉入步驟(B6); (B6)讀取空余RS陣列中的用戶請求記錄; (B7)從替代數據節點node’中偏移位置為offset處讀取數據分塊olddata ; (B8)在替代節點node’中偏移位置為offset處寫入新數據分塊newdata ; (B9)將舊數據分塊olddata和新數據分塊newdata發送至各校驗節點,各校驗節點利用新舊數據分塊結合已有校驗分塊,采用校驗數據更新算法實現校驗數據的更新; (BlO)讀取空余RS陣列中下一條用戶請求記錄,并判斷是否結束,若未結束,則轉入至步驟(B6);否則轉入步驟(Bll); (Bll)數據遷移過程結束。
2.根據權利要求1所述的方法,所述用戶請求記錄包括寫數據節點編號node,寫數據偏移地址offset和寫入的新數據newdata。
3.根據權利要求3所述的方法,所述步驟(A2)具體為:假設選取k’+r’個存活節點構成RAID5 (k,+r’,k’)陣列,RAID5陣列的起始偏移地址為baseoffset,則將用戶請求記錄寫入RAID5 (k,+r’,k’)中數據分塊Di,,/中。
【文檔編號】G06F11/10GK103605582SQ201310616406
【公開日】2014年2月26日 申請日期:2013年11月27日 優先權日:2013年11月27日
【發明者】黃建忠, 曹強, 謝長生, 梁先海, 王艷群 申請人:華中科技大學