GlusterFS是Scale-Out存儲解決方案Gluster的核心,它是一個開源的分佈式文件系統,具備強大的橫向擴展能力,經過擴展可以支持數PB存儲容量和處理數千客戶端。GlusterFS藉助TCP/IP或InfiniBand RDMA網絡將物理分佈的存儲資源彙集在一塊兒,使用單一全局命名空間來管理數據。GlusterFS基於可堆疊的用戶空間設計,可爲各類不一樣的數據負載提供優異的性能。node
GlusterFS支持運行在任何標準IP網絡上標準應用程序的標準客戶端,如圖2所示,用戶能夠在全局統一的命名空間中使用NFS/CIFS等標準協議來訪問應用數據。GlusterFS使得用戶可擺脫原有的獨立、高成本的封閉存儲系統,可以利用普通廉價的存儲設備來部署可集中管理、橫向擴展、虛擬化的存儲池,存儲容量可擴展至TB/PB級。GlusterFS主要特徵以下:算法
GlusterFS利用雙重特性來提供幾TB至數PB的高擴展存儲解決方案。Scale-Out架構容許經過簡單地增長資源來提升存儲容量和性能,磁盤、計算和I/O資源均可以獨立增長,支持10GbE和InfiniBand等高速網絡互聯。Gluster彈性哈希(Elastic Hash)解除了GlusterFS對元數據服務器的需求,消除了單點故障和性能瓶頸,真正實現了並行化數據訪問。編程
GlusterFS能夠對文件進行自動複製,如鏡像或屢次複製,從而確保數據老是能夠訪問,甚至是在硬件故障的狀況下也能正常訪問。自我修復功能可以把數據恢復到正確的狀態,並且修復是以增量的方式在後臺執行,幾乎不會產生性能負載。GlusterFS沒有設計本身的私有數據文件格式,而是採用操做系統中主流標準的磁盤文件系統(如EXT三、ZFS)來存儲文件,所以數據可使用各類標準工具進行復制和訪問。vim
全局統一命名空間將磁盤和內存資源彙集成一個單一的虛擬存儲池,對上層用戶和應用屏蔽了底層的物理硬件。存儲資源能夠根據須要在虛擬存儲池中進行彈性擴展,好比擴容或收縮。當存儲虛擬機映像時,存儲的虛擬映像文件沒有數量限制,成千虛擬機均經過單一掛載點進行數據共享。虛擬機I/O可在命名空間內的全部服務器上自動進行負載均衡,消除了SAN環境中常常發生的訪問熱點和性能瓶頸問題。centos
GlusterFS採用彈性哈希算法在存儲池中定位數據,而不是採用集中式或分佈式元數據服務器索引。在其餘的Scale-Out存儲系統中,元數據服務器一般會致使I/O性能瓶頸和單點故障問題。GlusterFS中,全部在Scale-Out存儲配置中的存儲系統均可以智能地定位任意數據分片,不須要查看索引或者向其餘服務器查詢。這種設計機制徹底並行化了數據訪問,實現了真正的線性性能擴展。api
數據儲存在邏輯卷中,邏輯卷能夠從虛擬化的物理存儲池進行獨立邏輯劃分而獲得。存儲服務器能夠在線進行增長和移除,不會致使應用中斷。邏輯卷能夠在全部配置服務器中增加和縮減,能夠在不一樣服務器遷移進行容量均衡,或者增長和移除系統,這些操做均可在線進行。文件系統配置更改也能夠實時在線進行並應用,從而能夠適應工做負載條件變化或在線性能調優。服務器
Gluster存儲服務支持NFS, CIFS, HTTP, FTP以及Gluster原生協議,徹底與POSIX標準兼容。現有應用程序不須要做任何修改或使用專用API,就能夠對Gluster中的數據進行訪問。這在公有云環境中部署Gluster時很是有用,Gluster對雲服務提供商專用API進行抽象,而後提供標準POSIX接口。網絡
Brick:GFS中的存儲單元,經過是一個受信存儲池中的服務器的一個導出目錄。能夠經過主機名和目錄名來標識,如'SERVER:EXPORT'架構
Client: 掛載了GFS卷的設備負載均衡
Extended Attributes:xattr是一個文件系統的特性,其支持用戶或程序關聯文件/目錄和元數據。
FUSE:Filesystem Userspace是一個可加載的內核模塊,其支持非特權用戶建立本身的文件系統而不須要修改內核代碼。經過在用戶空間運行文件系統的代碼經過FUSE代碼與內核進行橋接。
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能夠以虛擬裝置的形式交付,也能夠與虛擬機容器打包,或者是公有云中部署的映像。開源社區中,GlusterFS被大量部署在基於廉價閒置硬件的各類操做系統上,構成集中統一的虛擬存儲資源池。簡而言之,GlusterFS是開放的全軟件實現,徹底獨立於硬件和操做系統。
GlusterFS不只提供了一個分佈式文件系統,並且還提供了許多其餘重要的分佈式功能,好比分佈式內存管理、I/O調度、軟RAID和自我修復等。GlusterFS汲取了微內核架構的經驗教訓,借鑑了GNU/Hurd操做系統的設計思想,在用戶空間實現了完整的存儲操做系統棧。
與傳統的文件系統不一樣,GlusterFS在用戶空間實現,這使得其安裝和升級特別簡便。另外,這也極大下降了普通用戶基於源碼修改GlusterFS的門檻,僅僅須要通用的C程序設計技能,而不須要特別的內核編程經驗。
GlusterFS採用模塊化、堆棧式的架構,可經過靈活的配置支持高度定製化的應用環境,好比大文件存儲、海量小文件存儲、雲存儲、多傳輸協議應用等。每一個功能以模塊形式實現,而後以積木方式進行簡單的組合,便可實現複雜的功能。好比,Replicate模塊可實現RAID1,Stripe模塊可實現RAID0,經過二者的組合可實現RAID10和RAID01,同時得到高性能和高可靠性。
GlusterFS以原始數據格式(如EXT三、EXT四、XFS、ZFS)儲存數據,並實現多種數據自動修復機制。所以,系統極具彈性,即便離線情形下文件也能夠經過其餘標準工具進行訪問。若是用戶須要從GlusterFS中遷移數據,不須要做任何修改仍然能夠徹底使用這些數據。
對Scale-Out存儲系統而言,最大的挑戰之一就是記錄數據邏輯與物理位置的映像關係,即數據元數據,可能還包括諸如屬性和訪問權限等信息。傳統分佈式存儲系統使用集中式或分佈式元數據服務來維護元數據,集中式元數據服務會致使單點故障和性能瓶頸問題,而分佈式元數據服務存在性能負載和元數據同步一致性問題。特別是對於海量小文件的應用,元數據問題是個很是大的挑戰。
GlusterFS獨特意採用無元數據服務的設計,取而代之使用算法來定位文件,元數據和數據沒有分離而是一塊兒存儲。集羣中的全部存儲系統服務器均可以智能地對文件數據分片進行定位,僅僅根據文件名和路徑並運用算法便可,而不須要查詢索引或者其餘服務器。這使得數據訪問徹底並行化,從而實現真正的線性性能擴展。無元數據服務器極大提升了GlusterFS的性能、可靠性和穩定性。
系統版本:Linux CentOS release 6.9 (Final)
系統內核:2.6.32-696.23.1.el6.x86_64
Glusterfs軟件版本:3.10.12
Node1:192.168.1.111
Node2:192.168.1.112
yum -y install centos-release-gluster310 #安裝glusterfs yum源
yum install -y libgssglue libtirpc rpcbind lvm2-develyum list glusterfs libaio #安裝依賴關係
yum install -y atop fio iperf #安裝測試工具
yum install -y glusterfs-libs glusterfs glusterfs-api glusterfs-cli glusterfs-client-xlators glusterfs-fuse glusterfs-server #安裝glusterfs服務端軟件
mkfs.ext4 /dev/sdb #格式化文件系統
mount /dev/sdb /storage/brick1/ 掛載文件系統
mount #查看
vim /etc/fstab #設置開機自動掛載
/dev/sdb /storage/brick1 exit4 defaults 0 0
service glusterd start #啓動gluster服務
chkconfig glusterd on #gluster服務開機自啓動
gluster peer probe node2 #將主機加入到集羣
gluster peer status #查看節點狀態
=====================================================
建立分佈式哈希卷:
gluster volume create testol node2:/storage/brick1/b1 #建立 一個卷 testol 到/storage/brick1/b1 這個目錄下
gluster volume start testol #啓動testol這個卷
gluster volume rebalance testol fix-layout start #哈希範圍從新分配,通常作完數據遷移或者添加新的brick作完負載後執行這條命令
=====================================================
刪除一個卷(最好先將mount掛載的客戶端卸載後在刪除):
gluster volume stop testol #先將卷中止
gluster volume delete testol #而後刪除
PS:刪除卷後,數據還在,若是以爲不須要能夠將數據刪掉
====================================================
刪除一個brick
gluster volume remove-brick <VOLNAME>[replica<COUNT>]<BRICK>...
====================================================
負載均衡:(刪除brick後對其餘的捲進行負載均衡)
gluster volume rebalance VOLNAME {start|stop|}[force]
====================================================
建立一個複製卷:
gluster volume create testvol replica 2 node2:/storage/brick1/b2 #建立一個複製卷
yum install -y glusterfs-fuse glusterfs-libs glusterfs #客戶端要安裝的軟件
mount -t glusterfs node1:testvol /mnt #客戶端掛載,注意作好hosts解析。