李淼淼,梅向東
(1.江蘇科技大學 江蘇 鎮江 212003;2.贊奇科技發展有限公司 江蘇 常州 213022)
IDC(互聯網數據中心)的研究報告稱,未來十年全球大數據將增長50倍,計算無處不在,尤其是由移動設備、智能終端所引領的后PC時代的到來使非結構化數據與半結構化數據達到PB級增長,數據的龐大和數據類型的復雜度使傳統數據存儲系統的容量、成本、吞吐量、響應時間、靈活性、容錯性能等已無法滿足現有數據存儲的需求。基于云計算的分布式云存儲系統[1]是集群技術、并行計算技術、分布式文件系統等多種技術融合的產物,將各類存儲設備利用網絡和分布式軟件進行集成,形成統一接口對用戶提供數據存儲服務。與傳統的存儲系統相比,具有高性能、高可靠性、高擴展性、透明性、自治性等。
分布式云存儲的核心是分布式文件系統,以其為基礎對用戶形成統一存儲資源池。分布式文件系統[2]是指文件系統管理的物理存儲資源不直接連接在本地節點上,而是通過計算機網絡與各個節點相連,并對外提供統一的訪問接口。基于元數據中心的分布式文件系統會周期性備份或利用專門的存儲設備存放元數據操作信息,當master服務器出現故障時,備用存儲節點會更新最新操作信息到元數據,使系統仍可以正常工作。但主備節點的切換速度受存儲容量和操作頻率的影響,當存儲容量和操作次數逐漸增加的時候,對數據操作會有很大影響。無元數據系統中的節點被稱為對等節點,數據的操作信息(大小、存放地址、備份信息等)和實際數據一起存放在每個對等節點中,任一節點出現故障時系統可自動恢復,整個系統服務不會受到任何影響。但是因為沒有中心節點統一存放、更新元數據信息,使數據的一致性得不到保障。
MooseFS是一個具有高容錯的開源分布式文件系統[3],系統將數據存儲在物理分布的服務器上,對外形成統一的存儲資源池,任何支持FUSE的操作系統都可以部署MooseFS。同時,MooseFS支持類似 Unix文件系統的標準,如:樹形目錄結構、POSIX文件屬性、socket、塊設備、字符設備等特殊文件、軟鏈接和硬鏈接、基于IP地址或者密碼的訪問。
MooseFS采用主從式服務架構,利用中心節點服務器管理系統,整個系統由四部分組成,包括:元數據管理服務器(Master server)、元數據日志服務器(Metalogger server)、數據服務器(Chunk server)和客戶端。體系結構如圖1。

圖1 MooseFS體系結構Fig.1 MooseFSArchitecture
元數據管理服務器(Master server)是整個文件系統的管理節點,存儲每個文件的元數據信息,這些信息包括文件大小、屬性、文件位置和一些非規則文件的信息。作為整個系統的核心,它需要部署在具有高可靠性和較高 I/O性能的機器上面,同時配有冗余電源的服務器、糾錯碼內存和磁盤陣列RAID1/5/10等,操作系統必須兼容 POSIX。
元數據日志服務器即元數據備份服務器(Metalogger server),用來存儲元數據的操作日志和周期性從主Master下載元數據文件,如:metadata、changelog、session 等。 主要設計目的是當主 Master停止正常管理工作后可以接替其管理工作。MFS提供了 mfsmetarestore工具從Metalogger恢復Master的元數據,用以下兩種方式即可實現:
1) $mfsmetarestore-a(自動恢復);
2)$mfsmetarestore-m*.bck-o metadata.mfs changelog.*.mfs(指定恢復)
數據實際存儲于數據服務器(Chunk server)中,并由其提供服務器間的文件同步功能。對于一個較大的文件,MooseFS會將其分割成一個inode和多個數據塊chunk的組合。Master會在每個Chunk被創建時分配給這個Chunk一個獨立不更改的64為編號,并將其以Linux文件的形式保存至本地數據服務器中,并且可有多個備份。
用戶利用客戶端(Client)進行數據訪問,通過Client的mfsmount命令啟動掛載,使Client與master通信從而完成元數據信息更新,同時與數據服務器通信以訪問實際的文件數據。
2.2.1 MooseFS的數據讀取操作
如圖 2所示,MooseFS的讀數據過程可分為以下4個步驟:
1)當客戶端讀取數據時,先向管理服務器發起數據查詢請求;
2)管理服務器查詢元數據信息,獲取所需數據所在的數據服務器位置信息(ip、port、chunkid),然后將查詢的數據信息發送給客戶端;
3)客戶端向查詢到的數據服務器發起數據讀取請求;4)數據服務器將請求的數據發送給客戶端。

