專利名稱:一種分布式文件系統(tǒng)中保證元數(shù)據(jù)一致性的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及分布式文件系統(tǒng)中數(shù)據(jù)存儲,具體來說,涉及一種分布式文件系統(tǒng)中保證元數(shù)據(jù)一致性的方法。
背景技術(shù):
在分布式文件系統(tǒng)中,元數(shù)據(jù)信息是整個文件系統(tǒng)的核心,一旦元數(shù)據(jù)損壞而丟失一致性,則輕則會導(dǎo)致部分文件丟失,重則導(dǎo)致整個文件系統(tǒng)的癱瘓,無法對外提供正常的服務(wù),其后果將非常嚴(yán)重。當(dāng)前常用的分布式文件系統(tǒng),如NFS、Lustre等,均依賴于ext3等本地文件系統(tǒng)的日志機制來組織元數(shù)據(jù),這樣使元數(shù)據(jù)存儲局限于單個元數(shù)據(jù)服務(wù)節(jié)點,在很多應(yīng)用場景下,如互聯(lián)網(wǎng)應(yīng)用,元數(shù)據(jù)服務(wù)器將會成為瓶頸,極大地限制了分布式文件系統(tǒng)提供服務(wù)的能力。而對于一些自己在用戶態(tài)組織元數(shù)據(jù)的分布式文件系統(tǒng),如Google FS, Hadoop等, 這些文件系統(tǒng)的元數(shù)據(jù)則通過在遠(yuǎn)程節(jié)點記錄邏輯日志的方式來保證一旦元數(shù)據(jù)服務(wù)節(jié)點發(fā)生故障后能夠恢復(fù)到一致的狀態(tài),這種方式下,需要和遠(yuǎn)程機器通信,因而使得元數(shù)據(jù)操作的時間變長,從而使得整個系統(tǒng)的元數(shù)據(jù)服務(wù)能力大大降低。用戶態(tài)組織元數(shù)據(jù)的問題在于,內(nèi)核線程會不定時回刷寫入的數(shù)據(jù),因此對于元數(shù)據(jù)的修改何時到達(dá)磁盤是未知的,因此難以保證其一致性。
發(fā)明內(nèi)容
為解決上述問題,本發(fā)明提供了一種分布式文件系統(tǒng)中保證元數(shù)據(jù)一致性的方法。一種分布式文件系統(tǒng)中保證元數(shù)據(jù)一致性的方法,將分布式文件系統(tǒng)以塊為單位進(jìn)行組織存儲;在元數(shù)據(jù)修改時,首先修改內(nèi)存數(shù)據(jù)塊,同時將對數(shù)據(jù)塊的修改記錄下來;將元數(shù)據(jù)數(shù)據(jù)塊修改信息寫到日志文件,并將修改后的元數(shù)據(jù)數(shù)據(jù)塊同步到磁盤;在修改后的元數(shù)據(jù)數(shù)據(jù)塊同步到磁盤后,丟棄日志文件中對元數(shù)據(jù)塊的記錄條目,只保留修改記錄;在故障發(fā)生后,進(jìn)入恢復(fù)流程,根據(jù)日志文件中對元數(shù)據(jù)塊的修改信息,再次將相應(yīng)修改應(yīng)用到元數(shù)據(jù)塊。優(yōu)選的,所述分布式文件系統(tǒng)是在用戶態(tài)下組織管理的。優(yōu)選的,所述數(shù)據(jù)塊使用Linux系統(tǒng)提供的私有內(nèi)存映射機制將數(shù)據(jù)塊映射到內(nèi)存。優(yōu)選的,所述私有內(nèi)存映射機制在修改內(nèi)存數(shù)據(jù)時,將頁面緩存中的頁面進(jìn)行一份拷貝,直接修改拷貝的頁面。優(yōu)選的,如果需要修改的數(shù)據(jù)塊已經(jīng)存在于日志隊列中,則復(fù)制一份日志記錄,保證日志記錄與實際操作的元數(shù)據(jù)一致。優(yōu)選的,所述日志文件中的記錄條目丟棄過程為日志處理線程收到日志記錄時, 逐條進(jìn)行處理,將收到的日志記錄一同寫到日志文件,并同步到磁盤上;將修改記錄掛入元數(shù)據(jù)回寫隊列,提交給元數(shù)據(jù)回寫線程,修改回寫線程對于接收到的請求,寫入磁盤同步后,將對應(yīng)的日志記錄進(jìn)行丟棄。本發(fā)明在不影響元數(shù)據(jù)操作效率的前提下,能夠保證故障發(fā)生后,通過恢復(fù)來清除故障發(fā)生時尚未來得及完全同步到磁盤上的元數(shù)據(jù),使整個文件系統(tǒng)的元數(shù)據(jù)達(dá)到一致性。
具體實施例方式在本發(fā)明中,整個分布式文件系統(tǒng)的元數(shù)據(jù)在用戶態(tài)自己組織,整個元數(shù)據(jù)存儲介質(zhì)以類似ext3的形式,以塊為單位進(jìn)行組織。將元數(shù)據(jù)操作分為三個階段第一階段, 是元數(shù)據(jù)的內(nèi)存操作,該階段僅僅操作內(nèi)存數(shù)據(jù)塊,同時將對數(shù)據(jù)塊的修改記錄下來,由于這些內(nèi)存不受操作系統(tǒng)內(nèi)核頁面緩存回刷線程的監(jiān)控,因此不會被同步到磁盤上;第二階段,將元數(shù)據(jù)的數(shù)據(jù)塊修改信息寫到日志文件,并同步到磁盤;第三階段,將對于元數(shù)據(jù)的修改,更新到磁盤元數(shù)據(jù)文件并同步的磁盤之后,丟棄日志文件上的記錄條目。在故障發(fā)生后,進(jìn)入恢復(fù)流程,根據(jù)日志文件上尚存在的塊修改信息,將相應(yīng)修改再次應(yīng)用的元數(shù)據(jù)文件即可。發(fā)明中的技術(shù)方案具體描述如下(1)文件系統(tǒng)的所有元數(shù)據(jù)存儲于同一個的文件中,對文件采用類似ext3等磁盤文件系統(tǒng)的塊組織方式進(jìn)行管理。這樣,對整個文件系統(tǒng)元數(shù)據(jù)的存取和基于塊設(shè)備的文件系統(tǒng)基本一致,但由于出于用戶態(tài),因此開發(fā)和調(diào)試成本較低。(2)對于該存儲元數(shù)據(jù)的文件,采取分區(qū)管理,每個區(qū)域可以是若干個塊。對于操作的塊,使用Linux操作系統(tǒng)提供的私有內(nèi)存映射(private方式的mmap)將文件的該區(qū)映射到內(nèi)存區(qū)域。私有內(nèi)存映射機制可以保證,在修改內(nèi)存區(qū)域時,不會直接修改文件頁面緩存中的頁面,而是對頁面進(jìn)行一份拷貝,在拷貝上進(jìn)行修改,因此不會修改磁盤上的內(nèi)容, 及該修改對于磁盤是不可見的。在發(fā)生元數(shù)據(jù)修改時,同時記錄修改涉及到的塊號,將修改記錄掛入日志隊列,提交給日志處理線程,即可給客戶端返回,以保證客戶端的響應(yīng)速度。(3)如果對于同一數(shù)據(jù)塊有多次修改,則需要保證提交給日志處理隊列的記錄中, 塊內(nèi)容仍然是該修改記錄發(fā)生的塊內(nèi)容,而非最新的修改內(nèi)容,否則會導(dǎo)致日志應(yīng)用后,磁盤元數(shù)據(jù)與操作順序不吻合。因此,本發(fā)明中,當(dāng)發(fā)現(xiàn)數(shù)據(jù)塊已經(jīng)存在于日志隊列時,會為日志記錄重新拷貝一份,保證日志記錄與其實際對應(yīng)的操作產(chǎn)生的元數(shù)據(jù)是一致的。(4)當(dāng)日志處理線程收到日志記錄時,會逐條進(jìn)行處理,將收到的日志記錄一同寫到日志文件,并同步到磁盤上。之后,將修改記錄掛入元數(shù)據(jù)回寫隊列,提交給元數(shù)據(jù)回寫線程,修改回寫線程對于接收到的請求,寫入磁盤,并同步后,將對應(yīng)的日志記錄進(jìn)行丟棄即可(5)當(dāng)發(fā)生故障時,對于那些正在往磁盤上同步的元數(shù)據(jù)修改,由于其狀態(tài)未知, 因此需要重新從日志文件中讀出,并再次寫入到元數(shù)據(jù)文件中,以保證這些操作完整地同步到磁盤上。
權(quán)利要求
1.一種分布式文件系統(tǒng)中保證元數(shù)據(jù)一致性的方法,其特征在于將分布式文件系統(tǒng)以塊為單位進(jìn)行組織存儲;在元數(shù)據(jù)修改時,首先修改內(nèi)存數(shù)據(jù)塊,同時將對數(shù)據(jù)塊的修改記錄下來; 將元數(shù)據(jù)數(shù)據(jù)塊修改信息寫到日志文件,并將修改后的元數(shù)據(jù)數(shù)據(jù)塊同步到磁盤; 在修改后的元數(shù)據(jù)數(shù)據(jù)塊同步到磁盤后,丟棄日志文件中對元數(shù)據(jù)塊的記錄條目,只保留修改記錄;在故障發(fā)生后,進(jìn)入恢復(fù)流程,根據(jù)日志文件中對元數(shù)據(jù)塊的修改信息,再次將相應(yīng)修改應(yīng)用到元數(shù)據(jù)塊。
2.如權(quán)利要求1所述的方法,其特征在于所述分布式文件系統(tǒng)是在用戶態(tài)下組織管理的。
3.如權(quán)利要求1所述的方法,其特征在于所述數(shù)據(jù)塊使用Linux系統(tǒng)提供的私有內(nèi)存映射機制將數(shù)據(jù)塊映射到內(nèi)存。
4.如權(quán)利要求3所述的方法,其特征在于所述私有內(nèi)存映射機制在修改內(nèi)存數(shù)據(jù)時, 將頁面緩存中的頁面進(jìn)行一份拷貝,直接修改拷貝的頁面。
5.如權(quán)利要求1所述的方法,其特征在于如果需要修改的數(shù)據(jù)塊已經(jīng)存在于日志隊列中,則復(fù)制一份日志記錄,保證日志記錄與實際操作的元數(shù)據(jù)一致。
6.如權(quán)利要求1所述的方法,其特征在于所述日志文件中的記錄條目丟棄過程為日志處理線程收到日志記錄時,逐條進(jìn)行處理,將收到的日志記錄一同寫到日志文件,并同步到磁盤上;將修改記錄掛入元數(shù)據(jù)回寫隊列,提交給元數(shù)據(jù)回寫線程,修改回寫線程對于接收到的請求,寫入磁盤同步后,將對應(yīng)的日志記錄進(jìn)行丟棄。
全文摘要
本發(fā)明提供了一種分布式文件系統(tǒng)中保證元數(shù)據(jù)一致性的方法,將分布式文件系統(tǒng)以塊為單位進(jìn)行組織存儲;在元數(shù)據(jù)修改時,首先修改內(nèi)存數(shù)據(jù)塊,同時將對數(shù)據(jù)塊的修改記錄下來;將元數(shù)據(jù)數(shù)據(jù)塊修改信息寫到日志文件,并將修改后的元數(shù)據(jù)數(shù)據(jù)塊同步到磁盤;在修改后的元數(shù)據(jù)數(shù)據(jù)塊同步到磁盤后,丟棄日志文件中對元數(shù)據(jù)塊的記錄條目,只保留修改記錄;在故障發(fā)生后,進(jìn)入恢復(fù)流程,根據(jù)日志文件中對元數(shù)據(jù)塊的修改信息,再次將相應(yīng)修改應(yīng)用到元數(shù)據(jù)塊。本發(fā)明在不影響元數(shù)據(jù)操作效率的前提下,能夠保證故障發(fā)生后,通過恢復(fù)來清除故障發(fā)生時尚未來得及完全同步到磁盤上的元數(shù)據(jù),使整個文件系統(tǒng)的元數(shù)據(jù)達(dá)到一致性。
文檔編號G06F17/30GK102567445SQ201110326510
公開日2012年7月11日 申請日期2011年10月25日 優(yōu)先權(quán)日2011年10月25日
發(fā)明者劉新春, 張東陽, 楊浩, 王勇, 苗艷超, 邵宗有, 馬振杰, 馬照云 申請人:無錫城市云計算中心有限公司