一種基于hdfs的虛擬機(jī)鏡像存儲(chǔ)系統(tǒng)及其構(gòu)建方法
【專利摘要】本發(fā)明公開(kāi)了一種基于HDFS的虛擬機(jī)鏡像存儲(chǔ)系統(tǒng)及其構(gòu)建方法,該系統(tǒng)包括虛擬服務(wù)器、管理服務(wù)器、HDFS存儲(chǔ)節(jié)點(diǎn),以及部署在存儲(chǔ)管理服務(wù)器上的存儲(chǔ)空間管理器、讀寫定位管理器和鏡像數(shù)據(jù)管理器。構(gòu)建方法是由存儲(chǔ)空間管理器負(fù)責(zé)管理存儲(chǔ)空間的磁盤組織形式,完成對(duì)大量虛擬機(jī)鏡像的存儲(chǔ)。讀寫定位管理器接收虛擬機(jī)鏡像操作請(qǐng)求,根據(jù)元數(shù)據(jù)組織方式完成具體鏡像的隨機(jī)讀寫操作。鏡像數(shù)據(jù)管理器負(fù)責(zé)虛擬機(jī)鏡像元數(shù)據(jù)和文件內(nèi)容的管理,通過(guò)特定的元數(shù)據(jù)結(jié)構(gòu)組織鏡像文件內(nèi)容。本發(fā)明克服了HDFS不支持隨機(jī)寫文件的局限,實(shí)現(xiàn)了虛擬機(jī)鏡像動(dòng)態(tài)運(yùn)行的分布容錯(cuò)云存儲(chǔ)機(jī)制,提高了數(shù)據(jù)存儲(chǔ)和訪問(wèn)的可靠性,同時(shí)降低了成本。
【專利說(shuō)明】一種基于HDFS的虛擬機(jī)鏡像存儲(chǔ)系統(tǒng)及其構(gòu)建方法
[0001]
【技術(shù)領(lǐng)域】
[0002]本發(fā)明涉及一種基于HDFS (Hadoop Distributed File System,Hadoop 分布式文件系統(tǒng))的大規(guī)模虛擬機(jī)鏡像存儲(chǔ)系統(tǒng),具體是將虛擬機(jī)鏡像分成多個(gè)段文件存儲(chǔ)在HDFS分布式文件系統(tǒng)中,并結(jié)合日志結(jié)構(gòu)文件系統(tǒng)順序?qū)懙奶匦詫?shí)現(xiàn)對(duì)HDFS文件的隨機(jī)寫,為虛擬機(jī)鏡像數(shù)據(jù)的動(dòng)態(tài)訪問(wèn)提供支持。
【背景技術(shù)】
[0003]隨著互聯(lián)網(wǎng)應(yīng)用的動(dòng)態(tài)資源需求快速增長(zhǎng),基于虛擬化技術(shù)對(duì)服務(wù)器進(jìn)行有效整合,能實(shí)現(xiàn)服務(wù)器的動(dòng)態(tài)封裝和運(yùn)行時(shí)的負(fù)載均衡,有效降低成本。目前主流虛擬化技術(shù)的存儲(chǔ)模式難以滿足實(shí)際應(yīng)用需要:一方面高速存儲(chǔ)設(shè)備價(jià)格高昂、設(shè)備能耗較高且存儲(chǔ)空間利用率較低;另一方面單一設(shè)備的低容錯(cuò)率易造成數(shù)據(jù)丟失或錯(cuò)誤。
[0004]而基于HDFS能將眾多異構(gòu)、廉價(jià)的服務(wù)器協(xié)同工作,實(shí)現(xiàn)大規(guī)模虛擬機(jī)鏡像的存儲(chǔ)管理,并具有高可靠、高穩(wěn)定和低成本等優(yōu)勢(shì)。但是現(xiàn)有的HDFS實(shí)現(xiàn)存在數(shù)據(jù)訪問(wèn)延遲較大、不支持隨機(jī)寫等問(wèn)題,限制了對(duì)虛擬機(jī)存儲(chǔ)支持的應(yīng)用。
【發(fā)明內(nèi)容】
[0005]本發(fā)明所要解決的技術(shù)問(wèn)題是針對(duì)HDFS作為虛擬機(jī)鏡像存儲(chǔ)層時(shí)不支持隨機(jī)寫的局限性,提出了一種基于HDFS的虛擬機(jī)鏡像存儲(chǔ)系統(tǒng)及其構(gòu)建方法,利用日志結(jié)構(gòu)文件系統(tǒng)順序?qū)懙奶匦詫?shí)現(xiàn)對(duì)HDFS文件的隨機(jī)寫,為虛擬機(jī)鏡像數(shù)據(jù)的動(dòng)態(tài)訪問(wèn)提供支持。
[0006]本發(fā)明所述的一種基于HDFS的虛擬機(jī)鏡像存儲(chǔ)系統(tǒng),包括虛擬機(jī)服務(wù)器、存儲(chǔ)管理服務(wù)器和若干HDFS存儲(chǔ)節(jié)點(diǎn)構(gòu)成的HDFS存儲(chǔ)節(jié)點(diǎn)集群,所述存儲(chǔ)管理服務(wù)器包括:
1)存儲(chǔ)空間管理器:管理HDFS存儲(chǔ)節(jié)點(diǎn)集群的存儲(chǔ)空間,創(chuàng)建虛擬機(jī)實(shí)例前,存儲(chǔ)空間管理器先在HDFS存儲(chǔ)節(jié)點(diǎn)上創(chuàng)建相應(yīng)的虛擬機(jī)鏡像;存儲(chǔ)空間管理器將虛擬機(jī)鏡像組織成段文件的形式,并基于段文件建立數(shù)據(jù)塊機(jī)制,所有的段文件都分布存儲(chǔ)在HDFS存儲(chǔ)節(jié)點(diǎn)中,以及完成對(duì)歷史數(shù)據(jù)所占存儲(chǔ)空間的回收工作;
2)讀寫定位管理器:虛擬機(jī)鏡像完成在HDFS存儲(chǔ)節(jié)點(diǎn)的部署之后,虛擬機(jī)發(fā)起的讀寫請(qǐng)求由Xen虛擬機(jī)監(jiān)控器截獲,交由讀寫定位管理器處理,將接受的虛擬機(jī)請(qǐng)求轉(zhuǎn)發(fā)到HDFS存儲(chǔ)節(jié)點(diǎn)集群;其根據(jù)元數(shù)據(jù)的組織方式處理虛擬機(jī)讀寫請(qǐng)求,定位和查找特定段文件內(nèi)的數(shù)據(jù),并響應(yīng)虛擬機(jī)的讀寫請(qǐng)求;
3)鏡像數(shù)據(jù)管理器:管理虛擬機(jī)鏡像的數(shù)據(jù)內(nèi)容,通過(guò)定制的元數(shù)據(jù)格式組織段文件不同數(shù)據(jù)內(nèi)容,并依據(jù)段文件和數(shù)據(jù)塊的存儲(chǔ)機(jī)制嚴(yán)格按照順序?qū)懭?,完成具體的虛擬機(jī)鏡像讀寫操作。
[0007]此外,本發(fā)明還提供了一種基于HDFS的虛擬機(jī)鏡像存儲(chǔ)系統(tǒng)的構(gòu)建方法,其包括以下步驟: 1)對(duì)HDFS存儲(chǔ)節(jié)點(diǎn)集群的存儲(chǔ)空間進(jìn)行管理,將虛擬機(jī)鏡像組織成段文件的形式,并基于段文件建立數(shù)據(jù)塊機(jī)制,所有的段文件都分布存儲(chǔ)在HDFS存儲(chǔ)節(jié)點(diǎn)中,
2)虛擬機(jī)鏡像實(shí)例完成在HDFS存儲(chǔ)節(jié)點(diǎn)的部署之后,虛擬機(jī)發(fā)起讀寫請(qǐng)求,由Xen虛擬機(jī)監(jiān)控器負(fù)責(zé)處理并交由讀寫定位管理器,虛擬機(jī)請(qǐng)求被轉(zhuǎn)發(fā)到HDFS存儲(chǔ)集群,由存儲(chǔ)相應(yīng)數(shù)據(jù)的DateNode存儲(chǔ)節(jié)點(diǎn)相應(yīng)讀寫請(qǐng)求;
3)對(duì)于虛擬機(jī)鏡像的數(shù)據(jù)內(nèi)容,通過(guò)定制的元數(shù)據(jù)格式組織段文件不同數(shù)據(jù)內(nèi)容,并依據(jù)段文件和數(shù)據(jù)塊的存儲(chǔ)機(jī)制嚴(yán)格按照順序?qū)懭?,完成具體的虛擬機(jī)鏡像讀寫操作。
[0008]上述步驟I)的具體步驟是:
11)配置HDFS的多副本參數(shù),啟動(dòng)HDFS集群,在NameNode下運(yùn)行start-all命令,多個(gè)DateNode存儲(chǔ)節(jié)點(diǎn)負(fù)責(zé)數(shù)據(jù)的存儲(chǔ);
12)在HDFS存儲(chǔ)空間創(chuàng)建虛擬機(jī)鏡像實(shí)例,以Iinux格式化命令在指定目錄生成鏡像文件,同時(shí)以字節(jié)為單位設(shè)置段和數(shù)據(jù)塊的大?。黄渲卸挝募凑諗?shù)字1、2、3...的順序遞增編號(hào),段內(nèi)數(shù)據(jù)塊是數(shù)據(jù)操作的基本單位;
13)多個(gè)段文件根據(jù)HDFS的存儲(chǔ)特性分布到多個(gè)DateNode存儲(chǔ)節(jié)點(diǎn);
14)創(chuàng)建虛擬機(jī)運(yùn)行實(shí)例,虛擬機(jī)請(qǐng)求被定為到HDFS存儲(chǔ)空間,并分散到大量存儲(chǔ)節(jié)點(diǎn)在段文件中生成虛擬機(jī)磁盤數(shù)據(jù);
15)虛擬機(jī)的運(yùn)行過(guò)程實(shí)時(shí)反映到HDFS上的鏡像實(shí)例上,虛擬機(jī)的數(shù)據(jù)讀寫同布更新鏡像實(shí)例的數(shù)據(jù)段內(nèi)容;存儲(chǔ)空間模塊記錄被刪除或修改后的無(wú)效數(shù)據(jù)段,通過(guò)設(shè)定閾值以刪除或拷貝的方式產(chǎn)生新的空閑空間。
[0009]上述步驟15)流程是:
151)統(tǒng)計(jì)每個(gè)段文件的使用情況,即當(dāng)前段中的活躍數(shù)據(jù)塊個(gè)數(shù),以遍歷法檢查當(dāng)前索引節(jié)點(diǎn)的間接塊中的地址指向;
152)從客戶端所在節(jié)點(diǎn)讀取段使用情況到本地執(zhí)行統(tǒng)計(jì)任務(wù);
153)根據(jù)統(tǒng)計(jì)任務(wù)執(zhí)行段回收工作,即對(duì)活躍塊小于某閾值的段執(zhí)行刪除或者拷貝操作來(lái)回收空間;
154)如果一個(gè)段中的所有數(shù)據(jù)塊都是無(wú)效數(shù)據(jù)塊,則這個(gè)段文件可被回收,即從HDFS中刪除;
155)如果一個(gè)段中只有部分?jǐn)?shù)據(jù)塊是無(wú)效數(shù)據(jù)塊,則記錄所有數(shù)據(jù)塊的有效性、段內(nèi)位置和活躍狀態(tài);將有效數(shù)據(jù)塊主動(dòng)以日志形式拷貝寫到新段中,從而使得原段中的所有數(shù)據(jù)塊都成為舊數(shù)據(jù)塊,以執(zhí)行刪除操作產(chǎn)生新的空閑空間。
[0010]上述步驟2)的具體步驟是:
21)虛擬機(jī)讀寫請(qǐng)求從Xen的blkfront到blkback,通過(guò)blktap2驅(qū)動(dòng)交到用戶空間的tapdisk2進(jìn)程的地址空間;
22)擴(kuò)展blktap2的后端驅(qū)動(dòng),將虛擬機(jī)讀寫請(qǐng)求的扇區(qū)信息轉(zhuǎn)化為對(duì)鏡像文件的偏移信息,根據(jù)元數(shù)據(jù)的組織方式,定位和查找特定段文件內(nèi)的數(shù)據(jù);
23)通過(guò)tapdisk2進(jìn)程調(diào)用自定義的讀寫接口,設(shè)置的鏡像名、文件大小、偏移量信
息;
24)tapdisk2進(jìn)程的讀寫接口完成鏡像元數(shù)據(jù)和文件內(nèi)容的操作,最終調(diào)用HDFS的API完成對(duì)鏡像實(shí)例的更新。[0011]上述步驟22)流程是:
221) blktap2負(fù)責(zé)處理接收的虛擬機(jī)讀寫請(qǐng)求,將請(qǐng)求的扇區(qū)號(hào)和要讀寫的扇區(qū)數(shù)轉(zhuǎn)化為要讀取的文件偏移量和大小。因?yàn)樗袛?shù)據(jù)是順序?qū)懭?,只需將扇區(qū)號(hào)和扇區(qū)數(shù)乘上創(chuàng)建鏡像時(shí)設(shè)定的扇區(qū)大小即可。
[0012]222)根據(jù)段文件和數(shù)據(jù)塊的組織關(guān)系,以64位表示數(shù)據(jù)塊的存儲(chǔ)地址,存儲(chǔ)地址的位分布由兩部分唯一定位:后半部分位數(shù)可以確定偏移量,前半部分位數(shù)可確定段文件號(hào)。
[0013]223)訪問(wèn)位于日志尾的索引映射節(jié)點(diǎn),找到所需文件對(duì)應(yīng)索引節(jié)點(diǎn)并讀取其信息,之后根據(jù)文件邏輯地址對(duì)應(yīng)的數(shù)據(jù)塊物理地址,計(jì)算段號(hào)和段內(nèi)偏移量訪問(wèn)請(qǐng)求的數(shù)據(jù)。
[0014]上述步驟3)具體步驟是:
31)定制元數(shù)據(jù)格式,主要?jiǎng)?chuàng)建如下節(jié)點(diǎn):
超級(jí)塊節(jié)點(diǎn),描述創(chuàng)建的虛擬機(jī)鏡像文件系統(tǒng)的屬性信息,記錄鏡像實(shí)例、鏡像大小、段大小和數(shù)據(jù)塊大小等信息;
索引節(jié)點(diǎn),記錄文件的權(quán)限和屬性等相關(guān)信息,一個(gè)文件對(duì)應(yīng)一個(gè)索引節(jié)點(diǎn);
索引映射節(jié)點(diǎn),記錄索引節(jié)點(diǎn)號(hào)和對(duì)應(yīng)的索引節(jié)點(diǎn)位置,作為全局?jǐn)?shù)據(jù)結(jié)構(gòu);
日志頭節(jié)點(diǎn),將每次順序的磁盤寫操作稱為一次日志操作,記錄當(dāng)前日志版本、檢驗(yàn)信息、日志大小、創(chuàng)建時(shí)間以及數(shù)據(jù)塊、間接數(shù)據(jù)塊個(gè)數(shù)等信息。
[0015]全局控制節(jié)點(diǎn),記錄當(dāng)前鏡像的所有元數(shù)據(jù)信息、讀寫標(biāo)志、文件句柄和寫異步隊(duì)列等一些列相關(guān)信息;
32)建立完整信息索引的日志布局,數(shù)據(jù)寫入順序?yàn)?日志頭節(jié)點(diǎn)、數(shù)據(jù)內(nèi)容、間接數(shù)據(jù)塊、索引節(jié)點(diǎn)和索引映射節(jié)點(diǎn);
33)接收虛擬機(jī)讀寫數(shù)據(jù),更新相應(yīng)的元數(shù)據(jù)節(jié)點(diǎn),同請(qǐng)求數(shù)據(jù)一起按照日志布局追加寫入存儲(chǔ)空間。
[0016]上述步驟33)流程是:
331)為每個(gè)虛擬機(jī)請(qǐng)求建立一個(gè)文件緩存;
332)在文件緩存中緩沖一系列的文件更改,包括文件數(shù)據(jù)、索引、目錄以及其他用于文件系統(tǒng)管理的信息;
333)更新元數(shù)據(jù),按照文件創(chuàng)建時(shí)間、大小和屬性等相關(guān)信息建立元數(shù)據(jù)節(jié)點(diǎn);
334)將元數(shù)據(jù)節(jié)點(diǎn)和文件內(nèi)容以一次日志操作順序?qū)懭氪疟P。
[0017]本發(fā)明結(jié)合HDFS分布式存儲(chǔ)的體系結(jié)構(gòu)和日志結(jié)構(gòu)文件系統(tǒng)順序?qū)憯?shù)據(jù)的特性,將虛擬機(jī)鏡像組織成多個(gè)段文件和數(shù)據(jù)塊,基于定制的元數(shù)據(jù)策略用順序?qū)憣?shí)現(xiàn)了對(duì)HDFS存儲(chǔ)文件的隨機(jī)寫特性,為虛擬機(jī)鏡像數(shù)據(jù)的動(dòng)態(tài)訪問(wèn)提供了支持。
【專利附圖】
【附圖說(shuō)明】
[0018]圖1系統(tǒng)架構(gòu)圖;
圖2文件存儲(chǔ)布局;
圖3節(jié)點(diǎn)內(nèi)部結(jié)構(gòu)圖;
圖4讀文件流程; 圖5寫文件流程。
【具體實(shí)施方式】
[0019]本發(fā)明提供了一種基于HDFS的虛擬機(jī)鏡像存儲(chǔ)系統(tǒng)及其構(gòu)建方法,為了更好的說(shuō)明其設(shè)計(jì)和實(shí)現(xiàn)方法,下面結(jié)合附圖進(jìn)行詳細(xì)說(shuō)明。
[0020]如圖1是基于HDFS的虛擬機(jī)鏡像存儲(chǔ)系統(tǒng)架構(gòu)圖,整個(gè)系統(tǒng)分為三個(gè)部分:
I)虛擬化服務(wù)器層?;赬en構(gòu)建的虛擬化集群,虛擬機(jī)在運(yùn)行過(guò)程中由其所在物理服務(wù)器負(fù)責(zé)維護(hù)系統(tǒng)狀態(tài)和內(nèi)存環(huán)境等,而其由鏡像實(shí)現(xiàn)的磁盤將存儲(chǔ)在共享存儲(chǔ)系統(tǒng)中,即本發(fā)明采用的HDFS分布式文件系統(tǒng)。虛擬機(jī)在以HDFS作為存儲(chǔ)底層中實(shí)行動(dòng)態(tài)遷移,可以極大的提高遷移時(shí)間,靈活的實(shí)現(xiàn)的資源的靈活分配和動(dòng)態(tài)管理。
[0021]2)存儲(chǔ)管理層。存儲(chǔ)管理層是本發(fā)明實(shí)現(xiàn)的核心技術(shù),具體方式是將虛擬機(jī)鏡像分成多個(gè)段文件存儲(chǔ)在HDFS分布式文件系統(tǒng)中,結(jié)合日志結(jié)構(gòu)文件系統(tǒng)順序?qū)懙奶匦詫?shí)現(xiàn)對(duì)HDFS文件的隨機(jī)寫,為虛擬機(jī)鏡像數(shù)據(jù)的動(dòng)態(tài)訪問(wèn)提供支持。本發(fā)明將存儲(chǔ)管理層分為存儲(chǔ)空間管理、鏡像數(shù)據(jù)管理和讀寫定位三個(gè)器,構(gòu)建了虛擬機(jī)鏡像動(dòng)態(tài)運(yùn)行的分布容錯(cuò)云存儲(chǔ)機(jī)制。
[0022]3)HDFS存儲(chǔ)層。HDFS集群由大量廉價(jià)、異構(gòu)的機(jī)器組成,面向大文件存儲(chǔ),提供的多副本容錯(cuò)和實(shí)用性適合于拷貝操作,虛擬機(jī)端在請(qǐng)求數(shù)據(jù)時(shí)能就近訪問(wèn)數(shù)據(jù)節(jié)點(diǎn),減少了數(shù)據(jù)傳輸時(shí)間。HDFS存儲(chǔ)層主要為存儲(chǔ)管理服務(wù)器的工作器提供文件讀寫接口,管理層通過(guò)調(diào)用這些接口實(shí)現(xiàn)虛擬機(jī)鏡像的動(dòng)態(tài)訪問(wèn)。
[0023]在系統(tǒng)初始化時(shí),首先要根據(jù)實(shí)際需要?jiǎng)?chuàng)建大小適合的虛擬機(jī)鏡像。接著由存儲(chǔ)空間管理器對(duì)創(chuàng)建的鏡像進(jìn)行處理,一個(gè)鏡像被劃分成多個(gè)固定大小的段文件,每個(gè)段文件由多個(gè)數(shù)據(jù)塊構(gòu)成,其中數(shù)據(jù)塊是文件操作的基本單位。典型的可以將段大小設(shè)置為一個(gè)HDFS數(shù)據(jù)塊大小,根據(jù)HDFS的存儲(chǔ)特性,每個(gè)段文件將多副本的存儲(chǔ)在不同的數(shù)據(jù)節(jié)點(diǎn)上,如圖2所示。
[0024]根據(jù)段文件和數(shù)據(jù)塊的組織關(guān)系,可以很容易確定數(shù)據(jù)塊存儲(chǔ)地址的位分布:一個(gè)數(shù)據(jù)塊的存儲(chǔ)地址為64位,將這64位分為兩個(gè)部分,第一部分表示段文件號(hào),第二個(gè)部分表不段文件內(nèi)的偏移量。如果一個(gè)段是64M的大小,那么存儲(chǔ)地址的后26位可以確定偏移量,其余的前38位可以索引段文件號(hào),這樣,虛擬機(jī)鏡像的讀寫操作可以被唯一定位。
[0025]為了完成對(duì)一個(gè)信息的完整索引,所有元數(shù)據(jù)和數(shù)據(jù)內(nèi)容都以日志為單位順序?qū)懭氪鎯?chǔ)空間,其存儲(chǔ)布局為:日志頭節(jié)點(diǎn)、數(shù)據(jù)內(nèi)容、間接數(shù)據(jù)塊、索引節(jié)點(diǎn)和索引映射節(jié)點(diǎn)。鏡像數(shù)據(jù)管理器將所有數(shù)據(jù)按照日志布局以段的形式存儲(chǔ)。
[0026]因?yàn)閿?shù)據(jù)是不斷追加寫入,而之前被刪除和修改后的無(wú)效數(shù)據(jù)段需要及時(shí)回收,以制造新的空閑空間以滿足新數(shù)據(jù)的寫入需求。存儲(chǔ)空間管理設(shè)計(jì)了段回收線程來(lái)實(shí)現(xiàn)這一機(jī)制,以保證系統(tǒng)持續(xù)可運(yùn)行。其處理過(guò)程由兩個(gè)步驟完成:
I)統(tǒng)計(jì)段的使用狀況,即當(dāng)前段的活躍數(shù)據(jù)塊數(shù)。統(tǒng)計(jì)階段需要先遍歷段文件中的各數(shù)據(jù)塊,檢查當(dāng)前索引節(jié)點(diǎn)的間接塊中是否有地址指向它:如果沒(méi)有則說(shuō)明該數(shù)據(jù)塊是舊數(shù)據(jù)可以放棄,如果一個(gè)段中的所有數(shù)據(jù)塊都是舊數(shù)據(jù)塊,則這個(gè)段文件可被回收,如果一個(gè)段中只有部分?jǐn)?shù)據(jù)塊是舊數(shù)據(jù)塊,則記錄所有數(shù)據(jù)塊的有效性、段內(nèi)位置和活躍狀態(tài)。通過(guò)拉模式可以從客戶端所在節(jié)點(diǎn)讀取段使用情況到本地以執(zhí)行統(tǒng)計(jì)任務(wù),最終產(chǎn)生的結(jié)果存放到專門的段使用表文本中,系統(tǒng)通過(guò)讀取該文本獲得相關(guān)信息。
[0027]2)對(duì)活躍塊小于某閾值的段執(zhí)行刪除或者拷貝操作,隨后執(zhí)行刪除操作來(lái)回收空間。具體來(lái)說(shuō),當(dāng)段中可用數(shù)據(jù)塊很少時(shí),便可執(zhí)行拷貝后刪除操作,將非舊數(shù)據(jù)的數(shù)據(jù)塊主動(dòng)以日志形式拷貝寫到新段中,從而使得原段中的所有數(shù)據(jù)塊都成為舊數(shù)據(jù)塊。系統(tǒng)中沒(méi)有空閑塊列表或者位圖之類的結(jié)構(gòu),節(jié)省了內(nèi)存和磁盤空間。這部分工作由唯一的寫入線程讀取段統(tǒng)計(jì)表后執(zhí)行,以避免并發(fā)修改索引節(jié)點(diǎn)等元數(shù)據(jù)帶來(lái)的不一致問(wèn)題。
[0028]由于HDFS作為虛擬機(jī)鏡像存儲(chǔ)層不支持隨機(jī)寫的局限性,本發(fā)明從虛擬機(jī)節(jié)點(diǎn)內(nèi)部角度設(shè)計(jì)了系統(tǒng)實(shí)現(xiàn)的詳細(xì)結(jié)構(gòu),如圖3所示。當(dāng)虛擬機(jī)發(fā)起I/O請(qǐng)求,會(huì)交由Xen的虛擬機(jī)管理器(VMM)處理,其處理過(guò)程由兩個(gè)驅(qū)動(dòng)完成:運(yùn)行在Domain U內(nèi)核態(tài)的前端驅(qū)動(dòng),負(fù)責(zé)創(chuàng)建虛擬設(shè)備,并轉(zhuǎn)發(fā)I/O請(qǐng)求;運(yùn)行在Domain O內(nèi)核態(tài)的后端驅(qū)動(dòng),負(fù)責(zé)接收I/O請(qǐng)求,并調(diào)用真實(shí)的設(shè)備驅(qū)動(dòng)來(lái)完成I/O操作。
[0029]對(duì)虛擬機(jī)鏡像以文件方式存儲(chǔ)而言,Xen的blktap工具負(fù)責(zé)完成后端驅(qū)動(dòng)的工作,但是它并不支持HDFS的存儲(chǔ)形式。對(duì)此,系統(tǒng)通過(guò)讀寫定位器在blktap接受I/O請(qǐng)求之后,交給tapdisk進(jìn)程處理,去掉數(shù)據(jù)和內(nèi)核層的通信,直接從tapdisk用戶態(tài)將I/O請(qǐng)求發(fā)送到HDFS存儲(chǔ)系統(tǒng),完成請(qǐng)求的讀寫數(shù)據(jù)過(guò)程。
[0030]虛擬機(jī)I/O請(qǐng)求的讀過(guò)程如下:
當(dāng)虛擬機(jī)發(fā)起讀數(shù)據(jù)請(qǐng)求時(shí),其處理流程如圖4所示。設(shè)讀請(qǐng)求的兩個(gè)文件參數(shù)是read_len (表示要讀取的長(zhǎng)度)和pos (表示文件內(nèi)偏移值),開(kāi)始讀的數(shù)據(jù)塊號(hào)為start_db,最后要讀的數(shù)據(jù)塊號(hào)為end_db,一個(gè)數(shù)據(jù)塊大小為block_size。讀文件過(guò)程可以分為兩個(gè)部分:
Dpos位置在start_db內(nèi)部,即第一個(gè)數(shù)據(jù)塊在POS處的后半部分才是需讀取的數(shù)據(jù)起始位置;
2)pos+read_len位置在end_db內(nèi)部,即待讀文件數(shù)據(jù)最末端在最后一個(gè)數(shù)據(jù)塊的中間某部分,最后一個(gè)數(shù)據(jù)塊的前半部分才是最后需要讀取的數(shù)據(jù)。
[0031]如果pos / block_size 和(pos+read_len) / block_size 相等,虛擬機(jī)請(qǐng)求讀取的文件大小在一個(gè)數(shù)據(jù)塊內(nèi),根據(jù)db_no將指定部分的數(shù)據(jù)拷貝到緩沖區(qū)即可。
[0032]如果pos/block_size 和(pos+read_len) / block_size 不相等,則是要讀取多個(gè)數(shù)據(jù)塊的內(nèi)容,該過(guò)程如下:
I)首先判斷pos位置是否在start_db處(pos%block_size),如果不是,則需要單獨(dú)讀取第一個(gè)數(shù)據(jù)塊內(nèi)容。先讀取第一個(gè)數(shù)據(jù)塊內(nèi)容,并將后半部分需要讀取的內(nèi)容單獨(dú)拷貝到緩沖區(qū),同時(shí)將start_db加I ;如果pos位置正好在start_db處,那么start_db值不變。
[0033]2)將 end_db 設(shè)置為(pos+read_len) / block_size,這時(shí) end_db 表不要讀取的最后一個(gè)數(shù)據(jù)塊號(hào)。
[0034]3) [ start_d, bend_db )區(qū)間內(nèi)的數(shù)據(jù)塊是要完整讀取的數(shù)據(jù)塊,直接拷貝這些數(shù)據(jù)塊內(nèi)容到緩沖區(qū)。
[0035]4)如果(pos+read_len)% block_size的值不為O,表不最后一個(gè)數(shù)據(jù)塊還含有前半部分?jǐn)?shù)據(jù)需要讀取,先單獨(dú)讀取(pos+reacLlen)位置所在的數(shù)據(jù)塊,然后將這些數(shù)據(jù)內(nèi)容拷貝到緩沖區(qū)。
[0036]虛擬機(jī)1/0請(qǐng)求的寫過(guò)程如下: 當(dāng)虛擬機(jī)發(fā)起寫數(shù)據(jù)請(qǐng)求時(shí),其處理流程如圖5所示。首先會(huì)根據(jù)其寫入的文件偏移位置pos、要寫入的大小write_len以及要寫入的數(shù)據(jù)緩沖區(qū)write_buf,計(jì)算要追加寫的日志長(zhǎng)度,過(guò)程詳述如下:
O計(jì)算要更新的第一個(gè)數(shù)據(jù)塊號(hào):start_db= pos/block_size,最后一個(gè)數(shù)據(jù)塊號(hào):end_db= (pos+write_len) / block_size。如果 start_db 和 end_db 相等,則只需要更新第一個(gè)數(shù)據(jù)塊的內(nèi)容。接下來(lái)讀取這個(gè)數(shù)據(jù)塊的內(nèi)容,同更新的數(shù)據(jù)區(qū)write_buf —起寫入新的緩沖區(qū)。
[0037]2)如果start_db和end_db不相等,說(shuō)明有多個(gè)數(shù)據(jù)塊需要更新。判斷pos%block_size是否為0,如果不是,單獨(dú)處理第一個(gè)數(shù)據(jù)塊:將start_db中不需要更新的前半部分拷貝到緩沖區(qū),接著將整個(gè)寫入請(qǐng)求write_buf拷貝到緩沖區(qū)。
[0038]3)如果(pos +write_len) % block_size 不為 O,說(shuō)明最后一個(gè)數(shù)據(jù)塊 end_db 只需要更新前半部分?jǐn)?shù)據(jù)。將end_db的后半部分?jǐn)?shù)據(jù)也拷貝到緩沖區(qū)中,這樣就形成了從start_db到end_db的完整數(shù)據(jù)塊。
[0039]4)緩沖區(qū)的內(nèi)容代表最終要追加寫入的新數(shù)據(jù),即對(duì)原[start_db, end_db]區(qū)間數(shù)據(jù)的更新。更新索引結(jié)點(diǎn)、索引映射結(jié)點(diǎn)等相關(guān)內(nèi)容,并根據(jù)數(shù)據(jù)塊號(hào)和間接塊組織關(guān)系,確定追加寫操作的日志大小。在緩存這一系列更改之后,將所有元數(shù)據(jù)和更改文件內(nèi)容一次性的順序?qū)懭腌R像文件末端,以完成虛擬機(jī)的寫數(shù)據(jù)請(qǐng)求。
【權(quán)利要求】
1.一種基于HDFS的虛擬機(jī)鏡像存儲(chǔ)系統(tǒng),包括虛擬機(jī)服務(wù)器、存儲(chǔ)管理服務(wù)器和若干HDFS存儲(chǔ)節(jié)點(diǎn)構(gòu)成的HDFS存儲(chǔ)節(jié)點(diǎn)集群,其特征在于,所述存儲(chǔ)管理服務(wù)器包括: 1)存儲(chǔ)空間管理器:管理HDFS存儲(chǔ)節(jié)點(diǎn)集群的存儲(chǔ)空間,創(chuàng)建虛擬機(jī)實(shí)例前,存儲(chǔ)空間管理器先在HDFS存儲(chǔ)節(jié)點(diǎn)上創(chuàng)建相應(yīng)的虛擬機(jī)鏡像;存儲(chǔ)空間管理器將虛擬機(jī)鏡像組織成段文件的形式,并基于段文件建立數(shù)據(jù)塊機(jī)制,所有的段文件都分布存儲(chǔ)在HDFS存儲(chǔ)節(jié)點(diǎn)中,以及完成對(duì)歷史數(shù)據(jù)所占存儲(chǔ)空間的回收工作; 2)讀寫定位管理器:虛擬機(jī)鏡像完成在HDFS存儲(chǔ)節(jié)點(diǎn)的部署之后,虛擬機(jī)發(fā)起的讀寫請(qǐng)求由Xen虛擬機(jī)監(jiān)控器截獲,交由讀寫定位管理器處理,將接受的虛擬機(jī)請(qǐng)求轉(zhuǎn)發(fā)到HDFS存儲(chǔ)節(jié)點(diǎn)集群;其根據(jù)元數(shù)據(jù)的組織方式處理虛擬機(jī)讀寫請(qǐng)求,定位和查找特定段文件內(nèi)的數(shù)據(jù),并響應(yīng)虛擬機(jī)的讀寫請(qǐng)求; 3)鏡像數(shù)據(jù)管理器:管理虛擬機(jī)鏡像的數(shù)據(jù)內(nèi)容,通過(guò)定制的元數(shù)據(jù)格式組織段文件不同數(shù)據(jù)內(nèi)容,并依據(jù)段文件和數(shù)據(jù)塊的存儲(chǔ)機(jī)制嚴(yán)格按照順序?qū)懭耄瓿删唧w的虛擬機(jī)鏡像讀寫操作。
2.一種基于HDFS的虛擬機(jī)鏡像存儲(chǔ)系統(tǒng)的構(gòu)建方法,其特征在于包括以下步驟: 1)對(duì)HDFS存儲(chǔ)節(jié)點(diǎn)集群的存儲(chǔ)空間進(jìn)行管理,將虛擬機(jī)鏡像組織成段文件的形式,并基于段文件建立數(shù)據(jù)塊機(jī)制,所有的段文件都分布存儲(chǔ)在HDFS存儲(chǔ)節(jié)點(diǎn)中, 2)虛擬機(jī)鏡像實(shí)例完成在HDFS存儲(chǔ)節(jié)點(diǎn)的部署之后,虛擬機(jī)發(fā)起讀寫請(qǐng)求,由Xen虛擬機(jī)監(jiān)控器負(fù)責(zé)處理并交由讀寫定位管理器,虛擬機(jī)請(qǐng)求被轉(zhuǎn)發(fā)到HDFS存儲(chǔ)集群,由存儲(chǔ)相應(yīng)數(shù)據(jù)的DateNode存儲(chǔ)節(jié)點(diǎn) 相應(yīng)讀寫請(qǐng)求; 3)對(duì)于虛擬機(jī)鏡像的數(shù)據(jù)內(nèi)容,通過(guò)定制的元數(shù)據(jù)格式組織段文件不同數(shù)據(jù)內(nèi)容,并依據(jù)段文件和數(shù)據(jù)塊的存儲(chǔ)機(jī)制嚴(yán)格按照順序?qū)懭?,完成具體的虛擬機(jī)鏡像讀寫操作。
3.根據(jù)權(quán)利要求2所述的基于HDFS的虛擬機(jī)鏡像存儲(chǔ)系統(tǒng)的構(gòu)建方法,其特征在于步驟I)的具體步驟是: 11)配置HDFS的多副本參數(shù),啟動(dòng)HDFS集群,在NameNode下運(yùn)行start-all命令,多個(gè)DateNode存儲(chǔ)節(jié)點(diǎn)負(fù)責(zé)數(shù)據(jù)的存儲(chǔ); 12)在HDFS存儲(chǔ)空間創(chuàng)建虛擬機(jī)鏡像實(shí)例,以Iinux格式化命令在指定目錄生成鏡像文件,同時(shí)以字節(jié)為單位設(shè)置段和數(shù)據(jù)塊的大?。黄渲卸挝募凑諗?shù)字1、2、3...的順序遞增編號(hào),段內(nèi)數(shù)據(jù)塊是數(shù)據(jù)操作的基本單位; 13)多個(gè)段文件根據(jù)HDFS的存儲(chǔ)特性分布到多個(gè)DateNode存儲(chǔ)節(jié)點(diǎn); 14)創(chuàng)建虛擬機(jī)運(yùn)行實(shí)例,虛擬機(jī)請(qǐng)求被定為到HDFS存儲(chǔ)空間,并分散到大量存儲(chǔ)節(jié)點(diǎn)在段文件中生成虛擬機(jī)磁盤數(shù)據(jù); 15)虛擬機(jī)的運(yùn)行過(guò)程實(shí)時(shí)反映到HDFS上的鏡像實(shí)例上,虛擬機(jī)的數(shù)據(jù)讀寫同布更新鏡像實(shí)例的數(shù)據(jù)段內(nèi)容;存儲(chǔ)空間模塊記錄被刪除或修改后的無(wú)效數(shù)據(jù)段,通過(guò)設(shè)定閾值以刪除或拷貝的方式產(chǎn)生新的空閑空間。
4.根據(jù)權(quán)利要求3所述的基于HDFS的虛擬機(jī)鏡像存儲(chǔ)系統(tǒng)的構(gòu)建方法,其特征在于步驟15)流程是: 151)統(tǒng)計(jì)每個(gè)段文件的使用情況,即當(dāng)前段中的活躍數(shù)據(jù)塊個(gè)數(shù),以遍歷法檢查當(dāng)前索引節(jié)點(diǎn)的間接塊中的地址指向; 152)從客戶端所在節(jié)點(diǎn)讀取段使用情況到本地執(zhí)行統(tǒng)計(jì)任務(wù);153)根據(jù)統(tǒng)計(jì)任務(wù)執(zhí)行段回收工作,即對(duì)活躍塊小于某閾值的段執(zhí)行刪除或者拷貝操作來(lái)回收空間; 154)如果一個(gè)段中的所有數(shù)據(jù)塊都是無(wú)效數(shù)據(jù)塊,則這個(gè)段文件可被回收,即從HDFS中刪除; 155)如果一個(gè)段中只有部分?jǐn)?shù)據(jù)塊是無(wú)效數(shù)據(jù)塊,則記錄所有數(shù)據(jù)塊的有效性、段內(nèi)位置和活躍狀態(tài);將有效數(shù)據(jù)塊主動(dòng)以日志形式拷貝寫到新段中,從而使得原段中的所有數(shù)據(jù)塊都成為舊數(shù)據(jù)塊,以執(zhí)行刪除操作產(chǎn)生新的空閑空間。
5.根據(jù)權(quán)利要求2所述的基于HDFS的虛擬機(jī)鏡像存儲(chǔ)系統(tǒng)的構(gòu)建方法,其特征在于步驟2)的具體步驟是: 21)虛擬機(jī)讀寫請(qǐng)求從Xen的blkfront到blkback,通過(guò)blktap2驅(qū)動(dòng)交到用戶空間的tapdisk2進(jìn)程的地址空間; 22)擴(kuò)展blktap2的后端驅(qū)動(dòng),將虛擬機(jī)讀寫請(qǐng)求的扇區(qū)信息轉(zhuǎn)化為對(duì)鏡像文件的偏移信息,根據(jù)元數(shù)據(jù)的組織方式,定位和查找特定段文件內(nèi)的數(shù)據(jù); 23)通過(guò)tapdisk2進(jìn)程調(diào)用自定義的讀寫接口,設(shè)置的鏡像名、文件大小、偏移量信息; 24)tapdisk2進(jìn)程的讀寫接口完成鏡像元數(shù)據(jù)和文件內(nèi)容的操作,最終調(diào)用HDFS的API完成對(duì)鏡像實(shí)例的更新。
6.根據(jù)權(quán)利要求5所述的基于HDFS的虛擬機(jī)鏡像存儲(chǔ)系統(tǒng)的構(gòu)建方法,其特征在于步驟22)流程是: 221)blktap2負(fù)責(zé)處理接收的虛擬機(jī)讀寫請(qǐng)求,將請(qǐng)求的扇區(qū)號(hào)和要讀寫的扇區(qū)數(shù)轉(zhuǎn)化為要讀取的文件偏移量和大??;因?yàn)樗袛?shù)據(jù)是順序?qū)懭?,只需將扇區(qū)號(hào)和扇區(qū)數(shù)乘上創(chuàng)建鏡像時(shí)設(shè)定的扇區(qū)大小即可; 222)根據(jù)段文件和數(shù)據(jù)塊的組織關(guān)系,以64位表示數(shù)據(jù)塊的存儲(chǔ)地址,存儲(chǔ)地址的位分布由兩部分唯一定位:后半部分位數(shù)可以確定偏移量,前半部分位數(shù)可確定段文件號(hào); 223)訪問(wèn)位于日志尾的索引映射節(jié)點(diǎn),找到所需文件對(duì)應(yīng)索引節(jié)點(diǎn)并讀取其信息,之后根據(jù)文件邏輯地址對(duì)應(yīng)的數(shù)據(jù)塊物理地址,計(jì)算段號(hào)和段內(nèi)偏移量訪問(wèn)請(qǐng)求的數(shù)據(jù)。
7.根據(jù)權(quán)利要求2所述的基于HDFS的虛擬機(jī)鏡像存儲(chǔ)系統(tǒng)的構(gòu)建方法,其特征在于步驟3)具體步驟是: 31)定制元數(shù)據(jù)格式,主要?jiǎng)?chuàng)建如下節(jié)點(diǎn): 超級(jí)塊節(jié)點(diǎn),描述創(chuàng)建的虛擬機(jī)鏡像文件系統(tǒng)的屬性信息,記錄鏡像實(shí)例、鏡像大小、段大小和數(shù)據(jù)塊大小等信息; 索引節(jié)點(diǎn),記錄文件的權(quán)限和屬性等相關(guān)信息,一個(gè)文件對(duì)應(yīng)一個(gè)索引節(jié)點(diǎn); 索引映射節(jié)點(diǎn),記錄索引節(jié)點(diǎn)號(hào)和對(duì)應(yīng)的索引節(jié)點(diǎn)位置,作為全局?jǐn)?shù)據(jù)結(jié)構(gòu); 日志頭節(jié)點(diǎn),將每次順序的磁盤寫操作稱為一次日志操作,記錄當(dāng)前日志版本、檢驗(yàn)信息、日志大小、創(chuàng)建時(shí)間以及數(shù)據(jù)塊、間接數(shù)據(jù)塊個(gè)數(shù)等信息; 全局控制節(jié)點(diǎn),記錄當(dāng)前鏡像的所有元數(shù)據(jù)信息、讀寫標(biāo)志、文件句柄和寫異步隊(duì)列等一些列相關(guān)信息; 32)建立完整信息索引的日志布局,數(shù)據(jù)寫入順序?yàn)?日志頭節(jié)點(diǎn)、數(shù)據(jù)內(nèi)容、間接數(shù)據(jù)塊、索引節(jié)點(diǎn)和索引映射節(jié)點(diǎn);33)接收虛擬機(jī)讀寫數(shù)據(jù),更新相應(yīng)的元數(shù)據(jù)節(jié)點(diǎn),同請(qǐng)求數(shù)據(jù)一起按照日志布局追加與入存儲(chǔ)空間。
8.根據(jù)權(quán)利要求7所述的基于HDFS的虛擬機(jī)鏡像存儲(chǔ)系統(tǒng)的構(gòu)建方法,其特征在于步驟33)流程是: 331)為每個(gè)虛擬機(jī)請(qǐng)求建立一個(gè)文件緩存; 332)在文件緩存中緩沖一系列的文件更改,包括文件數(shù)據(jù)、索引、目錄以及其他用于文件系統(tǒng)管理的信息; 333)更新元數(shù)據(jù),按照文件創(chuàng)建時(shí)間、大小和屬性等相關(guān)信息建立元數(shù)據(jù)節(jié)點(diǎn); 334)將元數(shù)據(jù)節(jié)點(diǎn)和文件內(nèi) 容以一次日志操作順序?qū)懭氪疟P。
【文檔編號(hào)】G06F3/06GK103544045SQ201310483678
【公開(kāi)日】2014年1月29日 申請(qǐng)日期:2013年10月16日 優(yōu)先權(quán)日:2013年10月16日
【發(fā)明者】牟權(quán), 葉保留, 李東輝, 吳小志 申請(qǐng)人:南京大學(xué)鎮(zhèn)江高新技術(shù)研究院, 南京南瑞集團(tuán)公司信息系統(tǒng)集成分公司