圖2 MooseFS數據讀取操作Fig.2 Reading data operation of MooseFS
2.2.2 MooseFS的數據寫入過程
如圖3所示,MFS的寫數據過程主要分為以下8個步驟:
1)當客戶端要寫入數據時,首先向管理服務器提供文件元數據信息,請求存儲地址(元數據信息如:文件名、大小、份數等);
2)根據客戶端提供的元數據信息,管理服務器在負載較輕的存儲服務器中創建新的數據存儲塊,并將創建成功的消息返回。
3)管理服務器將新創建的存儲地址返回給客戶端(chunkIP、port、chunkid);
4)客戶端向相應的存儲服務器中寫數據;
5)在寫數據的同時,Masterserver會通知相應的存儲服務器會按照配置文件中設定的冗余度依次進行冗余數據的同步操作;
6)各冗余存儲服務器依次返回同步完成的消息;
7)存儲服務器給客戶端返回寫入成功的消息;
8)客戶端將寫入完成信息發送到管理服務器,管理服務器根據信息更新文件的長度和最后修改時間,及數據操作日志,同時完成整個寫數據操作。

圖3 MooseFS數據寫入操作Fig.3 Writing data operation of MooseFS
根據上述對MFS體系結構的分析,MooseFS具有以下主要特性[4]:
1)高可靠性:在不影響讀寫性能的情況下,可對文件系統設置比RAID1+0更高級別任意的冗余度,冗余數據被備份在不同的數據節點中,從而可以很好的避免數據丟失;
2)可擴展性:系統體系架構伸縮性強,可根據存儲量需求動態添加或刪除節點,且不影響系統對外正常提供服務。
3)高可控性:提供類似于 Java的垃圾回收機制,可自由設置文件刪除時間間隔;
4)可追溯性:支持快照(snapshot)功能,能夠根據文件的不同操作(寫入/訪問)生成相應的文件快照。
5)高性能:提供高效的隨機讀寫能力,尤其是海量小文件的隨機讀寫效率。
GlusterFS是一個開源的線性橫向擴展文件系統,文件存儲容量可達到PB級,支持上千客戶端的數據請求。利用TCP/IP、InfiniBand RDMA或SDP的方式將存儲塊互聯成一個并行的文件系統,用戶可以在全局統一的命名空間中使用NFS/CIFS等標準協議來訪問應用數據,存儲塊完全可以是現有的普通廉價硬件,如X86主機,使得用戶可擺脫原有的獨立、高成本的封閉存儲系統[5]。
GlusterFS系統由3部分組成:存儲服務器(Brick Server)、客戶端(Client)和存儲網關。如圖 4所示。為了加強系統的存儲性能,提高可靠性和可用性,系統拋棄了類似MFS的master server中心節點,利用彈性算法進行數據定位,避免了中心節點導致的性能瓶頸和單點失效。此外,系統具有很好的兼容性,除原生協議外,用戶完全可以通過POSIX接口及NFS、CIFS等標準協議向GlusterFS請求數據存儲服務。
存儲服務器提供數據存儲功能,數據的具體實際存儲位置通過彈性哈希算法計算所得,文件格式采用EXT3、EXT4、XFS、ZFS等原始格式。GlusterFS將存儲服務器中的Brick組成卷Volume,mount到客戶端。目前主要有分布卷、復制卷、條帶卷、分布式條帶卷、分布式復制卷、條帶復制卷,每種模式實現類似于RAID0、RAID1、RAID10等功能。
客戶端提供用戶的數據訪問服務,將用戶的數據請求發給存儲服務器并讀取所需數據。由于windows系統中不兼容GlusterFS的原生客戶端,系統為windows用戶了可通過標準協議訪問存儲系統的接口。在有中心節點的存儲系統中,管理服務器根據元數據信息實現文件定位、負載均衡、數據緩存等功能,但在GlusterFS中因為去除了中心節點,這些功能將在客戶端中實現,同時利用FUSE模塊實現POSIX兼容。
存儲網關提供的功能包括兩個部分,首先是Volume管理,在目前的系統版本中已經可進行不停服的卷自動化管理,包括卷的創建、刪除、容量平滑、向客戶端提交卷操作信息等。
其次是實現非原生客戶端基于標準協議NFS/CIFS的代理訪問功能,
3.2.1 模塊化堆棧式架構

