GlusterFS集群文件系統(tǒng)研究 1. GlusterFS概述GlusterFS是Scale-Out存儲解決方案Gluster的核心,它是一個開源的分布式文件系統(tǒng),具有強大的橫向擴展能力,通過擴展能夠支持數(shù)PB存儲容量和處理數(shù)千客戶端。GlusterFS借助TCP/IP或InfiniBand RDMA網(wǎng)絡(luò)將物理分布的存儲資源聚集在一起,使用單一全局命名空間來管理數(shù)據(jù)。GlusterFS基于可堆疊的用戶空間設(shè)計,可為各種不同的數(shù)據(jù)負載提供優(yōu)異的性能。 圖1 GlusterFS統(tǒng)一的掛載點 GlusterFS支持運行在任何標準IP網(wǎng)絡(luò)上標準應(yīng)用程序的標準客戶端,如圖2所示,用戶可以在全局統(tǒng)一的命名空間中使用NFS/CIFS等標準協(xié)議來訪問應(yīng)用數(shù)據(jù)。GlusterFS使得用戶可擺脫原有的獨立、高成本的封閉存儲系統(tǒng),能夠利用普通廉價的存儲設(shè)備來部署可集中管理、橫向擴展、虛擬化的存儲池,存儲容量可擴展至TB/PB級。GlusterFS主要特征如下: l 擴展性和高性能 GlusterFS利用雙重特性來提供幾TB至數(shù)PB的高擴展存儲解決方案。Scale-Out架構(gòu)允許通過簡單地增加資源來提高存儲容量和性能,磁盤、計算和I/O資源都可以獨立增加,支持10GbE和InfiniBand等高速網(wǎng)絡(luò)互聯(lián)。Gluster彈性哈希(Elastic Hash)解除了GlusterFS對元數(shù)據(jù)服務(wù)器的需求,消除了單點故障和性能瓶頸,真正實現(xiàn)了并行化數(shù)據(jù)訪問。 l 高可用性 GlusterFS可以對文件進行自動復(fù)制,如鏡像或多次復(fù)制,從而確保數(shù)據(jù)總是可以訪問,甚至是在硬件故障的情況下也能正常訪問。自我修復(fù)功能能夠把數(shù)據(jù)恢復(fù)到正確的狀態(tài),而且修復(fù)是以增量的方式在后臺執(zhí)行,幾乎不會產(chǎn)生性能負載。GlusterFS沒有設(shè)計自己的私有數(shù)據(jù)文件格式,而是采用操作系統(tǒng)中主流標準的磁盤文件系統(tǒng)(如EXT3、ZFS)來存儲文件,因此數(shù)據(jù)可以使用各種標準工具進行復(fù)制和訪問。 l 全局統(tǒng)一命名空間 全局統(tǒng)一命名空間將磁盤和內(nèi)存資源聚集成一個單一的虛擬存儲池,對上層用戶和應(yīng)用屏蔽了底層的物理硬件。存儲資源可以根據(jù)需要在虛擬存儲池中進行彈性擴展,比如擴容或收縮。當存儲虛擬機映像時,存儲的虛擬映像文件沒有數(shù)量限制,成千虛擬機均通過單一掛載點進行數(shù)據(jù)共享。虛擬機I/O可在命名空間內(nèi)的所有服務(wù)器上自動進行負載均衡,消除了SAN環(huán)境中經(jīng)常發(fā)生的訪問熱點和性能瓶頸問題。 l 彈性哈希算法 GlusterFS采用彈性哈希算法在存儲池中定位數(shù)據(jù),而不是采用集中式或分布式元數(shù)據(jù)服務(wù)器索引。在其他的Scale-Out存儲系統(tǒng)中,元數(shù)據(jù)服務(wù)器通常會導(dǎo)致I/O性能瓶頸和單點故障問題。GlusterFS中,所有在Scale-Out存儲配置中的存儲系統(tǒng)都可以智能地定位任意數(shù)據(jù)分片,不需要查看索引或者向其他服務(wù)器查詢。這種設(shè)計機制完全并行化了數(shù)據(jù)訪問,實現(xiàn)了真正的線性性能擴展。 l 彈性卷管理 數(shù)據(jù)儲存在邏輯卷中,邏輯卷可以從虛擬化的物理存儲池進行獨立邏輯劃分而得到。存儲服務(wù)器可以在線進行增加和移除,不會導(dǎo)致應(yīng)用中斷。邏輯卷可以在所有配置服務(wù)器中增長和縮減,可以在不同服務(wù)器遷移進行容量均衡,或者增加和移除系統(tǒng),這些操作都可在線進行。文件系統(tǒng)配置更改也可以實時在線進行并應(yīng)用,從而可以適應(yīng)工作負載條件變化或在線性能調(diào)優(yōu)。 l 基于標準協(xié)議 Gluster存儲服務(wù)支持NFS, CIFS, HTTP, FTP以及Gluster原生協(xié)議,完全與POSIX標準兼容。現(xiàn)有應(yīng)用程序不需要作任何修改或使用專用API,就可以對Gluster中的數(shù)據(jù)進行訪問。這在公有云環(huán)境中部署Gluster時非常有用,Gluster對云服務(wù)提供商專用API進行抽象,然后提供標準POSIX接口。 2. 設(shè)計目標GlusterFS的設(shè)計思想顯著區(qū)別有現(xiàn)有并行/集群/分布式文件系統(tǒng)。如果GlusterFS在設(shè)計上沒有本質(zhì)性的突破,難以在與Lustre、PVFS2、Ceph等的競爭中占據(jù)優(yōu)勢,更別提與GPFS、StorNext、ISILON、IBRIX等具有多年技術(shù)沉淀和市場積累的商用文件系統(tǒng)競爭。其核心設(shè)計目標包括如下三個: l 彈性存儲系統(tǒng)(Elasticity) 存儲系統(tǒng)具有彈性能力,意味著企業(yè)可以根據(jù)業(yè)務(wù)需要靈活地增加或縮減數(shù)據(jù)存儲以及增刪存儲池中的資源,而不需要中斷系統(tǒng)運行。GlusterFS設(shè)計目標之一就是彈性,允許動態(tài)增刪數(shù)據(jù)卷、擴展或縮減數(shù)據(jù)卷、增刪存儲服務(wù)器等,不影響系統(tǒng)正常運行和業(yè)務(wù)服務(wù)。GlusterFS早期版本中彈性不足,部分管理工作需要中斷服務(wù),目前最新的3.1.X版本已經(jīng)彈性十足,能夠滿足對存儲系統(tǒng)彈性要求高的應(yīng)用需求,尤其是對云存儲服務(wù)系統(tǒng)而言意義更大。GlusterFS主要通過存儲虛擬化技術(shù)和邏輯卷管理來實現(xiàn)這一設(shè)計目標。 l 線性橫向擴展(Linear Scale-Out) 線性擴展對于存儲系統(tǒng)而言是非常難以實現(xiàn)的,通常系統(tǒng)規(guī)模擴展與性能提升之間是LOG對數(shù)曲線關(guān)系,因為同時會產(chǎn)生相應(yīng)負載而消耗了部分性能的提升。現(xiàn)在的很多并行/集群/分布式文件系統(tǒng)都具很高的擴展能力,Luster存儲節(jié)點可以達到1000個以上,客戶端數(shù)量能夠達到25000以上,這個擴展能力是非常強大的,但是Lustre也不是線性擴展的。 縱向擴展(Scale-Up)旨在提高單個節(jié)點的存儲容量或性能,往往存在理論上或物理上的各種限制,而無法滿足存儲需求。橫向擴展(Scale-Out)通過增加存儲節(jié)點來提升整個系統(tǒng)的容量或性能,這一擴展機制是目前的存儲技術(shù)熱點,能有效應(yīng)對容量、性能等存儲需求。目前的并行/集群/分布式文件系統(tǒng)大多都具備橫向擴展能力。 GlusterFS是線性橫向擴展架構(gòu),它通過橫向擴展存儲節(jié)點即可以獲得線性的存儲容量和性能的提升。因此,結(jié)合縱向擴展GlusterFS可以獲得多維擴展能力,增加每個節(jié)點的磁盤可增加存儲容量,增加存儲節(jié)點可以提高性能,從而將更多磁盤、內(nèi)存、I/O資源聚集成更大容量、更高性能的虛擬存儲池。GlusterFS利用三種基本技術(shù)來獲得線性橫向擴展能力: 1) 消除元數(shù)據(jù)服務(wù) 2) 高效數(shù)據(jù)分布,獲得擴展性和可靠性 3) 通過完全分布式架構(gòu)的并行化獲得性能的最大化 l 高可靠性(Reliability) 與GFS(Google File System)類似,GlusterFS可以構(gòu)建在普通的服務(wù)器和存儲設(shè)備之上,因此可靠性顯得尤為關(guān)鍵。GlusterFS從設(shè)計之初就將可靠性納入核心設(shè)計,采用了多種技術(shù)來實現(xiàn)這一設(shè)計目標。首先,它假設(shè)故障是正常事件,包括硬件、磁盤、網(wǎng)絡(luò)故障以及管理員誤操作造成的數(shù)據(jù)損壞等。GlusterFS設(shè)計支持自動復(fù)制和自動修復(fù)功能來保證數(shù)據(jù)可靠性,不需要管理員的干預(yù)。其次,GlusterFS利用了底層EXT3/ZFS等磁盤文件系統(tǒng)的日志功能來提供一定的數(shù)據(jù)可靠性,而沒有自己重新發(fā)明輪子。再次,GlusterFS是無元數(shù)據(jù)服務(wù)器設(shè)計,不需要元數(shù)據(jù)的同步或者一致性維護,很大程度上降低了系統(tǒng)復(fù)雜性,不僅提高了性能,還大大提高了系統(tǒng)可靠性。 3. 技術(shù)特點GlusterFS在技術(shù)實現(xiàn)上與傳統(tǒng)存儲系統(tǒng)或現(xiàn)有其他分布式文件系統(tǒng)有顯著不同之處,主要體現(xiàn)在如下幾個方面。 l 完全軟件實現(xiàn)(Software Only) GlusterFS認為存儲是軟件問題,不能夠把用戶局限于使用特定的供應(yīng)商或硬件配置來解決。GlusterFS采用開放式設(shè)計,廣泛支持工業(yè)標準的存儲、網(wǎng)絡(luò)和計算機設(shè)備,而非與定制化的專用硬件設(shè)備捆綁。對于商業(yè)客戶,GlusterFS可以以虛擬裝置的形式交付,也可以與虛擬機容器打包,或者是公有云中部署的映像。開源社區(qū)中,GlusterFS被大量部署在基于廉價閑置硬件的各種操作系統(tǒng)上,構(gòu)成集中統(tǒng)一的虛擬存儲資源池。簡而言之,GlusterFS是開放的全軟件實現(xiàn),完全獨立于硬件和操作系統(tǒng)。 l 完整的存儲操作系統(tǒng)棧(Complete Storage Operating System Stack) GlusterFS不僅提供了一個分布式文件系統(tǒng),而且還提供了許多其他重要的分布式功能,比如分布式內(nèi)存管理、I/O調(diào)度、軟RAID和自我修復(fù)等。GlusterFS汲取了微內(nèi)核架構(gòu)的經(jīng)驗教訓(xùn),借鑒了GNU/Hurd操作系統(tǒng)的設(shè)計思想,在用戶空間實現(xiàn)了完整的存儲操作系統(tǒng)棧。 l 用戶空間實現(xiàn)(User Space) 與傳統(tǒng)的文件系統(tǒng)不同,GlusterFS在用戶空間實現(xiàn),這使得其安裝和升級特別簡便。另外,這也極大降低了普通用戶基于源碼修改GlusterFS的門檻,僅僅需要通用的C程序設(shè)計技能,而不需要特別的內(nèi)核編程經(jīng)驗。 l 模塊化堆棧式架構(gòu)(Modular Stackable Architecture) GlusterFS采用模塊化、堆棧式的架構(gòu),可通過靈活的配置支持高度定制化的應(yīng)用環(huán)境,比如大文件存儲、海量小文件存儲、云存儲、多傳輸協(xié)議應(yīng)用等。每個功能以模塊形式實現(xiàn),然后以積木方式進行簡單的組合,即可實現(xiàn)復(fù)雜的功能。比如,Replicate模塊可實現(xiàn)RAID1,Stripe模塊可實現(xiàn)RAID0,通過兩者的組合可實現(xiàn)RAID10和RAID01,同時獲得高性能和高可靠性。 l 原始數(shù)據(jù)格式存儲(Data Stored in Native Formats) GlusterFS以原始數(shù)據(jù)格式(如EXT3、EXT4、XFS、ZFS)儲存數(shù)據(jù),并實現(xiàn)多種數(shù)據(jù)自動修復(fù)機制。因此,系統(tǒng)極具彈性,即使離線情形下文件也可以通過其他標準工具進行訪問。如果用戶需要從GlusterFS中遷移數(shù)據(jù),不需要作任何修改仍然可以完全使用這些數(shù)據(jù)。 l 無元數(shù)據(jù)服務(wù)設(shè)計(No Metadata with the Elastic Hash Algorithm) 對Scale-Out存儲系統(tǒng)而言,最大的挑戰(zhàn)之一就是記錄數(shù)據(jù)邏輯與物理位置的映像關(guān)系,即數(shù)據(jù)元數(shù)據(jù),可能還包括諸如屬性和訪問權(quán)限等信息。傳統(tǒng)分布式存儲系統(tǒng)使用集中式或分布式元數(shù)據(jù)服務(wù)來維護元數(shù)據(jù),集中式元數(shù)據(jù)服務(wù)會導(dǎo)致單點故障和性能瓶頸問題,而分布式元數(shù)據(jù)服務(wù)存在性能負載和元數(shù)據(jù)同步一致性問題。特別是對于海量小文件的應(yīng)用,元數(shù)據(jù)問題是個非常大的挑戰(zhàn)。 GlusterFS獨特地采用無元數(shù)據(jù)服務(wù)的設(shè)計,取而代之使用算法來定位文件,元數(shù)據(jù)和數(shù)據(jù)沒有分離而是一起存儲。集群中的所有存儲系統(tǒng)服務(wù)器都可以智能地對文件數(shù)據(jù)分片進行定位,僅僅根據(jù)文件名和路徑并運用算法即可,而不需要查詢索引或者其他服務(wù)器。這使得數(shù)據(jù)訪問完全并行化,從而實現(xiàn)真正的線性性能擴展。無元數(shù)據(jù)服務(wù)器極大提高了GlusterFS的性能、可靠性和穩(wěn)定性。 4. 總體架構(gòu)與設(shè)計
圖2 GlusterFS架構(gòu)和組成 GlusterFS總體架構(gòu)與組成部分如圖2所示,它主要由存儲服務(wù)器(Brick Server)、客戶端以及NFS/Samba存儲網(wǎng)關(guān)組成。不難發(fā)現(xiàn),GlusterFS架構(gòu)中沒有元數(shù)據(jù)服務(wù)器組件,這是其最大的設(shè)計這點,對于提升整個系統(tǒng)的性能、可靠性和穩(wěn)定性都有著決定性的意義。GlusterFS支持TCP/IP和InfiniBand RDMA高速網(wǎng)絡(luò)互聯(lián),客戶端可通過原生Glusterfs協(xié)議訪問數(shù)據(jù),其他沒有運行GlusterFS客戶端的終端可通過NFS/CIFS標準協(xié)議通過存儲網(wǎng)關(guān)訪問數(shù)據(jù)。 存儲服務(wù)器主要提供基本的數(shù)據(jù)存儲功能,最終的文件數(shù)據(jù)通過統(tǒng)一的調(diào)度策略分布在不同的存儲服務(wù)器上。它們上面運行著Glusterfsd進行,負責處理來自其他組件的數(shù)據(jù)服務(wù)請求。如前所述,數(shù)據(jù)以原始格式直接存儲在服務(wù)器的本地文件系統(tǒng)上,如EXT3、EXT4、XFS、ZFS等,運行服務(wù)時指定數(shù)據(jù)存儲路徑。多個存儲服務(wù)器可以通過客戶端或存儲網(wǎng)關(guān)上的卷管理器組成集群,如Stripe(RAID0)、Replicate(RAID1)和DHT(分布式Hash)存儲集群,也可利用嵌套組合構(gòu)成更加復(fù)雜的集群,如RAID10。 由于沒有了元數(shù)據(jù)服務(wù)器,客戶端承擔了更多的功能,包括數(shù)據(jù)卷管理、I/O調(diào)度、文件定位、數(shù)據(jù)緩存等功能??蛻舳松线\行Glusterfs進程,它實際是Glusterfsd的符號鏈接,利用FUSE(File system in User Space)模塊將GlusterFS掛載到本地文件系統(tǒng)之上,實現(xiàn)POSIX兼容的方式來訪問系統(tǒng)數(shù)據(jù)。在最新的3.1.X版本中,客戶端不再需要獨立維護卷配置信息,改成自動從運行在網(wǎng)關(guān)上的glusterd彈性卷管理服務(wù)進行獲取和更新,極大簡化了卷管理。GlusterFS客戶端負載相對傳統(tǒng)分布式文件系統(tǒng)要高,包括CPU占用率和內(nèi)存占用。 GlusterFS存儲網(wǎng)關(guān)提供彈性卷管理和NFS/CIFS訪問代理功能,其上運行Glusterd和Glusterfs進程,兩者都是Glusterfsd符號鏈接。卷管理器負責邏輯卷的創(chuàng)建、刪除、容量擴展與縮減、容量平滑等功能,并負責向客戶端提供邏輯卷信息及主動更新通知功能等。GlusterFS 3.1.X實現(xiàn)了邏輯卷的彈性和自動化管理,不需要中斷數(shù)據(jù)服務(wù)或上層應(yīng)用業(yè)務(wù)。對于Windows客戶端或沒有安裝GlusterFS的客戶端,需要通過NFS/CIFS代理網(wǎng)關(guān)來訪問,這時網(wǎng)關(guān)被配置成NFS或Samba服務(wù)器。相對原生客戶端,網(wǎng)關(guān)在性能上要受到NFS/Samba的制約。
圖3 GlusterFS模塊化堆棧式設(shè)計 GlusterFS是模塊化堆棧式的架構(gòu)設(shè)計,如圖3所示。模塊稱為Translator,是GlusterFS提供的一種強大機制,借助這種良好定義的接口可以高效簡便地擴展文件系統(tǒng)的功能。服務(wù)端與客戶端模塊接口是兼容的,同一個translator可同時在兩邊加載。每個translator都是SO動態(tài)庫,運行時根據(jù)配置動態(tài)加載。每個模塊實現(xiàn)特定基本功能,GlusterFS中所有的功能都是通過translator實現(xiàn),比如Cluster, Storage, Performance, Protocol, Features等,基本簡單的模塊可以通過堆棧式的組合來實現(xiàn)復(fù)雜的功能。這一設(shè)計思想借鑒了GNU/Hurd微內(nèi)核的虛擬文件系統(tǒng)設(shè)計,可以把對外部系統(tǒng)的訪問轉(zhuǎn)換成目標系統(tǒng)的適當調(diào)用。大部分模塊都運行在客戶端,比如合成器、I/O調(diào)度器和性能優(yōu)化等,服務(wù)端相對簡單許多。客戶端和存儲服務(wù)器均有自己的存儲棧,構(gòu)成了一棵Translator功能樹,應(yīng)用了若干模塊。模塊化和堆棧式的架構(gòu)設(shè)計,極大降低了系統(tǒng)設(shè)計復(fù)雜性,簡化了系統(tǒng)的實現(xiàn)、升級以及系統(tǒng)維護。 5. 彈性哈希算法對于分布式系統(tǒng)而言,元數(shù)據(jù)處理是決定系統(tǒng)擴展性、性能以及穩(wěn)定性的關(guān)鍵。GlusterFS另辟蹊徑,徹底摒棄了元數(shù)據(jù)服務(wù),使用彈性哈希算法代替?zhèn)鹘y(tǒng)分布式文件系統(tǒng)中的集中或分布式元數(shù)據(jù)服務(wù)。這根本性解決了元數(shù)據(jù)這一難題,從而獲得了接近線性的高擴展性,同時也提高了系統(tǒng)性能和可靠性。GlusterFS使用算法進行數(shù)據(jù)定位,集群中的任何服務(wù)器和客戶端只需根據(jù)路徑和文件名就可以對數(shù)據(jù)進行定位和讀寫訪問。換句話說,GlusterFS不需要將元數(shù)據(jù)與數(shù)據(jù)進行分離,因為文件定位可獨立并行化進行。GlusterFS中數(shù)據(jù)訪問流程如下: 1、計算hash值,輸入?yún)?shù)為文件路徑和文件名; 2、根據(jù)hash值在集群中選擇子卷(存儲服務(wù)器),進行文件定位; 3、對所選擇的子卷進行數(shù)據(jù)訪問。 GlusterFS目前使用Davies-Meyer算法計算文件名hash值,獲得一個32位整數(shù)。Davies-Meyer算法具有非常好的hash分布性,計算效率很高。假設(shè)邏輯卷中的存儲服務(wù)器有N個,則32位整數(shù)空間被平均劃分為N個連續(xù)子空間,每個空間分別映射到一個存儲服務(wù)器。這樣,計算得到的32位hash值就會被投射到一個存儲服務(wù)器,即我們要選擇的子卷。難道真是如此簡單?現(xiàn)在讓我們來考慮一下存儲節(jié)點加入和刪除、文件改名等情況,GlusterFS如何解決這些問題而具備彈性的呢? 邏輯卷中加入一個新存儲節(jié)點,如果不作其他任何處理,hash值映射空間將會發(fā)生變化,現(xiàn)有的文件目錄可能會被重新定位到其他的存儲服務(wù)器上,從而導(dǎo)致定位失敗。解決問題的方法是對文件目錄進行重新分布,把文件移動到正確的存儲服務(wù)器上去,但這大大加重了系統(tǒng)負載,尤其是對于已經(jīng)存儲大量的數(shù)據(jù)的海量存儲系統(tǒng)來說顯然是不可行的。另一種方法是使用一致性哈希算法,修改新增節(jié)點及相鄰節(jié)點的hash映射空間,僅需要移動相鄰節(jié)點上的部分數(shù)據(jù)至新增節(jié)點,影響相對小了很多。然而,這又帶來另外一個問題,即系統(tǒng)整體負載不均衡。GlusterFS沒有采用上述兩種方法,而是設(shè)計了更為彈性的算法。GlusterFS的哈希分布是以目錄為基本單位的,文件的父目錄利用擴展屬性記錄了子卷映射信息,其下面子文件目錄在父目錄所屬存儲服務(wù)器中進行分布。由于文件目錄事先保存了分布信息,因此新增節(jié)點不會影響現(xiàn)有文件存儲分布,它將從此后的新創(chuàng)建目錄開始參與存儲分布調(diào)度。這種設(shè)計,新增節(jié)點不需要移動任何文件,但是負載均衡沒有平滑處理,老節(jié)點負載較重。GlusterFS在設(shè)計中考慮了這一問題,在新建文件時會優(yōu)先考慮容量負載最輕的節(jié)點,在目標存儲節(jié)點上創(chuàng)建文件鏈接直向真正存儲文件的節(jié)點。另外,GlusterFS彈性卷管理工具可以在后臺以人工方式來執(zhí)行負載平滑,將進行文件移動和重新分布,此后所有存儲服務(wù)器都會均會被調(diào)度。 GlusterFS目前對存儲節(jié)點刪除支持有限,還無法做到完全無人干預(yù)的程度。如果直接刪除節(jié)點,那么所在存儲服務(wù)器上的文件將無法瀏覽和訪問,創(chuàng)建文件目錄也會失敗。當前人工解決方法有兩個,一是將節(jié)點上的數(shù)據(jù)重新復(fù)制到GlusterFS中,二是使用新的節(jié)點來替換刪除節(jié)點并保持原有數(shù)據(jù)。 如果一個文件被改名,顯然hash算法將產(chǎn)生不同的值,非常可能會發(fā)生文件被定位到不同的存儲服務(wù)器上,從而導(dǎo)致文件訪問失敗。采用數(shù)據(jù)移動的方法,對于大文件是很難在實時完成的。為了不影響性能和服務(wù)中斷,GlusterFS采用了文件鏈接來解決文件重命名問題,在目標存儲服務(wù)器上創(chuàng)建一個鏈接指向?qū)嶋H的存儲服務(wù)器,訪問時由系統(tǒng)解析并進行重定向。另外,后臺同時進行文件遷移,成功后文件鏈接將被自動刪除。對于文件移動也作類似處理,好處是前臺操作可實時處理,物理數(shù)據(jù)遷移置于后臺選擇適當時機執(zhí)行。
圖4 GlusterFS彈性卷管理 彈性哈希算法為文件分配邏輯卷,那么GlusterFS如何為邏輯卷分配物理卷呢?GlusterFS3.1.X實現(xiàn)了真正的彈性卷管理,如圖4所示。存儲卷是對底層硬件的抽象,可以根據(jù)需要進行擴容和縮減,以及在不同物理系統(tǒng)之間進行遷移。存儲服務(wù)器可以在線增加和移除,并能在集群之間自動進行數(shù)據(jù)負載平衡,數(shù)據(jù)總是在線可用,沒有應(yīng)用中斷。文件系統(tǒng)配置更新也可以在線執(zhí)行,所作配置變動能夠快速動態(tài)地在集群中傳播,從而自動適應(yīng)負載波動和性能調(diào)優(yōu)。 彈性哈希算法本身并沒有提供數(shù)據(jù)容錯功能,GlusterFS使用鏡像或復(fù)制來保證數(shù)據(jù)可用性,推薦使用鏡像或3路復(fù)制。復(fù)制模式下,存儲服務(wù)器使用同步寫復(fù)制到其他的存儲服務(wù)器,單個服務(wù)器故障完全對客戶端透明。此外,GlusterFS沒有對復(fù)制數(shù)量進行限制,讀被分散到所有的鏡像存儲節(jié)點,可以提高讀性能。彈性哈希算法分配文件到唯一的邏輯卷,而復(fù)制可以保證數(shù)據(jù)至少保存在兩個不同存儲節(jié)點,兩者結(jié)合使得GlusterFS具備更高的彈性。 6. Translators如前所述,Translators是GlusterFS提供的一種強大文件系統(tǒng)功能擴展機制,這一設(shè)計思想借鑒于GNU/Hurd微內(nèi)核操作系統(tǒng)。GlusterFS中所有的功能都通過Translator機制實現(xiàn),運行時以動態(tài)庫方式進行加載,服務(wù)端和客戶端相互兼容。GlusterFS 3.1.X中,主要包括以下幾類Translator: (1) Cluster:存儲集群分布,目前有AFR, DHT, Stripe三種方式 (2) Debug:跟蹤GlusterFS內(nèi)部函數(shù)和系統(tǒng)調(diào)用 (3) Encryption:簡單的數(shù)據(jù)加密實現(xiàn) (4) Features:訪問控制、鎖、Mac兼容、靜默、配額、只讀、回收站等 (5) Mgmt:彈性卷管理 (6) Mount:FUSE接口實現(xiàn) (7) Nfs:內(nèi)部NFS服務(wù)器 (8) Performance:io-cache, io-threads, quick-read, read-ahead, stat-prefetch, sysmlink-cache, write-behind等性能優(yōu)化 (9) Protocol:服務(wù)器和客戶端協(xié)議實現(xiàn) (10)Storage:底層文件系統(tǒng)POSIX接口實現(xiàn) 這里我們重點介紹一下Cluster Translators,它是實現(xiàn)GlusterFS集群存儲的核心,它包括AFR(Automatic File Replication)、DHT(Distributed Hash Table)和Stripe三種類型。 AFR相當于RAID1,同一文件在多個存儲節(jié)點上保留多份,主要用于實現(xiàn)高可用性以及數(shù)據(jù)自動修復(fù)。AFR所有子卷上具有相同的名字空間,查找文件時從第一個節(jié)點開始,直到搜索成功或最后節(jié)點搜索完畢。讀數(shù)據(jù)時,AFR會把所有請求調(diào)度到所有存儲節(jié)點,進行負載均衡以提高系統(tǒng)性能。寫數(shù)據(jù)時,首先需要在所有鎖服務(wù)器上對文件加鎖,默認第一個節(jié)點為鎖服務(wù)器,可以指定多個。然后,AFR以日志事件方式對所有服務(wù)器進行寫數(shù)據(jù)操作,成功后刪除日志并解鎖。AFR會自動檢測并修復(fù)同一文件的數(shù)據(jù)不一致性,它使用更改日志來確定好的數(shù)據(jù)副本。自動修復(fù)在文件目錄首次訪問時觸發(fā),如果是目錄將在所有子卷上復(fù)制正確數(shù)據(jù),如果文件不存則創(chuàng)建,文件信息不匹配則修復(fù),日志指示更新則進行更新。 DHT即上面所介紹的彈性哈希算法,它采用hash方式進行數(shù)據(jù)分布,名字空間分布在所有節(jié)點上。查找文件時,通過彈性哈希算法進行,不依賴名字空間。但遍歷文件目錄時,則實現(xiàn)較為復(fù)雜和低效,需要搜索所有的存儲節(jié)點。單一文件只會調(diào)度到唯一的存儲節(jié)點,一旦文件被定位后,讀寫模式相對簡單。DHT不具備容錯能力,需要借助AFR實現(xiàn)高可用性, 如圖5所示應(yīng)用案例。 Stripe相當于RAID0,即分片存儲,文件被劃分成固定長度的數(shù)據(jù)分片以Round-Robin輪轉(zhuǎn)方式存儲在所有存儲節(jié)點。Stripe所有存儲節(jié)點組成完整的名字空間,查找文件時需要詢問所有節(jié)點,這點非常低效。讀寫數(shù)據(jù)時,Stripe涉及全部分片存儲節(jié)點,操作可以在多個節(jié)點之間并發(fā)執(zhí)行,性能非常高。Stripe通常與AFR組合使用,構(gòu)成RAID10/RAID01,同時獲得高性能和高可用性,當然存儲利用率會低于50%。 圖5 GlusterFS應(yīng)用案例:AFR+DHT 7. 設(shè)計討論GlusterFS是一個具有高擴展性、高性能、高可用性、可橫向擴展的彈性分布式文件系統(tǒng),在架構(gòu)設(shè)計上非常有特點,比如無元數(shù)據(jù)服務(wù)器設(shè)計、堆棧式架構(gòu)等。然而,存儲應(yīng)用問題是很復(fù)雜的,GlusterFS也不可能滿足所有的存儲需求,設(shè)計實現(xiàn)上也一定有考慮不足之處,下面我們作簡要分析。 l 無元數(shù)據(jù)服務(wù)器 vs 元數(shù)據(jù)服務(wù)器 無元數(shù)據(jù)服務(wù)器設(shè)計的好處是沒有單點故障和性能瓶頸問題,可提高系統(tǒng)擴展性、性能、可靠性和穩(wěn)定性。對于海量小文件應(yīng)用,這種設(shè)計能夠有效解決元數(shù)據(jù)的難點問題。它的負面影響是,數(shù)據(jù)一致問題更加復(fù)雜,文件目錄遍歷操作效率低下,缺乏全局監(jiān)控管理功能。同時也導(dǎo)致客戶端承擔了更多的職能,比如文件定位、名字空間緩存、邏輯卷視圖維護等等,這些都增加了客戶端的負載,占用相當?shù)?/span>CPU和內(nèi)存。 l 用戶空間 vs 內(nèi)核空間 用戶空間實現(xiàn)起來相對要簡單許多,對開發(fā)者技能要求較低,運行相對安全。用戶空間效率低,數(shù)據(jù)需要多次與內(nèi)核空間交換,另外GlusterFS借助FUSE來實現(xiàn)標準文件系統(tǒng)接口,性能上又有所損耗。內(nèi)核空間實現(xiàn)可以獲得很高的數(shù)據(jù)吞吐量,缺點是實現(xiàn)和調(diào)試非常困難,程序出錯經(jīng)常會導(dǎo)致系統(tǒng)崩潰,安全性低??v向擴展上,內(nèi)核空間要優(yōu)于用戶空間,GlusterFS有橫向擴展能力來彌補。 l 堆棧式 vs 非堆棧式 這有點像操作系統(tǒng)的微內(nèi)核設(shè)計與單一內(nèi)核設(shè)計之爭。GlusterFS堆棧式設(shè)計思想源自GNU/Hurd微內(nèi)核操作系統(tǒng),具有很強的系統(tǒng)擴展能力,系統(tǒng)設(shè)計實現(xiàn)復(fù)雜性降低很多,基本功能模塊的堆棧式組合就可以實現(xiàn)強大的功能。查看GlusterFS卷配置文件我們可以發(fā)現(xiàn),translator功能樹通常深達10層以上,一層一層進行調(diào)用,效率可見一斑。非堆棧式設(shè)計可看成類似Linux的單一內(nèi)核設(shè)計,系統(tǒng)調(diào)用通過中斷實現(xiàn),非常高效。后者的問題是系統(tǒng)核心臃腫,實現(xiàn)和擴展復(fù)雜,出現(xiàn)問題調(diào)試困難。 l 原始存儲格式 vs 私有存儲格式 GlusterFS使用原始格式存儲文件或數(shù)據(jù)分片,可以直接使用各種標準的工具進行訪問,數(shù)據(jù)互操作性好,遷移和數(shù)據(jù)管理非常方便。然而,數(shù)據(jù)安全成了問題,因為數(shù)據(jù)是以平凡的方式保存的,接觸數(shù)據(jù)的人可以直接復(fù)制和查看。這對很多應(yīng)用顯然是不能接受的,比如云存儲系統(tǒng),用戶特別關(guān)心數(shù)據(jù)安全,這也是影響公有云存儲發(fā)展的一個重要原因。私有存儲格式可以保證數(shù)據(jù)的安全性,即使泄露也是不可知的。GlusterFS要實現(xiàn)自己的私有格式,在設(shè)計實現(xiàn)和數(shù)據(jù)管理上相對復(fù)雜一些,也會對性能產(chǎn)生一定影響。 l 大文件 vs 小文件 GlusterFS適合大文件還是小文件存儲?彈性哈希算法和Stripe數(shù)據(jù)分布策略,移除了元數(shù)據(jù)依賴,優(yōu)化了數(shù)據(jù)分布,提高數(shù)據(jù)訪問并行性,能夠大幅提高大文件存儲的性能。對于小文件,無元數(shù)據(jù)服務(wù)設(shè)計解決了元數(shù)據(jù)的問題。但GlusterFS并沒有在I/O方面作優(yōu)化,在存儲服務(wù)器底層文件系統(tǒng)上仍然是大量小文件,本地文件系統(tǒng)元數(shù)據(jù)訪問是一個瓶頸,數(shù)據(jù)分布和并行性也無法充分發(fā)揮作用。因此,GlusterFS適合存儲大文件,小文件性能較差,還存在很大優(yōu)化空間。 l 可用性 vs 存儲利用率 GlusterFS使用復(fù)制技術(shù)來提供數(shù)據(jù)高可用性,復(fù)制數(shù)量沒有限制,自動修復(fù)功能基于復(fù)制來實現(xiàn)??捎眯耘c存儲利用率是一個矛盾體,可用性高存儲利用率就低,反之亦然。采用復(fù)制技術(shù),存儲利用率為1/復(fù)制數(shù),鏡像是50%,三路復(fù)制則只有33%。其實,可以有方法來同時提高可用性和存儲利用率,比如RAID5的利用率是(n-1)/n,RAID6是(n-2)/n,而糾刪碼技術(shù)可以提供更高的存儲利用率。但是,魚和熊掌不可得兼,它們都會對性能產(chǎn)生較大影響。 另外,GlusterFS目前的代碼實現(xiàn)不夠好,系統(tǒng)不夠穩(wěn)定,BUGS數(shù)量相對還比較多。從其官方網(wǎng)站的部署情況來看,測試用戶非常多,但是真正在生產(chǎn)環(huán)境中的應(yīng)用較少,存儲部署容量幾TB-幾十TB的占很大比率,數(shù)百TB-PB級案例非常少。這也可以從另一個方面說明,GlusterFS目前還不夠穩(wěn)定,需要更長的時間來檢驗。然而不可否認,GlusterFS是一個有著光明前景的集群文件系統(tǒng),線性橫向擴展能力使它具有天生的優(yōu)勢,尤其是對于云存儲系統(tǒng)。 8. 參考文獻[1] Gluster: http://www./products/gluster-file-system-architecture-white-paper/ [2] Gluster: http://www./products/performance-in-a-gluster-system-white-paper/ [3] Gluster: http:///community/documentation/index.php/Main_Page [4] GlusterFS-Design: http://edwyseguru./2010/06/11/glusterfs-design/ [5] GlusterFS users: http://www./gluster-users/ [6] GlusterFS sources: http://download./pub/gluster/glusterfs/3.1/
|
|
來自: 落葉_free > 《文件系統(tǒng)》