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