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