圖4 GlusterFS體系結構Fig.4 Architecture of GlusterFS
GlusterFS采用模塊化、堆棧式的架構,整個系統建設與現有的硬件基礎無關,完全由軟件實現。模塊在系統中稱為轉換器(Translator),它是GlusterFS的核心理念,每個轉換器都是動態庫,將用戶請求轉換為存儲請求,根據不用請求加載實現特定功能的轉換器樹。
轉換器主要包括以下幾類:cluster、performance、encryption、features、storage、mount等。每個轉換器實現不同的功能,通過堆棧式的組合實現不同業務需求的系統。Cluster即集群,有三種分布方式:分布卷(distributed)、復制卷(replicated)、條帶卷(striped)。分布式卷主要考慮的是存儲擴展需求,數據的冗余則有系統的其他組件考慮。復制卷將文件創建跨多個brick的副本,實現類似RAID1的功能。條帶式卷是將文件分割成數據塊,以Round Robin的方式存儲在bricks中,主要應用在高并發、訪問文件很大的環境中。3種基本的方式可組合成更復雜的方式,如:RAID10。
Performance模塊又被稱為性能加強模塊,包括io-cache(I/O 緩存)、io-threads (I/O 線程)、read-ahead (預讀)、writebehind(后寫)等,主要應用于系統性能的提升。
Encryption是數據加密模塊,在官方版本中并沒有數據加密模塊,但是隨著公有云存儲的發展,數據加密成為必備模塊;Features主要實現訪問控制功能;storage模塊主要用來實現POSIX接口。
由上述分析可見,在文件系統中,服務器端主要實現數據的存儲功能,數據的定位,性能的優化、數據讀取等大部門功能都由客戶端來實現。利用轉換器的堆棧組合實現系統功能,這種結構使系統架設更加簡單,也有利于后期的升級維護。
3.2.2 彈性哈希算法
傳統分布式存儲系統都使用集中式或者分布式元數據服務來維護元數據,然而集中式元數據服務會導致單點故障以及性能瓶頸問題,分布式元數據服務器存在元數據同步一致性和性能負載等問題[7]。GlusterFS作為一種全新的架構,其結構中拋棄了元數據服務器,將數據位置信息和實際數據一起存儲,利用彈性算法定位文件,大大提高了系統性能和穩定性。其數據訪問流程如下:
1)使用Davies-Meyer算法計算 32位 hash值,輸入參數為文件名;
2)根據hash值在選擇子卷,進行文件定位;
3)根據定位信息數據訪問。
Davies-Meyer算法是一類基于對稱分組算法的單向散列算法,具有良好的hash分布性,且計算效率高。在GlusterFS存儲系統中,每個文件都對應一個32位哈希值,其代表文件的具體存儲位置等信息,而哈希值和系統中的存儲服務器的個數有關。假設系統中有N個服務器,則32位整數空間則會被分成N個連續的子空間,這樣每個空間就對應一個服務器。當計算得到一個哈希值時也就找到了所需的服務器。
根據業務的變化,在實際的存儲系統中,必然存在著存儲節點的添加、刪除、文件名更改等情況。當系統容量擴容需要新增存儲節點時,GlusterFS文件系統采用彈性哈希算法以更改目錄的原則重新分配數據。文件系統利用父目錄下創建子目錄記載子卷中文件和相應存儲服務器間的映射信息,新增節點時不更改現有目錄,而是在父目錄中新建目錄記錄新的文件和存儲服務器的映射關系,因此對原有的數據存儲不會有任何影響。而且新建目錄時,系統會優先將存儲文件位置映射到負載較輕的節點上。同時,GlusterFS也支持人工干預,根據現有節點的負載情況,手動分配文件。
當系統要刪除一個節點時,可用新的節點來替代現有節點,并將原節點的數據復制到新的節點中;或者是直接將刪除節點中的數據重新備份到系統的其他節點上。文件更名時,系統會在目標存儲節點和實際的存儲節點鍵創建一個鏈接,當要對更名文件進行操作時,系統會根據鏈接指向實際存儲節點。
由上可知,GlusterFS所采用的彈性哈希算法,使系統更具彈性線性擴展能力。
由以上GlusterFS的系統架構和技術分析可知,系統具有以下特點:
1)易部署:系統運行在業界標準的服務器系統上,沒有特殊的硬件要求,可在業務持續進行中進行擴展。
2)易擴展:沒有集中的元數據節點,消除了單點故障和擴展帶來的元數據節點瓶頸,實現線性擴展和性能提升。
3)高可用:在GlusterFS系統中,數據文件被多次復制,可以極大的提高數據高可用性,任意一節點或硬盤的故障不會影響業務的持續運行。
4)兼容性:靈活適用于各種客戶端,包括各個版本的Linux和Windows操作系統。
為了對比兩種存儲系統的性能,我們布置了相同的測試環境。操作系統采用CentOS 6.2,內核版本為2.6.32。系統布置四臺服務器節點,每個節點采用Intel(R)Xeon(R)E3-1230 V2@3.30GHz 8核處理器,配置16GB的內存及6個1TB硬盤。主機配置如表1:

