本發(fā)明涉及計算機(jī)存儲領(lǐng)域,特別涉及一種糾刪碼RAID的數(shù)據(jù)一致性保障方法及系統(tǒng)。
背景技術(shù):
RAID(獨立冗余磁盤陣列)技術(shù)是一種提供增強(qiáng)冗余、容量和存儲性能的存儲方法,有著較強(qiáng)的可管理性、可靠性和可用性。通過冗余計算,RAID技術(shù)能夠在滿足可靠性要求的前提下降低系統(tǒng)的容量開銷。RAID技術(shù)作為基礎(chǔ)存儲技術(shù)之一,在過去二十余年中有效地保障了用戶數(shù)據(jù)的可靠性。多副本和糾刪碼技術(shù)是RAID系統(tǒng)常用的可靠性保障技術(shù),多副本技術(shù)導(dǎo)致系統(tǒng)存儲空間利用率過低,帶來高存儲成本。而糾刪碼技術(shù)相對于多副本技術(shù),可在保證數(shù)據(jù)可用性和可靠性的前提下大幅提升存儲空間利用率,因此已成為存儲技術(shù)的發(fā)展趨勢。
糾刪碼(Erasure Code,EC)是一種數(shù)據(jù)保護(hù)方法,它將數(shù)據(jù)分割成片段,把冗余數(shù)據(jù)塊擴(kuò)展、編碼,并將其存儲在不同的物理位置?;驹頌橄驍?shù)據(jù)中加入冗余信息,增加校驗位,使得數(shù)據(jù)損壞后可以通過校驗信息進(jìn)行數(shù)據(jù)的恢復(fù)。使用數(shù)據(jù)盤n塊、校驗碼盤m塊組建RS-Code的RAID存儲系統(tǒng),系統(tǒng)可以容忍小于等于m塊的磁盤同時損壞(壞磁盤數(shù)<=校驗碼盤數(shù)),并能夠保證數(shù)據(jù)的完整性。與副本技術(shù)相比,糾刪碼技術(shù)極大地提高了磁盤陣列的存儲效率,并且只引入了少量的額外能耗開銷。
隨著存儲數(shù)據(jù)量的飛速增長,為減少數(shù)據(jù)冗余代價并保證數(shù)據(jù)的可用性和可靠性,糾刪碼技術(shù)成為了存儲系統(tǒng)發(fā)展的熱點。但糾刪碼存儲系統(tǒng)的寫性能表現(xiàn)不佳,尤其是對于小數(shù)據(jù)寫的情況。糾刪碼系統(tǒng)的條帶化讀-修改-寫策略會將小寫操作轉(zhuǎn)化為一系列的讀寫操作組合,導(dǎo)致頻繁的磁頭抖動,使得糾刪碼系統(tǒng)的小寫性能極低。如圖示1,為三個數(shù)據(jù)盤加兩個校驗盤組成的3+2糾刪碼系統(tǒng)(即RAID6)的數(shù)據(jù)寫入過程。由于條帶化RAID數(shù)據(jù)塊間存在緊耦合問題,當(dāng)用戶寫D1塊時,RAID6將先讀取D2和D3塊的數(shù)據(jù)至內(nèi)存,然后在內(nèi)存中計算新校驗P’和Q’,最后將新數(shù)據(jù)D1’、新校驗P’和Q’寫入磁盤,完成整個寫入過程??梢钥闯?,一個用戶的寫操作導(dǎo)致了多個磁盤的讀寫操作,使得RAID6的寫性能低下。
根據(jù)糾刪碼系統(tǒng)的工作原理和特點,可知,糾刪碼的數(shù)據(jù)更新過程涉及到多個數(shù)據(jù)和校驗設(shè)備,且包含一系列的異步讀寫操作,即糾刪碼的數(shù)據(jù)更新過程本身不是原子操作。在糾刪碼系統(tǒng)中,每次數(shù)據(jù)的更新都需要同時更新校驗,以達(dá)到數(shù)據(jù)和校驗一致的目的。這樣才能保證在故障后,能通過校驗和剩余數(shù)據(jù)將丟失的數(shù)據(jù)恢復(fù)出來。若在糾刪碼更新的過程中發(fā)生故障中斷,那么數(shù)據(jù)和校驗很可能不一致,這種數(shù)據(jù)更新時故障導(dǎo)致的數(shù)據(jù)不一致問題又被稱為Write Hole問題。
Write Hole問題的經(jīng)典場景為盤陣降級后發(fā)生寫更新掉電。以RAID6為例,若在盤陣降級的情況下發(fā)生寫更新掉電,將可能出現(xiàn)Write Hole問題。如圖2所示,RAID6已寫入新數(shù)據(jù)D1’而未寫入新數(shù)據(jù)D2’和新校驗P’、Q’。此時,由新數(shù)據(jù)、舊校驗組成的RAID6條帶數(shù)據(jù)已經(jīng)不一致。
對于這樣的一種場景,RAID6在重新恢復(fù)并開始接受用戶請求后,將無法保證數(shù)據(jù)的正確性。如圖3,用戶發(fā)起對壞盤D3的數(shù)據(jù)讀請求,此時RAID6將讀取所有剩余的數(shù)據(jù)和校驗信息來計算出D3數(shù)據(jù),然而此時條帶數(shù)據(jù)已經(jīng)不一致,將會計算出錯誤的D3數(shù)據(jù)返回給用戶。這個錯誤的D3數(shù)據(jù),既不為舊版本D3,也不為新版本D3,而是舊數(shù)據(jù)和新校驗計算出來的無意義的比特序列。這樣,Write Hole問題導(dǎo)致糾刪碼系統(tǒng)丟失了正確性和可靠性。
數(shù)據(jù)一致性是糾刪碼存儲系統(tǒng)的本質(zhì)屬性,保證了數(shù)據(jù)的可靠性和可用性。Write Hole導(dǎo)致糾刪碼系統(tǒng)丟失數(shù)據(jù)一致性,完全規(guī)避Write Hole問題成為了糾刪碼系統(tǒng)亟待改進(jìn)的重大問題。
基于上述分析,本發(fā)明提出AWR(After Write Remapping)事務(wù)存儲模型,通過保證糾刪碼RAID系統(tǒng)數(shù)據(jù)更新過程的原子性和持久性,來保證糾刪碼RAID數(shù)據(jù)的一致性。
技術(shù)實現(xiàn)要素:
為解決以上技術(shù)問題,本發(fā)明提出一種糾刪碼RAID的數(shù)據(jù)一致性保障方法及系統(tǒng)。
本發(fā)明提出一種糾刪碼RAID的數(shù)據(jù)一致性保障方法,包括:
步驟1,當(dāng)有新數(shù)據(jù)寫入時,修改版本設(shè)備中各設(shè)備的數(shù)據(jù)映射表,并生成事務(wù)日志表,所述版本設(shè)備中各設(shè)備進(jìn)行異步下刷操作,完成后,清除所述事務(wù)日志表,其中所述版本設(shè)備由新數(shù)據(jù)卷與舊數(shù)據(jù)卷構(gòu)成;
步驟2,將所述新數(shù)據(jù)及與其相對應(yīng)的新校驗信息經(jīng)所述版本設(shè)備轉(zhuǎn)發(fā)并寫入新數(shù)據(jù)卷,當(dāng)所述新數(shù)據(jù)與所述新校驗信息都完整寫入后,再觸發(fā)所述步驟1,將所述新數(shù)據(jù)與所述新校驗信息寫入所述舊數(shù)據(jù)卷。
寫入所述新數(shù)據(jù)時,首先臨時存儲在所述新數(shù)據(jù)卷,所述新數(shù)據(jù)的最終數(shù)據(jù)存儲于所述舊數(shù)據(jù)卷中。
所述步驟2包括:所述新數(shù)據(jù)與所述新校驗信息經(jīng)由所述版本設(shè)備持久化到所述新數(shù)據(jù)卷,并修改所述新數(shù)據(jù)卷中條帶狀態(tài)為提交完成狀態(tài)。
所述新數(shù)據(jù)卷與所述舊數(shù)據(jù)卷各自組成一致性維護(hù)的條帶結(jié)構(gòu)。
本發(fā)明還提出一種糾刪碼RAID的數(shù)據(jù)一致性保障系統(tǒng),包括:
重映射模塊,用于當(dāng)有新數(shù)據(jù)寫入時,修改版本設(shè)備中各設(shè)備的數(shù)據(jù)映射表,并生成事務(wù)日志表,所述版本設(shè)備中各設(shè)備進(jìn)行異步下刷操作,完成后,清除所述事務(wù)日志表,其中所述版本設(shè)備由新數(shù)據(jù)卷與舊數(shù)據(jù)卷構(gòu)成;
糾刪碼模塊,用于將所述新數(shù)據(jù)及與其相對應(yīng)的新校驗信息經(jīng)所述版本設(shè)備轉(zhuǎn)發(fā)并寫入新數(shù)據(jù)卷,當(dāng)所述新數(shù)據(jù)與所述新校驗信息都完整寫入后,再觸發(fā)所述重映射模塊,將所述新數(shù)據(jù)與所述新校驗信息寫入所述舊數(shù)據(jù)卷。
寫入所述新數(shù)據(jù)時,首先臨時存儲在所述新數(shù)據(jù)卷,所述新數(shù)據(jù)的最終數(shù)據(jù)存儲于所述舊數(shù)據(jù)卷中。
所述糾刪碼模塊包括:所述新數(shù)據(jù)與所述新校驗信息經(jīng)由所述版本設(shè)備持久化到所述新數(shù)據(jù)卷,并修改所述新數(shù)據(jù)卷中條帶狀態(tài)為提交完成狀態(tài)。
所述新數(shù)據(jù)卷與所述舊數(shù)據(jù)卷各自組成一致性維護(hù)的條帶結(jié)構(gòu)。
由以上方案可知,本發(fā)明的優(yōu)點在于:
本發(fā)明提出了“寫后重映射”存儲模型(After Write Remapping,AWR)和事務(wù)實現(xiàn)方法,保證了糾刪碼數(shù)據(jù)的一致性。AWR模型為糾刪碼數(shù)據(jù)的更新過程提供原子性和持久性,采用數(shù)據(jù)異地更新和原子重映射機(jī)制保證了更新過程中數(shù)據(jù)的一致性。
附圖說明
圖1為RAID6寫入過程圖;
圖2為Write Hole問題經(jīng)典場景圖;
圖3為糾刪碼條帶丟失一致性后的讀錯誤圖;
圖4為版本設(shè)備結(jié)構(gòu)圖;
圖5為remap日志事務(wù)及元數(shù)據(jù)異步下刷機(jī)制圖;
圖6為AWR模型糾刪碼結(jié)構(gòu)圖;
圖7為條帶狀態(tài)位圖及含義圖;
圖8為BRD、ARD新舊版本結(jié)構(gòu)圖;
圖9為AWR模型數(shù)據(jù)更新流程圖。
具體實施方式
下面給出本發(fā)明的具體實施方式,結(jié)合附圖對本發(fā)明做出了詳細(xì)描述,本發(fā)明包括高效remap機(jī)制和AWR事務(wù)模型兩個部分。
(一)高效remap機(jī)制
分析MD-RAID6系統(tǒng)中的一致性問題原因可以得出結(jié)論,MD-RAID6在不能保證一致的新數(shù)據(jù)、校驗信息都已下盤的情況下就覆蓋了一致的舊數(shù)據(jù)、校驗信息,導(dǎo)致條帶處于新舊數(shù)據(jù)混合的中間階段,丟失了數(shù)據(jù)的一致性。
針對這個問題,本發(fā)明設(shè)計了由新舊設(shè)備組成的版本設(shè)備并實現(xiàn)了版本設(shè)備間無數(shù)據(jù)拷貝的高效遷移操作。版本設(shè)備由新數(shù)據(jù)卷BRD(Before Remap Device)和舊數(shù)據(jù)卷ARD(After Remap Device)組建而成,版本設(shè)備結(jié)構(gòu)如圖示4所示,新數(shù)據(jù)的寫入均落于BRD設(shè)備,BRD設(shè)備占用的物理空間很小,僅作為數(shù)據(jù)更新過程的臨時存放位置,最終的數(shù)據(jù)均存儲于ARD設(shè)備中,remap操作實現(xiàn)了數(shù)據(jù)從BRD設(shè)備至ARD設(shè)備的高效遷移,其核心為僅修改設(shè)備中地址的映射信息,從而達(dá)到數(shù)據(jù)遷移的目的,而不發(fā)生任何實際的數(shù)據(jù)拷貝過程,remap過程涉及到兩個設(shè)備數(shù)據(jù)映射表的修改,單純的設(shè)備間獨立修改各自的元數(shù)據(jù)并非原子操作,為此,版本設(shè)備還為remap機(jī)制還添加了事務(wù)日志和異步元數(shù)據(jù)寫入的優(yōu)化工作,如圖示5,在完成記錄remap日志和修改緩存中映射表項后,即可認(rèn)為remap成功,此后,數(shù)據(jù)卷BRD和舊數(shù)據(jù)卷ARD各自完成元數(shù)據(jù)的異步下刷工作,最后,再通知日志事務(wù)設(shè)備清除日志,完成整個remap過程,這樣一來,日志事務(wù)保證了整個remap過程的原子性,即使過程中發(fā)生中斷也能夠根據(jù)日志信息將映射表回滾到一個正確的狀態(tài),同時,元數(shù)據(jù)的異步下刷機(jī)制使得remap過程開銷僅為記錄日志開銷和內(nèi)存映射表項的修改開銷,進(jìn)一步減少了remap操作開銷。
(二)AWR事務(wù)結(jié)構(gòu)及工作流程
RAID6中新數(shù)據(jù)直接覆蓋舊數(shù)據(jù)的做法,最終將導(dǎo)致數(shù)據(jù)的一致性問題,針對此問題,AWR事務(wù)存儲模型提出了三點原則:
1、數(shù)據(jù)和校驗的更新采用非原位更新方式,新數(shù)據(jù)和校驗信息固化于新的物理位置;
2、新的數(shù)據(jù)和校驗信息均固化并一致后,需要替換舊的數(shù)據(jù)和校驗信息;
3、新舊數(shù)據(jù)校驗替換的過程需保證為原子操作,或者在發(fā)生故障時可以根據(jù)相關(guān)信息進(jìn)行回滾,最終能夠?qū)?shù)據(jù)校驗恢復(fù)到一個一致的狀態(tài)。
根據(jù)這些原則,本發(fā)明構(gòu)建了AWR模型依賴的糾刪碼結(jié)構(gòu),如圖示6所示,在這個結(jié)構(gòu)中,由新數(shù)據(jù)卷BRD和舊數(shù)據(jù)卷ARD組成版本設(shè)備WR(Write and Remap),再由WR設(shè)備組成糾刪碼設(shè)備。
發(fā)生數(shù)據(jù)寫時,新校驗信息和新數(shù)據(jù)經(jīng)WR設(shè)備轉(zhuǎn)發(fā)而寫入BRD設(shè)備,當(dāng)新數(shù)據(jù)和校驗信息都完整寫入后,再觸發(fā)版本設(shè)備的remap流程,最終將一致的數(shù)據(jù)及校驗信息都存儲于ARD設(shè)備,也就是說,BRD、ARD設(shè)備各自組成了一致性維護(hù)的條帶結(jié)構(gòu),新舊狀態(tài)中任意一個達(dá)到一致都能保證條帶數(shù)據(jù)的一致性,如圖示7所示。
基于AWR模型的糾刪碼結(jié)構(gòu),本發(fā)明設(shè)計了AWR存儲模型的兩階段寫提交協(xié)議來保證新舊數(shù)據(jù)替換時的數(shù)據(jù)一致性。
兩階段寫的提交協(xié)議將糾刪碼的數(shù)據(jù)更新流程劃分為了兩個階段,第一個階段為write階段,負(fù)責(zé)將新數(shù)據(jù)及新校驗寫入BRD設(shè)備;第二個階段為remap階段,負(fù)責(zé)將BRD中一致的數(shù)據(jù)remap至ARD設(shè)備,為了標(biāo)志條帶的數(shù)據(jù)狀態(tài),兩階段提交協(xié)議為每個糾刪碼條帶引入了兩個位的狀態(tài)位圖,位圖在僅在內(nèi)存中保存,無需固化,代表的含義如圖示8所示。
詳細(xì)的數(shù)據(jù)更新流程如圖示9所示,即
write階段:
(1)糾刪碼模塊計算校驗,下發(fā)數(shù)據(jù)和校驗盤的寫請求;
(2)新數(shù)據(jù)和新校驗信息經(jīng)由WR設(shè)備持久化于BRD設(shè)備;
(3)新數(shù)據(jù)和新校驗信息寫完成,修改新數(shù)據(jù)卷的條帶狀態(tài)為COMMITTED(提交完成狀態(tài));
remap階段:
(4)糾刪碼模塊對條帶中的數(shù)據(jù)盤發(fā)送remap操作;
(5)數(shù)據(jù)盤remap完成后,發(fā)送對條帶中校驗盤的remap操作;
(6)校驗盤remap操作完成,修改條帶狀態(tài)為NORMAL(正常狀態(tài))。