1、分佈式文件系統node
分佈式文件系統(Distributed File System)是指文件系統管理的物理存儲資源並不直接與本地節點相連,而是分佈於計算網絡中的一個或者多個節點的計算機上。目前意義上的分佈式文件系統大多都是由多個節點計算機構成,結構上是典型的客戶機/服務器模式。流行的模式是當客戶機須要存儲數據時,服務器指引其將數據分散的存儲到多個存儲節點上,以提供更快的速度,更大的容量及更好的冗餘特性。
linux
目前流行的分佈式文件系統有許多,如MooseFS、OpenAFS、GoogleFS,具體實現原理我這裏再也不介紹。算法
2、GlusterFS概述bash
GlusterFS系統是一個可擴展的網絡文件系統,相比其餘分佈式文件系統,GlusterFS具備高擴展性、高可用性、高性能、可橫向擴展等特色,而且其沒有元數據服務器的設計,讓整個服務沒有單點故障的隱患。服務器
術語:網絡
Brick:GFS中的存儲單元,經過是一個受信存儲池中的服務器的一個導出目錄。能夠經過主機名和目錄名來標識,如'SERVER:EXPORT'負載均衡
Client:掛載了GFS卷的設備tcp
Extended Attributes:xattr是一個文件系統的特性,其支持用戶或程序關聯文件/目錄和元數據。分佈式
FUSE:Filesystem Userspace是一個可加載的內核模塊,其支持非特權用戶建立本身的文件系統而不須要修改內核代碼。經過在用戶空間運行文件系統的代碼經過FUSE代碼與內核進行橋接。ide
Geo-Replication
GFID:GFS卷中的每一個文件或目錄都有一個惟一的128位的數據相關聯,其用於模擬inode
Namespace:每一個Gluster卷都導出單個ns做爲POSIX的掛載點
Node:一個擁有若干brick的設備
RDMA:遠程直接內存訪問,支持不經過雙方的OS進行直接內存訪問。
RRDNS:round robin DNS是一種經過DNS輪轉返回不一樣的設備以進行負載均衡的方法
Self-heal:用於後臺運行檢測複本卷中文件和目錄的不一致性並解決這些不一致。
Split-brain:腦裂
Translator:
Volfile:glusterfs進程的配置文件,一般位於/var/lib/glusterd/vols/volname
Volume:一組bricks的邏輯集合
一、無元數據設計
元數據是用來描述一個文件或給定區塊在分佈式文件系統中所在的位置,簡而言之就是某個文件或某個區塊存儲的位置。傳統分佈式文件系統大都會設置元數據服務器或者功能相近的管理服務器,主要做用就是用來管理文件與數據區塊之間的存儲位置關係。相較其餘分佈式文件系統而言,GlusterFS並無集中或者分佈式的元數據的概念,取而代之的是彈性哈希算法。集羣中的任何服務器和客戶端均可以利用哈希算法、路徑及文件名進行計算,就能夠對數據進行定位,並執行讀寫訪問操做。
這種設計帶來的好處是極大的提升了擴展性,同時也提升了系統的性能和可靠性;另外一顯著的特色是若是給定肯定的文件名,查找文件位置會很是快。可是若是要列出文件或者目錄,性能會大幅降低,由於列出文件或者目錄時,須要查詢所在節點並對各節點中的信息進行聚合。此時有元數據服務的分佈式文件系統的查詢效率反而會提升許多。
二、服務器間的部署
在以前的版本中服務器間的關係是對等的,也就是說每一個節點服務器都掌握了集羣的配置信息,這樣作的好處是每一個節點度擁有節點的配置信息,高度自治,全部信息均可以在本地查詢。每一個節點的信息更新都會向其餘節點通告,保證節點間信息的一致性。但若是集羣規模較大,節點衆多時,信息同步的效率就會降低,節點信息的非一致性機率就會大大提升。所以GlusterFS將來的版本有向集中式管理變化的趨勢。
三、客戶端訪問流程
當客戶端訪問GlusterFS存儲時,首先程序經過訪問掛載點的形式讀寫數據,對於用戶和程序而言,集羣文件系統是透明的,用戶和程序根本感受不到文件系統是本地仍是在遠程服務器上。讀寫操做將會被交給VFS(Virtual File System)來處理,VFS會將請求交給FUSE內核模塊,而FUSE又會經過設備/dev/fuse將數據交給GlusterFS Client。最後通過GlusterFS Client的計算,並最終通過網絡將請求或數據發送到GlusterFS Server上。
3、GlusterFS集羣的模式
GlusterFS 集羣的模式只數據在集羣中的存放結構,相似於磁盤陣列中的級別。
一、分佈式卷(Distributed Volume)
又稱哈希卷,近似於RAID0,文件沒有分片,文件根據hash算法寫入各個節點的硬盤上,優勢是容量大,缺點是沒冗餘。
建立卷指令以下:
gluster volume create test-volume server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4
二、複製卷(Replicated Volume)
至關於raid1,複製的份數,決定集羣的大小,一般與分佈式卷或者條帶卷組合使用,解決前兩種存儲卷的冗餘缺陷。缺點是磁盤利用率低。
複本卷在建立時可指定複本的數量,一般爲2或者3,複本在存儲時會在卷的不一樣brick上,所以有幾個複本就必須提供至少多個brick,當其中一臺服務器失效後,能夠從另外一臺服務器讀取數據,所以複製GlusterFS卷提升了數據可靠性的同事,還提供了數據冗餘的功能。
建立卷指令以下:
gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2
三、分佈式複製卷(Distributed Replicated Volume)
分佈式複製GlusterFS卷結合了分佈式和複製Gluster卷的特色,看起來相似RAID10,但其實不一樣,RAID10其實質是條帶化,但分佈式複製GlusterFS卷則沒有。
建立卷指令以下:
gluster volume create test-volume replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4
四、條帶卷(Striped Volume)
至關於raid0,文件是分片均勻寫在各個節點的硬盤上的,優勢是分佈式讀寫,性能總體較好。缺點是沒冗餘,分片隨機讀寫可能會致使硬盤IOPS飽和。
建立卷指令以下:
gluster volume create test-volume stripe 2 transport tcp server1:/exp1 server2:/exp2
五、分佈式條帶卷(Distributed Striped Volume)
當單個文件的體型十分巨大,客戶端數量更多時,條帶卷已經沒法知足需求,此時將分佈式與條帶化結合起來是一個比較好的選擇。其性能與服務器數量有關。
建立卷指令以下:
gluster volume create test-volume stripe 4 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4 server5:/exp5 server6:/exp6 server7:/exp7 server8:/exp8
參考文檔:http://gluster.readthedocs.io/en/latest/Quick-Start-Guide/Architecture/
http://wzlinux.blog.51cto.com/8021085/1949619