一、概述
1、GlusterFS是集群式NAS存儲系統,分布式文件系統(POSIX兼容),Tcp/Ip方式互聯的一個並行的網絡文件系統,通過原生 GlusterFS 協議訪問數據,也可以通過 NFS/CIFS 協議訪問數據,沒有元數據服務器,實現整個系統的性能、可靠性和穩定性。
2、GlusterFS 常見術語
名稱 | 解釋 |
---|---|
Brick | 最基本的存儲單元,表示為trusted storage pool中輸出的目錄,供客戶端掛載用。 |
Volume | 一個卷。在邏輯上由N個bricks組成。 |
FUSE | Unix-like OS上的可動態加載的模塊,允許用戶不用修改內核即可創建自己的文件系統。 |
Glusterd | Gluster management daemon,要在trusted storage pool中所有的服務器上運行。 |
POSIX | 一個標准,GlusterFS兼容。 |
3、GlusterFS卷類型
基本卷:
(1) distribute volume:分布式卷
(2) stripe volume:條帶卷
(3) replica volume:復制卷
復合卷:
(4) distribute stripe volume:分布式條帶卷
(5) distribute replica volume:分布式復制卷
(6) stripe replica volume:條帶復制卷
(7) distribute stripe replicavolume:分布式條帶復制卷
基本卷:
哈希卷(distributed volume,文件通過hash算法在所有brick上分布,文件級raid0,不具有容錯能力);
復制卷(replicated volume,生產常用,文件同步復制到多個brick上,文件級raid1,具有容錯能力,w性能下降r性能提升);
條帶卷(striped volume,不建議使用,單個文件分布到多個brick上,支持超大文件,類似raid0,rr方式round-robin,通常用於HPC(high performance compute)中的超大文件(>10G的單個文件)及高並發環境(多人同時訪問同一個文件));
復合卷:
哈希復制卷(distributed replicated volume,生產常用,同時具有哈希卷和復制卷的特點);
哈希條帶卷(distributed striped volume);
復制條帶卷(replicated striped vlume);
哈希復制條帶卷(distributed replicated striped volume);
4、開源並行FS比較(glusterfs VS moosefs VS lustre VS ceph):
比較維度 |
Glusterfs |
Moosefs |
Lustre |
Ceph |
成熟度 |
2005年發布第一個GA版1.2.3,2013年GA版3.3.2,具有成熟的系統架構和完整的工程代碼 |
2008年發布第一個開源版本v1.5,13年發布GA版v1.6.27,穩定,比較成熟的開源DFS |
2003發布第一個版本lustre1.0,2013年發布v2.4.0,相當成熟,在HPC領域占有絕大比例 |
2013年發布v0.71,並已添加到linux kernel中作實驗內核,目前不成熟有較多bug,更新穩定都是實驗版 |
穩定性 |
較穩定,無重大bug,已有較多組織或機構應用於生產環境 |
較穩定,無重大bug |
很穩定,在HPC領域應用很多 |
核心組件RADOS較穩定,每3個月更新一次穩定版,有部分企業用於生產環境 |
復雜度 |
簡單,無元數據服務,用戶空間實現,架構清晰,xlator樹形結構 |
簡單,用戶空間實現,代碼規模較小,高度模塊化 |
復雜度較高,依賴內核實現 |
較復雜,c++實現,功能較多 |
高性能 |
解除元數據瓶頸,並行化數據訪問 |
元數據單點瓶頸 |
高性能,HPC領域表現卓越 |
數據分布均衡,並行化度高 |
擴展性 |
彈性hash代替元數據服務,線性擴展,可輕松擴展到數百PB量級,支持動態擴容 |
可增加存儲server,不能增加MDS |
高擴展性,容量可達數百PB,可在不打斷任何操作的情況下,通過增加新的OSS來實現動態擴展 |
高擴展性,支持10-1000台server,支持TB到PB的擴展,當組件發生變化時(添加或刪除),自動進行數據的重分布 |
可用性 |
多元數據服務設計,數據分布提供三種方式的分割:AFR、DHT、stripe,支持自動復制和自動修復 |
元數據+日志服務器,保障元數據server,運行時元數據放內存,可設置副本 |
元數據集群,可部署主備切換工作方式,無副本設計,OSS之間可利用共享存儲實現自動故障恢復 |
元數據集群,沒有單點故障,多數據副本,自動管理、自動修復,monitor監控集群中所有節點狀態,且可有多個monitor保證可靠性 |
可管理性 |
部署簡單,易於管理和維護,使用底層FS,ext3/zfs,客戶端負載增加;提供管理工具,如卷的擴容、數據LB、目錄配額及相關監控等 |
部署簡單,提供web gui監控界面,元數據恢復,文件恢復,回收站功能,快照 |
部署復雜,需升級kernel等,提供管理工具,如設置目錄stripe |
部署較復雜,提供工具對集群進行監控管理,包括集群狀態,各組件狀態等 |
研發成本 |
用戶空間實現,模塊化堆棧式架構 |
用戶空間實現,小規模 |
高,內核空間實現,且代碼規模大 |
較高,代碼規模大,功能多 |
適用性 |
適用以文件為對象的存儲體系,適合大文件存儲 |
小規模集群,元數據瓶頸,內存消耗大 |
大文件,HPC領域 |
|
NAS兼容 |
支持NFS、CIFS、HTTP、FTP、gluster原生協議,與POSIX標准兼容 |
支持CIFS、NFS,支持標准POSIX接口 |
支持CIFS、NFS,支持標准POSIX接口 |
支持CIFS、NFS,支持標准POSIX接口 |
采用指數 |
☆☆☆☆ |
☆☆☆ |
☆☆☆ |
☆☆ |
二、配置安裝
1、環境
192.168.1.11 gluster-1-1
192.168.1.12 gluster-1-2
192.168.1.13 gluster-1-3
注意:hosts文件添加解析,時間同步,關閉iptables和SELinux,三台各加10G硬盤做存儲數據。
2、下載gluster相關軟件包
vim /etc/yum.repos.d/gfs.repo http://bits.gluster.org/pub/gluster/glusterfs/3.4.2/x86_64
依賴包:rpcbind libaio lvm2-devel 服務端:yum install glusterfs-server glusterfs glusterfs-cli glusterfs-fuse glusterfs-libs glusterfs-api 客戶端:yum install glusterfs glusterfs-fuse glusterfs-libs
磁盤分區:mkfs.ext4 -L /brick1 /dev/sdb 分區、標簽、格式化
3、部署
1)創建目錄並啟動服務 mkdir /brick1 /etc/init.d/glusterd start 2)添加gluster節點服務器 gluster peer probe gluster-1-2 gluster peer probe gluster-1-3 3)查看節點服務器 gluster peer status
4、創建卷
1)創建testvol卷(默認是哈希卷)
gluster volume create testvol gluster-1-1:/brick1/b1 哈希卷
gluster volume create gs2 replica 2 gluster-1-1:/brick1/b1 gluster-1-2:/brick1/b2 復制卷
2)啟動卷
gluster volume start testvol
3)查看卷
gluster volume info
4)刪除卷
gluster volume remove-brick testvol gluster-1-2:/brick1/b2
5、客戶端測試
1)客戶端掛載卷 mount -t glusterfs gluster-1-1:/testvol /mnt 2)測試 df -h mount 等 touch {1..9}.txt rm 4.txt
6、節點操作
1)刪除節點服務器 gluster peer detach gluster-1-2 不能刪除自己 2)添加節點服務器 gluster peer probe gluster-1-2
gluster volume add-brick testvol gluster-1-2:/brick1/b2 (b2下面不能有文件)
3)重新LB,要在閑時做,分兩步,先fix-layout將hash算法重分配,再將數據重分配
gluster volume rebalance testvol fix-layout start
gluster volume rebalance testvol start
4)查看rebalance平衡狀態
gluster volume rebalance testvol status
7、刪除卷
1)卸載掛載點 umount /mnt -lf 2)刪除卷 gluster volume stop testvol gluster volume delete testvol (卷刪除后,內容還在) rm -rf /brick1/b1
8、恢復卷信息
1)卷信息的目錄 ll /var/lib/glusterd/vols/testvol/ 2)恢復命令 gluster volume sync gluster-1-1 all
9、其他
1)允許可信任客戶端IP gluster volume set testvol auth.allow 192.168.1.* 2)關閉gluster的nfs功能 ps -ef | grep nfs gluster volume set testvol nfs.disable on
10、故障
1)復制卷數據不一致 故障現象:雙副本卷數據出現不一致 故障模擬:刪除其中一個brick數據 修復方法 cat 文件 觸發自修復:遍歷並訪問文件 find /mnt -type f -print0 | xargs -0 head -c1 2)glusterfs集群節點配置信息不正確 恢復復制卷 brick 故障現象:雙副本卷中一個brick損壞 恢復流程 a、重新建立故障brick目錄 mkdir b2 b、設置擴展屬性(參考另一個復制 brick) getfattr -d -m . -e hex b1/ 獲取擴展屬性 setfattr -n trusted.glusterfs.volume-id -v 0x1fa96ed0a0624ccf9e4f07cb9d84296f b2 setfattr -n trusted.gfid -v 0x00000000000000000000000000000001 b2 setfattr -n trusted.glusterfs.dht -v 0x000000010000000000000000ffffffff b2 c、重啟 glusterd服務 /etc/init.d/glusterd restart gluster volume stop testvol gluster volume start testvol d、觸發數據自修復 find /mntpoint -type f -print0 | xargs -0 head -c1 >/dev/null 3)修復磁盤數據(在使用server1時宕機,使用server2替換,執行數據同步) gluster volume replace-brick testvol server1:/brick1/b1 server2:/brick1/b1 commit force gluster volume heal testvol full
GlusterFS 客戶端常用命令
創建卷
1、創建分布卷 gluster volume create dis_vol gluster-1-1:/brick1/b1 gluster-1-2:/brick1/b2 gluster-1-3:/brick1/b3 2、創建復制卷 gluster volume create rep_vol replica 2 gluster-1-1:/brick1/b1 gluster-1-2:/brick1/b2 gluster-1-3:/brick1/b3 3、創建條帶卷 gluster volume create str_vol stripe 3 gluster-1-1:/brick1/b1 gluster-1-2:/brick1/b2 gluster-1-3:/brick1/b3 4、創建分布條帶卷 gluster volume create dir_str_vol stripe 4 gluster-1-1:/brick1/b1 gluster-1-2:/brick1/b2 gluster-1-3:/brick1/b3 5、創建分布復制卷 gluster volume create dir_rep_vol replica 2 gluster-1-1:/brick1/b1 gluster-1-2:/brick1/b2 gluster-1-3:/brick1/b3 6、創建分布條帶復制 gluster volume create dis_str_rep_vol stri 2 repl 2 gluster-1-1:/brick1/b1 gluster-1-2:/brick1/b2 gluster-1-3:/brick1/b3 7、創建條帶復制卷 gluster volume create str_rep_vol stripe 2 replica 2 gluster-1-1:/brick1/b1 gluster-1-2:/brick1/b2 gluster-1-3:/brick1/b3 8、創建分散卷(不常用) gluster volume create disperse_vol disperse 4 gluster-1-1:/brick1/b1 gluster-1-2:/brick1/b2 gluster-1-3:/brick1/b3
資源定義
Brick: 存儲的基本單元,表現為服務器上可信存儲池的導出目錄 Volume: 卷是bricks的邏輯集合 Cluster: 一組計算機組成的集群 Distributed File System: 允許多個客戶端通過網絡並發訪問的文件系統 GFID: 每個GlusterFs中的文件或者目錄都有一個128bit的數字標識稱為GFID glusterd: 管理守護進程需要運行在所有的提供授信存儲池的服務器上 Namespace: 名稱空間是被創建的一個抽象容器或環境用來保存唯一標識符號 Quorum: 設置一個可信的存儲池中最多失效的主機節點數量 Quota: 允許通過目錄或者卷設置對磁盤空間使用的限制 Posix: 可移植操作系統接口是IEEE定義的一系列相關api標准 Vol File: Vol文件是glusterfs進程使用的配置文件 Distributed: 分布卷 Replicated: 復本卷 Distributed Replicated: 分布式復制卷 Geo-Replication: 異地備份為站點通過局域網、廣域網、互聯網提供一個連續的異步的和增量復制服務 Metedata: 元數據定義為關於數據的數據描述信息,在GlusterFs沒有專用的元數據存儲內容 Extended Attributes: 擴展屬性是文件系統的一個特性 FUSE: 用戶空間的文件系統是一個用於類Unix操作系統的可加載內核模塊,以允許非特權用戶在適用內核代碼的情況下創建自己的文件系統。實現了在用戶空間下運行文件系統代碼
創建volume
Distributed:分布式卷,文件通過hash算法隨機的分布到由bricks組成的卷上。 Replicated:復制式卷,類似raid1,replica數必須等於volume中brick所包含的存儲服務器數,可用性高。 Striped:條帶式卷,類似與raid0,stripe數必須等於volume中brick所包含的存儲服務器數,文件被分成數據塊,以Round Robin的方式存儲在bricks中,並發粒度是數據塊,大文件性能好。 Distributed Striped:分布式的條帶卷,volume中brick所包含的存儲服務器數必須是stripe的倍數(>=2倍),兼顧分布式和條帶式的功能。 Distributed Replicated:分布式的復制卷,volume中brick所包含的存儲服務器數必須是 replica 的倍數(>=2倍),兼顧分布式和復制式的功能。