GlusterFS 4.1 版本選擇和部署
1 前言相關
1.1 glusterfs優勢
1、無元數據設計
GlusterFS設計沒有集中或分布式元數據,取而代之的是彈性哈希算法。集群中的任何服務器、客戶端都可利用哈希算法、路徑及文件名進行計算,就可以對數據進行定位,並執行讀寫訪問操作。
結論:
- 無元數據設計帶來的好處是極大地提高了擴展性,同時也提高了系統的性能和可靠性。
- 如果需要列出文件或目錄,性能會大幅下降,因為列出文件或目錄,需要查詢所在的節點並對節點中的信息進行聚合。
- 但是如果給定確定的文件名,查找文件位置會非常快。
2、服務器間的部署
GlusterFS集群服務器之間是對等的,每個節點服務器都掌握了集群的配置信息。
所有信息都可以在本地查詢。每個節點的信息更新都會向其他節點通告,保證節點信息的一致性。
但是集群規模較大后,信息同步效率會下降,非一致性概率會提高。
3、客戶端訪問
首先程序通過訪問掛載點的形式讀寫數據,對於用戶和程序而言,集群文件系統是透明的,用戶和程序根本感覺不到文件系統是本地還是遠端服務器上。
讀寫操作會被交給VFS(Virtual File System,虛擬文件系統) 來處理,VFS會將請求交給FUSE內核模塊,而FUSE又會通過設備/dev/fuse將數據交給GlusterFS Client。最后經過GlusterFS Client計算,並最終通過網絡將請求或數據發送到GlusterFS Servers上。
關於glusterfs的原理詳情,可以參考以下文章
glusterfs架構和原理
換個視角深入理解GlusterFS,GlusterFS缺點分析
glusterfs中文資料推薦劉愛貴博士的GlusterFS原創資源系列
1.2 版本選擇
網上大部分文章都是基於3.x版本部署的,但是3.x版本已經在centos7中的阿里雲的epel源中消失了,最低的也是4.0版本
[root@kaifa-supply ~]# yum search centos-release-gluster
......
centos-release-gluster-legacy.noarch : Disable unmaintained Gluster repositories from the CentOS Storage SIG
centos-release-gluster40.x86_64 : Gluster 4.0 (Short Term Stable) packages from the CentOS Storage SIG repository
centos-release-gluster41.noarch : Gluster 4.1 (Long Term Stable) packages from the CentOS Storage SIG repository
centos-release-gluster5.noarch : Gluster 5 packages from the CentOS Storage SIG repository
centos-release-gluster6.noarch : Gluster 6 packages from the CentOS Storage SIG repository
centos-release-gluster7.noarch : Gluster 7 packages from the CentOS Storage SIG repository
並且明確的提示,4.0版本也是短期支持板,所以我們選擇更新一些的4.1版本來部署
1.3 volume知識
存儲類型介紹詳見:Setting Up Volumes - Gluster Docs
在老版本中,共有7種卷類型
在新版本中,共有5種卷類型
共有的卷類型是:
- Distributed (分布式卷 根據hash結果存放,無備份,可直讀)
- Replicated (復制卷 類似 RAID1,可直讀)
- Distributed Replicated (分布式復制卷 類比 RAID10,可直讀)
不同的卷類型是:
- 老版本中有stripe(條帶卷),塊存儲方式,不能直讀
- 以及基於條帶卷組合的分布式條帶卷,復制條帶卷,分布式復制條帶卷
- 新版本中放棄了stripe,啟用了基於EC糾錯碼的Dispersed(糾錯卷)
- 以及組合出的Distributed Dispersed(分布式糾錯卷)
不過我們不用考慮那么多,因為常規都用分布式復制卷,優點如下
- 分布式存儲,效率高
- 基於復制卷,數據有備份
- 文件可直讀
- 所有版本都支持
當然Dispersed(糾錯卷 類似於RAID5)從3.6開始一直更新到7.x版本,花費了gluster吞對大量心血,想了解的可以看這篇文章
2 服務部署
參考 官方:快速部署指南
2.1 服務規划
操作系統 | IP | 主機名 | 附加硬盤 |
---|---|---|---|
centos 7.4 | 10.0.0.101 | gf-node1 | sdb:5G |
centos 7.4 | 10.0.0.102 | gf-node2 | sdb:5G |
centos 7.4 | 10.0.0.103 | gf-node3 | sdb:5G |
2.2 環境准備
5台服務器都做以下相同操作
# 關閉防火牆、selinux等不解釋
# 完成hosts解析
cat >>/etc/hosts <<EOF
10.0.0.101 gf-node01
10.0.0.102 gf-node02
10.0.0.103 gf-node03
EOF
# 安裝4.1yum源和程序
yum install -y centos-release-gluster41
yum install -y glusterfs glusterfs-libs glusterfs-server
# 啟動服務並開機啟動
systemctl start glusterd.service
systemctl enable glusterd.service
systemctl status glusterd.service
2.3 格式化掛載磁盤
總共創建3個目錄,brick1用來掛載sdb,另外兩個目錄作為本地文件夾
格式化磁盤
# 查看磁盤列表
[root@gf-node01 ~]# fdisk -l
Disk /dev/sdb: 5368 MB, 5368709120 bytes, 10485760 sectors
Disk /dev/sda: 53.7 GB, 53687091200 bytes, 104857600 sectors
# 不分區直接格式化磁盤
mkfs.xfs -i size=512 /dev/sdb
掛載磁盤
# 創建目錄並掛載
mkdir -p /data/brick{1..3}
echo '/dev/sdb /data/brick1 xfs defaults 0 0' >> /etc/fstab
mount -a && mount
# 查看結果
[root@gf-node01 ~]# df -h|grep sd
/dev/sda2 48G 1.7G 47G 4% /
/dev/sdb 5.0G 33M 5.0G 1% /data/brick1
2.4 建立主機信任池
在任意一台主機上,執行以下命令都可以建立信任池,建立並不需要賬號密碼,因為默認是將部署環境考慮為安全的可信環境
# 建立可信池
gluster peer probe gf-node02
gluster peer probe gf-node03
# 查看狀態
[root@gf-node01 ~]# gluster peer status
......
[root@gf-node01 ~]# gluster pool list
UUID Hostname State
4068e219-5141-43a7-81ba-8294536fb054 gf-node02 Connected
e3faffeb-4b16-45e2-9ff3-1922791e05eb gf-node03 Connected
3e6a4567-eda7-4001-a5d5-afaa7e08ed93 localhost Connected
注意: 一旦信任池建立后,只有在信任池中的節點才能添加新服務器信任池中
3 使用分布式復制卷
只實驗GlusterFs的分布式復制卷,其他卷類型有需要的話參考百度自行測試
3.1 分布式復制卷創建說明
- 命令
gluster volume create gv1 replica 3 DIR1 DIR2 DIR3 ....
- 副本數不能小於3
replica 3
,否則會阻止創建,因為可能腦裂,會提示Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this
- 副本的數量如果等於副本數(3個),則是分布式卷,是倍數則是分布式復制卷
- 會先將3個副本一組創建為復制卷,然后再將多個復制卷組成分布卷
- 分布式復制卷的副本順序,和創建命令相關,不會隨機排列
- 如果不是所有副本卷都是獨立硬盤,需要添加
force
參數,否則會提示錯誤volume create: gv1: failed: The brick gf-node01:/data/brick2/gv1 is being created in the root partition. It is recommended that you don't use the system's root partition for storage backend. Or use 'force' at the end of the command if you want to override this behavior.
3.2 分布式復制卷創建
# 創建分布式復制卷
gluster volume create gv1 replica 3 \
gf-node01:/data/brick1/gv1 \
gf-node01:/data/brick2/gv1 \
gf-node02:/data/brick1/gv1 \
gf-node02:/data/brick2/gv1 \
gf-node03:/data/brick1/gv1 \
gf-node03:/data/brick2/gv1 \
force
# 啟動卷
gluster volume start gv1
# 查看卷的狀態
[root@gf-node01 ~]# gluster volume info
Volume Name: gv1
Type: Distributed-Replicate
Volume ID: e1e004fa-5588-4629-b7ff-048c4e17de91
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 3 = 6
Transport-type: tcp
Bricks:
Brick1: gf-node01:/data/brick1/gv1
Brick2: gf-node01:/data/brick2/gv1
Brick3: gf-node02:/data/brick1/gv1
Brick4: gf-node02:/data/brick2/gv1
Brick5: gf-node03:/data/brick1/gv1
Brick6: gf-node03:/data/brick2/gv1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
3.3 分布式復制卷的使用
# 掛載卷
[root@gf-node01 ~]# mount -t glusterfs gf-node01:/gv1 /mnt
# 寫入數據測試
[root@gf-node01 ~]# touch /mnt/test{1..9}
[root@gf-node01 ~]# ls /mnt/test{1..9}
/mnt/test1 /mnt/test2 /mnt/test3 /mnt/test4 /mnt/test5 /mnt/test6 /mnt/test7 /mnt/test8 /mnt/test9
# 驗證測試數據
[root@gf-node01 ~]# ls /data/brick*/*
/data/brick1/gv1:
test1 test2 test4 test5 test8 test9
/data/brick2/gv1:
test1 test2 test4 test5 test8 test9
[root@gf-node02 ~]# ls /data/brick*/*
/data/brick1/gv1:
test1 test2 test4 test5 test8 test9
/data/brick2/gv1:
[root@gf-node03 ~]# ls /data/brick*/*
/data/brick1/gv1:
test3 test6 test7
/data/brick2/gv1:
test3 test6 test7
結論: 可以看出前三個為一個復制集,后三個為一個復制集,所以創建卷的時候,卷的順序很關鍵