GlusterFS源碼解析 —— GlusterFS 簡介

原文地址:http://blog.csdn.net/wangyuling1234567890/article/details/24564185

                                                                         —— —— 本系列博客源碼是基於GlusterFS 3.4.3 版本

1. Glusterfs簡介

GlusterFSScale-Out存儲解決方案Gluster的核心,它是一個開源的分佈式文件系統,具有強大的橫向擴展能力,通過擴展能夠支持數PB存儲容量和處理數千客戶端。GlusterFS藉助TCP/IPInfiniBandRDMA網絡將物理分佈的存儲資源聚集在一起,使用單一全局命名空間來管理數據。GlusterFS基於可堆疊的用戶空間設計,可爲各種不同的數據負載提供優異的性能。


2. Glusterfs特點


2.1 擴展性和高性能

GlusterFS利用雙重特性來提供幾TB至數PB的高擴展存儲解決方案。Scale-Out架構允許通過簡單地增加資源來提高存儲容量和性能,磁盤、計算和I/O資源都可以獨立增加,支持10GbEInfiniBand等高速網絡互聯。Gluster彈性哈希(ElasticHash)解除了GlusterFS對元數據服務器的需求,消除了單點故障和性能瓶頸,真正實現了並行化數據訪問。

2.2 高可用性

GlusterFS可以對文件進行自動複製,如鏡像或多次複製,從而確保數據總是可以訪問,甚至是在硬件故障的情況下也能正常訪問。自我修復功能能夠把數據恢復到正確的狀態,而且修復是以增量的方式在後臺執行,幾乎不會產生性能負載。GlusterFS沒有設計自己的私有數據文件格式,而是採用操作系統中主流標準的磁盤文件系統(如EXT3ZFS)來存儲文件,因此數據可以使用各種標準工具進行復制和訪問。

2.3全局統一命名空間

全局統一命名空間將磁盤和內存資源聚集成一個單一的虛擬存儲池,對上層用戶和應用屏蔽了底層的物理硬件。存儲資源可以根據需要在虛擬存儲池中進行彈性擴展,比如擴容或收縮。當存儲虛擬機映像時,存儲的虛擬映像文件沒有數量限制,成千虛擬機均通過單一掛載點進行數據共享。虛擬機I/O可在命名空間內的所有服務器上自動進行負載均衡,消除了SAN環境中經常發生的訪問熱點和性能瓶頸問題。

2.4 彈性哈希算法

GlusterFS採用彈性哈希算法在存儲池中定位數據,而不是採用集中式或分佈式元數據服務器索引。在其他的Scale-Out存儲系統中,元數據服務器通常會導致I/O性能瓶頸和單點故障問題。GlusterFS中,所有在Scale-Out存儲配置中的存儲系統都可以智能地定位任意數據分片,不需要查看索引或者向其他服務器查詢。這種設計機制完全並行化了數據訪問,實現了真正的線性性能擴展。

2.5 彈性卷管理

數據儲存在邏輯卷中,邏輯卷可以從虛擬化的物理存儲池進行獨立邏輯劃分而得到。存儲服務器可以在線進行增加和移除,不會導致應用中斷。邏輯卷可以在所有配置服務器中增長和縮減,可以在不同服務器遷移進行容量均衡,或者增加和移除系統,這些操作都可在線進行。文件系統配置更改也可以實時在線進行並應用,從而可以適應工作負載條件變化或在線性能調優。

2.6基於標準協議

Gluster存儲服務支持NFS,CIFS, HTTP, FTP以及Gluster原生協議,完全與POSIX標準兼容。現有應用程序不需要作任何修改或使用專用API,就可以對Gluster中的數據進行訪問。這在公有云環境中部署Gluster時非常有用,Gluster對雲服務提供商專用API進行抽象,然後提供標準POSIX接口。


3. 模塊化堆棧式架構簡介

GlusterFS採用模塊化、堆棧式的架構,可通過靈活的配置支持高度定製化的應用環境,比如大文件存儲、海量小文件存儲、雲存儲、多傳輸協議應用等。每個功能以模塊形式實現,然後以積木方式進行簡單的組合,即可實現複雜的功能。比如,Replicate模塊可實現RAID1Stripe模塊可實現RAID0,通過兩者的組合可實現RAID10RAID01,同時獲得高性能和高可靠性。如下圖所示:



每個功能模塊就是一個Xlator,不同的xlator在初始化後形成樹,每個xlator爲這棵樹中的節點,glusterfs要工作,就必然會涉及到節點之間的調用。

調用主要包括2個方面,父節點調用子節點,子節點調用父節點,如當父節點向子節點發出寫請求則要調用子節點的寫操作,當子節點寫操作完成後,會調用父節點的寫回調操作。父子節點的調用關係可用下圖說明:



4. glusterfs整體工作流程

整體流程如下圖所示:


1)     首先是在客戶端, 用戶通過glusterfs的mount point 來讀寫數據,對於用戶來說,集羣系統的存在對用戶是完全透明的,用戶感覺不到是操作本地系統還是遠端的集羣系統。

2)     用戶的這個操作被遞交給 本地linux系統的VFS來處理。

3)     VFS 將數據遞交給FUSE 內核文件系統:在啓動glusterfs客戶端以前,需要想系統註冊一個實際的文件系統FUSE,如上圖所示,該文件系統與ext3在同一個層次上面,ext3 是對實際的磁盤進行處理, 而fuse文件系統則是將數據通過/dev/fuse 這個設備文件遞交給了glusterfsclient端。所以, 我們可以將 fuse文件系統理解爲一個代理。

4)     數據被fuse 遞交給Glusterfs client 後,client 對數據進行一些指定的處理(所謂的指定,是按照client配置文件據來進行的一系列處理


5. 主要模塊介紹

Gluterfs整體採用堆棧式架構,模仿的函數調用棧,各個功能模塊耦合度低,且很多模塊可自由結合形成不同的功能。下面主要介紹一下Glusterfs的主要模塊:

  5.1 DHT模塊

    該xlator主要實現了文件的哈希分佈,將0到2的32次方根據子卷的個數平均劃分若干個區間,文件到達DHT時,會根據文件名計算所得的哈希值所在的區間,來決定該文件落在哪個子捲上。其中各個子卷的哈希區間記錄在父目錄的擴展屬性中。此外,該模塊還實現了數據遷移和擴容功能。

  5.2 AFR模塊

    該xlator主要實現了文件級別的鏡像冗餘功能,類似raid1功能,不過不是塊級別的。數據到達AFR時,會將ChangeLog加1,然後寫數據,待所有子卷全部寫成功後,再將ChangeLog減1。若需要修復時,根據ChangeLog判斷哪個是source卷。實際的修復流程非常複雜,包括meta,entry等。冗餘卷沒有主從之分,任何一個子卷都可以保證上層的讀寫請求,可在不影響上層應用的情況下執行修復功能。

  5.3 Stripe模塊

    該xlator主要實現了文件的寫條帶,即文件到達Stripe時,會將文件按固定大小的條帶寫入各個子卷,類似raid0功能。在高版本中,有兩種模式:寫空洞文件模式和聚合模式。該模塊原理和實現都較DHT和AFR模塊簡單,且代碼量較少,在此不再贅述。


                                                                                   —— —— 以上內容整理自互聯網

發佈了63 篇原創文章 · 獲贊 6 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章