表1 Gluster FS和MooseFS的主機配置Tab.1 Host configuration of Gluster FSand MooseFS
利用iometer工具測試訪問節點的I/O性能,分別測試100%讀0%寫、0%讀100%寫,采用100%順序操作,測試的文件大小分別為4KB、1MB和64MB。測試結果如表2。
由上表測試結果可知,MFS適用于多并發數的讀取需求環境,其讀取速度高于GlusterFS的讀取速率,適合于小文件的讀取;GFS適用于多并發數的寫入需求環境,其寫入速率明顯高于MooseFS的寫入速率,適合于大文件的寫入。
本文從是否存在元數據中心節點出發,以MooseFS和GlusterFS為代表,分析了兩種存儲系統的架構、工作流程和系統特點。這兩種存儲系統都是開源的分布式存儲系統,都支持FUSE機制和POSIX接口,可廣泛運用于各類操作系統。MFS利用元數據節點服務器管理系統,架構簡單具有高可用性,尤其適用于對小文件讀取操作較多和容錯率要求較高的場景。但是元數據節點服務器存在性能瓶頸,且需要配置在較高性能的服務器上。GlusterFS無元數據節點服務器,不存在性能瓶頸和單點故障,理論上可實現存儲容量的無限擴容和系統,且系統具有自動恢復功能。但是因為沒有類似元數據的管理服務器,數據一致性受到限制,其更適合應用于對大文件操作較多的場所。每個存儲系統都有自己的特點和優勢,根據系統對讀寫、容錯、擴容等不同要求選擇適合的存儲系統,可以達到更高的數據存儲效率。

表2 測試結果Tab.2 Results
[1]李東輝,沈麗菁.分布式云存儲高可用框架研究[J].計算機與數字工程,2014(1):76-80.LI Dong-hui,SHEN Li-jing.A availableframework of distributed cloud storage[J].Computer and Digital Engineering,2014(1):76-80.
[2]劉貝,湯斌.云存儲原理及發展趨勢[J].科技信息,2011(5):50-51.LIU Bei,TANG Bin.Theprinciple and development trend of cloud storage[J].Science and Technology Information,2011(5):50-51.
[3]戴寶龍.基于MooseFS分布式文件系統的研究和應用[D].北京:北京郵電大學,2011.
[4]GHEMAWAT S,GOBIOFF H,LEUNGST.The Google file system[C]//Proceedings of the 19th ACM Symposium on Operating Systems Principles.Lake George, New York:2003:29-43.
[5]于忠臣.物聯網異構數據存儲算法研究[D].沈陽:遼寧大學,2012.
[6]Gluster Inc.An Introduction to Gluster Architecture[S].2011.
[7]楊勇.基于GlusterFS的分布式冗余存儲[J].西安文理學報:自然科學版,2010,13(4):67-70.YANG Yong.Distributed redundant storage based on GlusterFS[J].Journal of Xi'an University of Arts&Science:Natural Science Edition,2010,13(4):67-70.