熊安萍, 蔡毅峰, 蔣 溢
(重慶郵電大學(xué)大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院, 重慶 400065)
隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的高速發(fā)展,大規(guī)模分布式集群存儲(chǔ)系統(tǒng)的應(yīng)用越來(lái)越廣泛,如超大規(guī)模的電子郵件系統(tǒng)、數(shù)字圖書(shū)館、大型在線電子商務(wù)系統(tǒng)、衛(wèi)星數(shù)字處理、視頻數(shù)字圖像處理、高性能計(jì)算等[1].分布式集群系統(tǒng)將普通的商用PC機(jī)或工作站通過(guò)高速網(wǎng)絡(luò)互聯(lián)在一起組成集群,能夠根據(jù)系統(tǒng)的需求隨時(shí)增加新的硬件,提高系統(tǒng)的可伸縮性,可以同時(shí)利用RAID技術(shù)和基于網(wǎng)絡(luò)的復(fù)制技術(shù),從而能夠在價(jià)格低廉的中低端平臺(tái)上獲得高端或者超級(jí)計(jì)算機(jī)上才能獲得的高可用性、高性能[2].
基于對(duì)象存儲(chǔ)技術(shù)是存儲(chǔ)領(lǐng)域中的新興技術(shù).它以對(duì)象作為數(shù)據(jù)存儲(chǔ)管理的基本單位,采用數(shù)據(jù)與元數(shù)據(jù)分離的存儲(chǔ)體系結(jié)構(gòu),元數(shù)據(jù)服務(wù)器負(fù)責(zé)管理元數(shù)據(jù)并為存儲(chǔ)系統(tǒng)提供全局命名空間,而數(shù)據(jù)存儲(chǔ)在具有智能管理功能的基于對(duì)象存儲(chǔ)設(shè)備上.基于對(duì)象存儲(chǔ)體系結(jié)構(gòu)的網(wǎng)絡(luò)帶寬,I/O吞吐量以及處理能力是隨著存儲(chǔ)節(jié)點(diǎn)的增加而同步線性增長(zhǎng),但是在增加存儲(chǔ)設(shè)備的同時(shí)也增大了系統(tǒng)出現(xiàn)故障的可能性,帶來(lái)了系統(tǒng)高可用、數(shù)據(jù)容錯(cuò)方面的問(wèn)題[3].文件分片技術(shù)能夠便于元數(shù)據(jù)管理器對(duì)數(shù)據(jù)的集中管理,減輕了元數(shù)據(jù)管理器的瓶頸,也能夠保證數(shù)據(jù)的高可用,也便于元數(shù)據(jù)服務(wù)器的擴(kuò)展.但是,文件分片可能出現(xiàn)不一致的概率會(huì)比普通的RAID更高,同時(shí),奇偶校驗(yàn)的更新效率上也會(huì)比同級(jí)別的RAID低.但總體來(lái)說(shuō),文件分片技術(shù)能有效地提高系統(tǒng)的讀寫(xiě)帶寬.
作者在分析基于對(duì)象存儲(chǔ)文件系統(tǒng)Lustre的分片技術(shù)的基礎(chǔ)之上, 為文件數(shù)據(jù)塊提供多個(gè)存儲(chǔ)策略,運(yùn)用物理地址和邏輯地址相互轉(zhuǎn)換的方法,實(shí)現(xiàn)了一個(gè)基于分片技術(shù)的文件存儲(chǔ)機(jī)制,實(shí)驗(yàn)結(jié)果表明,該分片存儲(chǔ)機(jī)制能夠提供靈活的文件存儲(chǔ)策略,使得用戶(hù)能夠進(jìn)行選擇使用,同時(shí)保證了系統(tǒng)的讀寫(xiě)性能.
Lustre文件系統(tǒng)是由Cluster File Systems, Inc(CFS)公司開(kāi)發(fā)的、一個(gè)開(kāi)源的基于Linux操作系統(tǒng)的、面向下一代存儲(chǔ)的分布式文件系統(tǒng),消除了目前很多傳統(tǒng)文件系統(tǒng)中存在的性能,可靠性以及可擴(kuò)展性上的問(wèn)題.
Lustre文件系統(tǒng)主要由3部分組成:客戶(hù)端(CFS, Client File System)、對(duì)象存儲(chǔ)服務(wù)器(OST, Object Storage Target)和元數(shù)據(jù)服務(wù)器(MDS, MetaData Server).Lustre是一個(gè)高度模塊化的分布式文件系統(tǒng),這3個(gè)子系統(tǒng)可以分別運(yùn)行在不同的計(jì)算機(jī)節(jié)點(diǎn)上,也可以運(yùn)行在同一節(jié)點(diǎn)上[4].
在基于對(duì)象存儲(chǔ)的Lustre文件系統(tǒng)中,文件是由一個(gè)或多個(gè)存儲(chǔ)對(duì)象組成,將組成文件的所有存儲(chǔ)對(duì)象稱(chēng)之為存儲(chǔ)對(duì)象組.傳統(tǒng)的RAID是以存儲(chǔ)對(duì)象為粒度,與soft RAID Linux MD/RAID塊設(shè)備一級(jí)實(shí)現(xiàn)不同,它是在文件一級(jí)實(shí)現(xiàn),粒度更小,更加靈活.在Linux的MD RAID中,以軟件的方法實(shí)現(xiàn)了多種數(shù)據(jù)分布模式,有線性模式、RAID0、RAID1、RAID5、RAID6等[5],文件級(jí)RAID的級(jí)別定義與傳統(tǒng)的RAID類(lèi)似. non-RAID是將文件數(shù)據(jù)僅存儲(chǔ)到一個(gè)存儲(chǔ)對(duì)象中;RAID0是將文件數(shù)據(jù)以Round-Robin算法條帶化地?zé)o冗余地分布存儲(chǔ)到N個(gè)存儲(chǔ)對(duì)象中;RAID1是將文件數(shù)據(jù)分布到N個(gè)存儲(chǔ)對(duì)象中,存儲(chǔ)對(duì)象互為鏡像.本文為這3種實(shí)現(xiàn)策略提供了統(tǒng)一的實(shí)現(xiàn)機(jī)制,并通過(guò)一個(gè)特定的接口提供給用戶(hù)使用.
1.2.1 Lustre文件級(jí)RAID基本思想 Lustre是一種基于對(duì)象存儲(chǔ)文件系統(tǒng),因而在Lustre中,文件是以一個(gè)或多個(gè)存儲(chǔ)對(duì)象組成,所有的存儲(chǔ)對(duì)象稱(chēng)之為存儲(chǔ)對(duì)象組.相對(duì)于傳統(tǒng)的RAID, Lustre中的RAID設(shè)計(jì)以存儲(chǔ)對(duì)象為粒度,在文件一級(jí)實(shí)現(xiàn),通過(guò)對(duì)文件進(jìn)行分片,以及設(shè)計(jì)相應(yīng)的分片管理策略,實(shí)現(xiàn)Lustre中的文件級(jí)RAID技術(shù)[6].
對(duì)于Lustre文件系統(tǒng),用戶(hù)在使用和處理數(shù)據(jù)的過(guò)程中,對(duì)于數(shù)據(jù)的可靠性級(jí)別,是有自己不同的需求的.然而Lustre文件系統(tǒng)卻沒(méi)有給用戶(hù)提供這種選擇的機(jī)制,因而,可以通過(guò)提供相應(yīng)的機(jī)制,讓用戶(hù)靈活根據(jù)使用non-RAID,RAID0和RAID1 3種數(shù)據(jù)策略來(lái)管理用戶(hù)數(shù)據(jù).本文通過(guò)為文件數(shù)據(jù)塊提供多個(gè)存儲(chǔ)策略,并且將這些策略作為一個(gè)通用的系統(tǒng)組件,以進(jìn)行統(tǒng)一的管理和使用.
1.2.2 文件分片訪問(wèn)接口設(shè)計(jì) Lustre的客戶(hù)端,對(duì)象存儲(chǔ)服務(wù)器都要通過(guò)統(tǒng)一的分片策略訪問(wèn)接口,調(diào)用不同的分片策略分布算法函數(shù),實(shí)現(xiàn)對(duì)數(shù)據(jù)的多策略訪問(wèn).設(shè)計(jì)函數(shù)strategy_accessing_request(),作為策略訪問(wèn)的唯一接口.同時(shí)定義以下幾個(gè)數(shù)據(jù)結(jié)構(gòu),對(duì)Lustre中的文件布局進(jìn)行相關(guān)的描述.
strategy_request結(jié)構(gòu):通過(guò)定義數(shù)據(jù)的起始偏移量,數(shù)據(jù)塊中元素的個(gè)數(shù),總字節(jié)數(shù),以及描述基本元素類(lèi)型的結(jié)構(gòu)來(lái)描述邏輯文件的連續(xù)數(shù)據(jù)布局.
strategy_stack_req結(jié)構(gòu):通過(guò)一個(gè)指向strategy_request指針記錄數(shù)據(jù)正在被處理的情況.
strategy_request_state結(jié)構(gòu):通過(guò)使用一個(gè)堆棧跟蹤數(shù)據(jù)的每一級(jí),對(duì)于每一級(jí),則通過(guò)strategy_stack_req對(duì)數(shù)據(jù)塊的處理情況進(jìn)行描述.
strategy_file_request結(jié)構(gòu):描述數(shù)據(jù)片的服務(wù)器分布狀況以及文件的具體分片算法結(jié)構(gòu).
函數(shù)strategy_accessing_request()處理請(qǐng)求和文件分布算法.通過(guò)處理偏移量和段大小的數(shù)組,并且將上面定義的4種結(jié)構(gòu)進(jìn)行初始化,這樣就得到了所有的文件分布策略、文件分布的參數(shù)等文件分片的關(guān)鍵數(shù)據(jù).客戶(hù)端可以通過(guò)它調(diào)用具體的分布算法計(jì)算文件的邏輯偏移量和文件大小.對(duì)象存儲(chǔ)服務(wù)器則可以通過(guò)該函數(shù)計(jì)算分片文件中實(shí)際的物理偏移地址,獲取該分片文件的數(shù)據(jù).
圖1 接口函數(shù)調(diào)用流程圖
定義分布算法接口函數(shù)strategy_distribution(),函數(shù)strategy_accessing_request()通過(guò)調(diào)用該分布函數(shù)來(lái)調(diào)用具體的文件分布算法.而具體的分布算法又統(tǒng)一讓函數(shù)strategy_distribution()調(diào)用.圖1給出了接口函數(shù)的調(diào)用流程圖.
1.2.3 文件分片算法 文件分片的算法關(guān)鍵在于邏輯偏移量與物理偏移量之間的相互轉(zhuǎn)換.對(duì)于non-RAID分片策略,則文件的物理偏移量等于邏輯偏移量,相互之間不需要轉(zhuǎn)換.RAID0的分布算法則借鑒了磁盤(pán)陣列的RAID0方法實(shí)現(xiàn),將一個(gè)文件的分片文件輪換放置到數(shù)據(jù)節(jié)點(diǎn)上.RAID1的分布算法和RAID0一樣,也借鑒了磁盤(pán)陣列的RAID1方法,將數(shù)據(jù)輪換放置在一組服務(wù)器上,同時(shí)也備份到后續(xù)節(jié)點(diǎn)上,這樣在計(jì)算偏移量之前,先要判斷對(duì)應(yīng)的主服務(wù)器是否存在,如果不存在,則要判斷備份服務(wù)器是否存在.
對(duì)于分片算法,關(guān)鍵就是實(shí)現(xiàn)邏輯偏移量和物理偏移量之間的相互轉(zhuǎn)換.此外,對(duì)于給定的邏輯偏移量,也要能夠同物理文件的下一個(gè)物理偏移量相轉(zhuǎn)換.首先定義以下變量:
stripe_size:文件分片的大小.
total_stripes:文件的大小.
stripe_offset:物理文件從偏移量0開(kāi)始到total_stripes個(gè)完整stripe的物理位置.
remnant:邏輯偏移量減去total_stripes個(gè)stripes剩下的字節(jié)長(zhǎng)度.
在實(shí)現(xiàn)邏輯偏移量轉(zhuǎn)換為物理偏移量的過(guò)程中,關(guān)鍵是要對(duì)表示邏輯偏移量減去toal_stripes個(gè)分片剩下字節(jié)長(zhǎng)度與服務(wù)器號(hào)之間的關(guān)系進(jìn)行判斷.
temnant=logic_offset-total_stripes*stripe_size*sever_count
若remnant>=server_number*stripe_size 且 remnant< (server_number+1)*stripe_size,則說(shuō)明該物理偏移量在服務(wù)器server_number的total_stripe個(gè)完整分片的下一個(gè)分片上.
若remnant>=server_number*stripe_size 且 remnant>=(server_number+1)*stripe_size,則說(shuō)明該物理偏移量在服務(wù)器server_number的total_stripes個(gè)完整分片的下一個(gè)分片上起始位置就是我們要找的物理偏移量, 即physical_offset = stripe_offset + stripe_size.
若remnant 邏輯偏移量轉(zhuǎn)換為物理偏移量的流程如圖2所示. 同理,給定物理偏移量獲取邏輯文件的邏輯偏移量,給出的條件是:stripe大小,服務(wù)器號(hào),服務(wù)器總數(shù),邏輯文件的服務(wù)器號(hào),關(guān)鍵是對(duì)當(dāng)前物理偏移量所在的分片的偏移量長(zhǎng)度進(jìn)行判斷,變量定義如下: stripe_number:物理文件中完整的分片數(shù). stripe_off_length:當(dāng)前物理偏移量所在分片的偏移量長(zhǎng)度. temp:臨時(shí)中間變量. 具體的算法描述如下: stripe_number = physical_offset / stripr_size stripe_off_length = physical_offset % stripe_size temp = (stripe_number-1) * stripe_size * server_count if stripe_off_length>0 then temp += stripe_size * server_count temp += stripe_size * server_number temp += stripe_off_length else temp += stripe_szie * (server_number+1) logical_offset = temp 物理偏移量轉(zhuǎn)換為邏輯偏移量的流程如圖3所示: 圖2 邏輯偏移量轉(zhuǎn)換為物理偏移量流程 圖3 物理偏移量轉(zhuǎn)換為邏輯偏移量流程 RAID1的文件分片算法和RAID0的原理一樣,也是進(jìn)行邏輯偏移量和物理偏移量之間的相互轉(zhuǎn)換,只不過(guò)在進(jìn)行偏移量計(jì)算之前,先要判斷分片對(duì)應(yīng)的主服務(wù)器是否存在,如果主服務(wù)器不存在,要判斷備份服務(wù)器是否存在. 測(cè)試使用的服務(wù)器配置為Intel(R) Pentium(R) Dual 1.60GHz處理器;2GB內(nèi)存;Realtek Ethernet NIC 100/1000M網(wǎng)卡;操作系統(tǒng)安裝的是RedHat Enterprise Linux 5,使用的Lustre文件系統(tǒng)是1.4.7版,并使用iozone作為帶寬測(cè)試工具. 在對(duì)non-RAID,RAID0,RAID1的讀寫(xiě)性能測(cè)試中,條帶化對(duì)象存儲(chǔ)服務(wù)器的數(shù)量為2個(gè),條帶的大小為1M.所得的讀寫(xiě)性能如圖4所示. 圖4 RAID讀性能 從測(cè)試結(jié)果可知,RAID1模式的讀性能要好于non-RAID,但要低于理論的2倍值.而RAID1的讀性能也低于RAID0的讀性能.與non-RAID相比較,RAID0由于實(shí)現(xiàn)了帶區(qū)組,數(shù)據(jù)并不是保存在一個(gè)OST,而是分成數(shù)據(jù)塊保存在不同的OST,所以數(shù)據(jù)的吞吐量大大提高,從而提高了讀性能.同時(shí),RAID0也提高了數(shù)據(jù)傳輸速率,比如所需讀取的文件分布在2個(gè)OST,這2個(gè)OST可以同時(shí)讀取.那么原來(lái)讀取同樣文件的時(shí)間被縮短為1/2,所以RAID0的讀性能是3種模式里最好的.RAID1的性能沒(méi)有RAID0那樣好,但其數(shù)據(jù)讀取較單一OST來(lái)得快,因?yàn)閿?shù)據(jù)會(huì)從2塊OST中較快的一塊中讀出. 圖5 RAID寫(xiě)性能 從圖5的塊寫(xiě)性能比較中,可以看出RAID0的寫(xiě)性能是最好的,RAID1的寫(xiě)性能雖然最差,但是由于讀寫(xiě)操作是并行的,因而與non-RAID也相差不大.對(duì)于使用這種RAID1結(jié)構(gòu)的設(shè)備來(lái)說(shuō),RAID1必須能夠同時(shí)對(duì)2個(gè)鏡像客戶(hù)端進(jìn)行寫(xiě)操作.RAID1的寫(xiě)入速度通常較慢,因?yàn)閿?shù)據(jù)要分別寫(xiě)入2個(gè)客戶(hù)端中并做比較.和RAID0的讀性能分析類(lèi)似,RAID0的寫(xiě)性能最好的原因也是由于文件的不同數(shù)據(jù)塊能夠在多個(gè)OST并行同時(shí)寫(xiě)入. 從以上測(cè)試結(jié)果也能看出,文中實(shí)現(xiàn)了靈活的機(jī)制,使得用戶(hù)能夠選擇靈活的存儲(chǔ)策略,從而令系統(tǒng)更加方便易用,同時(shí),保證了文件系統(tǒng)高效的讀寫(xiě)帶寬. 基于對(duì)象存儲(chǔ)文件系統(tǒng)Lustre給出了一種文件分片機(jī)制.該機(jī)制不僅能夠有效保證系統(tǒng)的文件讀寫(xiě)帶寬,而且還能通過(guò)多種不同存儲(chǔ)策略的選擇,適應(yīng)于不同的應(yīng)用.相比于傳統(tǒng)的對(duì)象文件存儲(chǔ)系統(tǒng)的文件存儲(chǔ)機(jī)制,不僅提高了系統(tǒng)的性能,同時(shí)也提高了系統(tǒng)的靈活性.測(cè)試結(jié)果表明,所設(shè)計(jì)的分片機(jī)制能夠在增強(qiáng)系統(tǒng)靈活性的同時(shí)有效地保持系統(tǒng)的高效讀寫(xiě)性能. 參考文獻(xiàn): [1] 何興高,張鳳荔,黃遠(yuǎn)軍,等.分布式個(gè)人文件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子科技大學(xué)學(xué)報(bào),2005,34(4):521-524. [2] 王一夫,陳松喬,范國(guó)闖.基于網(wǎng)格計(jì)算中的安全問(wèn)題研究[J].湖南師范大學(xué)自然科學(xué)學(xué)報(bào),2005,3,28(1):24-27. [3] DANIEL DUFFY, NICKO ACKS, VAUGHN NOGA,etal. Beyond the storage area networking: data intensive computing in a distributed environment. The 22nd IEEE/13th NASA Goddard Conference on Mass Storage System Technologies MSST2005[C]. American: IEEE Computer Society. 2005,232-236. [4] MESNIER M, GANGER G R, RIEDEL E. Object-based storage: pushing more functionality into storage[J]. Potentials IEEE, 2005,24(2): 31-34. [5] MESNIER M, GANGER G R, RIEDEL E. Object-based storage[J]. Communications Magazine, IEEE, 2003,41(8): 84-90. [6] GILBSON G A, METER R V. Network attached storage architecture[J]. Communications of the ACM,2000,43(11): 37-45.2 測(cè)試及分析
3 結(jié)語(yǔ)
湖南師范大學(xué)自然科學(xué)學(xué)報(bào)2010年4期