GFS 分散式檔案系統
阿新 • • 發佈:2021-10-07
一、GlusterFS 概述
1.GlusterFS簡介
- GlusterFS 是一個開源的分散式檔案系統。
- MFS
- 擴充套件性和高效能
- 高可用性
- 全域性統一名稱空間
- 彈性卷管理
- 基於標準協議
- Brick(儲存塊):
- Volume(邏輯卷):
- FUSE:
- VFS:
- Glusterd(後臺管理程序):
- 分散式卷(Distribute volume):
檔案分佈在不同的伺服器,不具備冗餘性。
更容易和廉價地擴展卷的大小。 單點故障會造成資料丟失。 依賴底層的資料保護。 #建立一個名為dis-volume的分散式卷,檔案將根據HASH分佈在server1:/dir1、server2:/dir2和server3:/dir3中 gluster volume create dis-volume server1:/dir1 server2:/dir2 server3:/dir3- 條帶卷(Stripe volume):
- 複製卷(Replica volume):
- 分散式條帶卷(Distribute Stripe volume):
- 分散式複製卷(Distribute Replica volume):
- 條帶複製卷(Stripe Replica volume):
- 分散式條帶複製卷(Distribute Stripe Replicavolume):
systemctl stop firewalld setenforce 0
2.磁碟分割槽,並掛載
vim /opt/fdisk.sh #!/bin/bash NEWDEV=`ls /dev/sd* | grep -o 'sd[b-z]' | uniq` for VAR in $NEWDEV do echo -e "n\np\n\n\n\nw\n" | fdisk /dev/$VAR &> /dev/null mkfs.xfs /dev/${VAR}"1" &> /dev/null mkdir -p /data/${VAR}"1" &> /dev/null echo "/dev/${VAR}"1" /data/${VAR}"1" xfs defaults 0 0" >> /etc/fstab done mount -a &> /dev/null chmod +x /opt/fdisk.sh cd /opt/ ./fdisk.sh
3.修改主機名,配置/etc/hosts檔案
#以Node1節點為例:hostnamectl set-hostname node1 su echo "192.168.200.13 node1" >> /etc/hosts echo "192.168.200.14 node2" >> /etc/hosts echo "192.168.200.15 node3" >> /etc/hosts echo "192.168.200.16 node4" >> /etc/hosts
3.1 安裝、啟動GlusterFS(所有node節點上操作)
#將gfsrepo 軟體上傳到/opt目錄下cd /etc/yum.repos.d/ mkdir repo.bak mv *.repo repo.bak vim glfs.repo [glfs] name=glfs baseurl=file:///opt/gfsrepo gpgcheck=0 enabled=1 yum clean all && yum makecache #yum -y install centos-release-gluster #如採用官方 YUM 源安裝,可以直接指向網際網路倉庫 yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma systemctl start glusterd.service systemctl enable glusterd.service systemctl status glusterd.service
3.2 新增節點到儲存信任池中(在 node1 節點上操作)
#只要在一臺Node節點上新增其它節點即可 gluster peer probe node1 gluster peer probe node2 gluster peer probe node3 gluster peer probe node4 #在每個Node節點上檢視群集狀態 gluster peer status
3.3 建立卷
#根據規劃建立如下卷: 卷名稱 卷型別 Brick dis-volume 分散式卷 node1(/data/sdb1)、node2(/data/sdb1) stripe-volume 條帶卷 node1(/data/sdc1)、node2(/data/sdc1) rep-volume 複製卷 node3(/data/sdb1)、node4(/data/sdb1) dis-stripe 分散式條帶卷 node1(/data/sdd1)、node2(/data/sdd1)、node3(/data/sdd1)、node4(/data/sdd1) dis-rep 分散式複製卷 node1(/data/sde1)、node2(/data/sde1)、node3(/data/sde1)、node4(/data/sde1)1.建立分散式卷
#建立分散式卷,沒有指定型別,預設建立的是分散式卷 gluster volume create dis-volume node1:/data/sdb1 node2:/data/sdb1 force #檢視卷列表 gluster volume list #啟動新建分散式卷 gluster volume start dis-volume #檢視建立分散式卷資訊 gluster volume info dis-volume
2.建立條帶卷
#指定型別為 stripe,數值為 2,且後面跟了 2 個 Brick Server,所以建立的是條帶卷 gluster volume create stripe-volume stripe 2 node1:/data/sdc1 node2:/data/sdc1 force gluster volume start stripe-volume gluster volume info stripe-volume
3.建立複製卷
#指定型別為 replica,數值為 2,且後面跟了 2 個 Brick Server,所以建立的是複製卷 gluster volume create rep-volume replica 2 node3:/data/sdb1 node4:/data/sdb1 force gluster volume start rep-volume gluster volume info rep-volume
4.建立分散式條帶卷
#指定型別為 stripe,數值為 2,而且後面跟了 4 個 Brick Server,是 2 的兩倍,所以建立的是分散式條帶卷 gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force gluster volume start dis-stripe gluster volume info dis-stripe
5.建立分散式複製卷
指定型別為 replica,數值為 2,而且後面跟了 4 個 Brick Server,是 2 的兩倍,所以建立的是分散式複製卷 gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force gluster volume start dis-rep gluster volume info dis-rep #檢視當前所有卷的列表 gluster volume list
----- 部署 Gluster 客戶端 -----
1.安裝客戶端軟體#將gfsrepo 軟體上傳到/opt目下 cd /etc/yum.repos.d/ mkdir repo.bak mv *.repo repo.bak vim glfs.repo [glfs] name=glfs baseurl=file:///opt/gfsrepo gpgcheck=0 enabled=1 yum clean all && yum makecache yum -y install glusterfs glusterfs-fuse
2.建立掛載目錄
mkdir -p /test/{dis,stripe,rep,dis_stripe,dis_rep} ls /test
3.配置 /etc/hosts 檔案
echo "192.168.200.13 node1" >> /etc/hosts echo "192.168.200.14 node2" >> /etc/hosts echo "192.168.200.15 node3" >> /etc/hosts echo "192.168.200.16 node4" >> /etc/hosts
4.掛載 Gluster 檔案系統
#臨時掛載 mount.glusterfs node1:dis-volume /test/dis mount.glusterfs node1:stripe-volume /test/stripe mount.glusterfs node1:rep-volume /test/rep mount.glusterfs node1:dis-stripe /test/dis_stripe mount.glusterfs node1:dis-rep /test/dis_rep df -Th #永久掛載 vim /etc/fstab node1:dis-volume /test/dis glusterfs defaults,_netdev 0 0 node1:stripe-volume /test/stripe glusterfs defaults,_netdev 0 0 node1:rep-volume /test/rep glusterfs defaults,_netdev 0 0 node1:dis-stripe /test/dis_stripe glusterfs defaults,_netdev 0 0 node1:dis-rep /test/dis_rep glusterfs defaults,_netdev 0 0
----- 測試 Gluster 檔案系統 -----
1.卷中寫入檔案,客戶端操作cd /opt dd if=/dev/zero of=/opt/demo1.log bs=1M count=40 dd if=/dev/zero of=/opt/demo2.log bs=1M count=40 dd if=/dev/zero of=/opt/demo3.log bs=1M count=40 dd if=/dev/zero of=/opt/demo4.log bs=1M count=40 dd if=/dev/zero of=/opt/demo5.log bs=1M count=40cp /opt/demo* /test/dis cp /opt/demo* /test/stripe/ cp /opt/demo* /test/rep/ cp /opt/demo* /test/dis_stripe/ cp /opt/demo* /test/dis_rep/
ls -lh /opt
2.檢視檔案分佈
#檢視分散式檔案分佈 [root@node1 ~]# ls -lh /data/sdb1 #資料沒有被分片 總用量 160M -rw-r--r-- 2 root root 40M 12月 18 14:50 demo1.log -rw-r--r-- 2 root root 40M 12月 18 14:50 demo2.log -rw-r--r-- 2 root root 40M 12月 18 14:50 demo3.log -rw-r--r-- 2 root root 40M 12月 18 14:50 demo4.log [root@node2 ~]# ll -h /data/sdb1 總用量 40M -rw-r--r-- 2 root root 40M 12月 18 14:50 demo5.log #檢視條帶卷檔案分佈 [root@node1 ~]# ls -lh /data/sdc1 #資料被分片50% 沒副本 沒冗餘 總用量 101M -rw-r--r-- 2 root root 20M 12月 18 14:51 demo1.log -rw-r--r-- 2 root root 20M 12月 18 14:51 demo2.log -rw-r--r-- 2 root root 20M 12月 18 14:51 demo3.log -rw-r--r-- 2 root root 20M 12月 18 14:51 demo4.log -rw-r--r-- 2 root root 20M 12月 18 14:51 demo5.log [root@node2 ~]# ll -h /data/sdc1 #資料被分片50% 沒副本 沒冗餘 總用量 101M -rw-r--r-- 2 root root 20M 12月 18 14:51 demo1.log -rw-r--r-- 2 root root 20M 12月 18 14:51 demo2.log -rw-r--r-- 2 root root 20M 12月 18 14:51 demo3.log -rw-r--r-- 2 root root 20M 12月 18 14:51 demo4.log -rw-r--r-- 2 root root 20M 12月 18 14:51 demo5.log #檢視複製卷分佈 [root@node3 ~]# ll -h /data/sdb1 #資料沒有被分片 有副本 有冗餘 總用量 201M -rw-r--r-- 2 root root 40M 12月 18 14:51 demo1.log -rw-r--r-- 2 root root 40M 12月 18 14:51 demo2.log -rw-r--r-- 2 root root 40M 12月 18 14:51 demo3.log -rw-r--r-- 2 root root 40M 12月 18 14:51 demo4.log -rw-r--r-- 2 root root 40M 12月 18 14:51 demo5.log [root@node4 ~]# ll -h /data/sdb1 #資料沒有被分片 有副本 有冗餘 總用量 201M -rw-r--r-- 2 root root 40M 12月 18 14:51 demo1.log -rw-r--r-- 2 root root 40M 12月 18 14:51 demo2.log -rw-r--r-- 2 root root 40M 12月 18 14:51 demo3.log -rw-r--r-- 2 root root 40M 12月 18 14:51 demo4.log -rw-r--r-- 2 root root 40M 12月 18 14:51 demo5.log #檢視分散式條帶卷分佈 [root@node1 ~]# ll -h /data/sdd1 #資料被分片50% 沒副本 沒冗餘 總用量 81M -rw-r--r-- 2 root root 20M 12月 18 14:51 demo1.log -rw-r--r-- 2 root root 20M 12月 18 14:51 demo2.log -rw-r--r-- 2 root root 20M 12月 18 14:51 demo3.log -rw-r--r-- 2 root root 20M 12月 18 14:51 demo4.log [root@node2 ~]# ll -h /data/sdd1 總用量 81M -rw-r--r-- 2 root root 20M 12月 18 14:51 demo1.log -rw-r--r-- 2 root root 20M 12月 18 14:51 demo2.log -rw-r--r-- 2 root root 20M 12月 18 14:51 demo3.log -rw-r--r-- 2 root root 20M 12月 18 14:51 demo4.log [root@node3 ~]# ll -h /data/sdd1 總用量 21M -rw-r--r-- 2 root root 20M 12月 18 14:51 demo5.log [root@node4 ~]# ll -h /data/sdd1 總用量 21M -rw-r--r-- 2 root root 20M 12月 18 14:51 demo5.log #檢視分散式複製卷分佈 #資料沒有被分片 有副本 有冗餘 [root@node1 ~]# ll -h /data/sde1 總用量 161M -rw-r--r-- 2 root root 40M 12月 18 14:52 demo1.log -rw-r--r-- 2 root root 40M 12月 18 14:52 demo2.log -rw-r--r-- 2 root root 40M 12月 18 14:52 demo3.log -rw-r--r-- 2 root root 40M 12月 18 14:52 demo4.log [root@node2 ~]# ll -h /data/sde1 總用量 161M -rw-r--r-- 2 root root 40M 12月 18 14:52 demo1.log -rw-r--r-- 2 root root 40M 12月 18 14:52 demo2.log -rw-r--r-- 2 root root 40M 12月 18 14:52 demo3.log -rw-r--r-- 2 root root 40M 12月 18 14:52 demo4.log [root@node3 ~]# ll -h /data/sde1 總用量 41M -rw-r--r-- 2 root root 40M 12月 18 14:52 demo5.log [root@node3 ~]# [root@node4 ~]# ll -h /data/sde1 總用量 41M -rw-r--r-- 2 root root 40M 12月 18 14:52 demo5.log
----- 破壞性測試 -----
#掛起 node2 節點或者關閉glusterd服務來模擬故障 [root@node2 ~]# systemctl stop glusterd.service #在客戶端上檢視檔案是否正常 #分散式卷資料檢視 [root@localhost test]# ll /test/dis/ #在客戶機上發現少了demo5.log檔案,這個是在node2上的 總用量 163840 -rw-r--r-- 1 root root 41943040 12月 18 14:50 demo1.log -rw-r--r-- 1 root root 41943040 12月 18 14:50 demo2.log -rw-r--r-- 1 root root 41943040 12月 18 14:50 demo3.log -rw-r--r-- 1 root root 41943040 12月 18 14:50 demo4.log #條帶卷 [root@localhost test]# cd /test/stripe/ #無法訪問,條帶卷不具備冗餘性 [root@localhost stripe]# ll 總用量 0 #分散式條帶卷 [root@localhost test]# ll /test/dis_stripe/ #無法訪問,分佈條帶卷不具備冗餘性 總用量 40960 -rw-r--r-- 1 root root 41943040 12月 18 14:51 demo5.log #分散式複製卷 [root@localhost test]# ll /test/dis_rep/ #可以訪問,分散式複製卷具備冗餘性 總用量 204800 -rw-r--r-- 1 root root 41943040 12月 18 14:52 demo1.log -rw-r--r-- 1 root root 41943040 12月 18 14:52 demo2.log -rw-r--r-- 1 root root 41943040 12月 18 14:52 demo3.log -rw-r--r-- 1 root root 41943040 12月 18 14:52 demo4.log -rw-r--r-- 1 root root 41943040 12月 18 14:52 demo5.log #掛起 node2 和 node4 節點,在客戶端上檢視檔案是否正常 #測試複製卷是否正常 [root@localhost rep]# ls -l /test/rep/ #在客戶機上測試正常 資料有 總用量 204800 -rw-r--r-- 1 root root 41943040 12月 18 14:51 demo1.log -rw-r--r-- 1 root root 41943040 12月 18 14:51 demo2.log -rw-r--r-- 1 root root 41943040 12月 18 14:51 demo3.log -rw-r--r-- 1 root root 41943040 12月 18 14:51 demo4.log -rw-r--r-- 1 root root 41943040 12月 18 14:51 demo5.log #測試分散式條卷是否正常 [root@localhost dis_stripe]# ll /test/dis_stripe/ #在客戶機上測試沒有資料 總用量 0 #測試分散式複製卷是否正常 [root@localhost dis_rep]# ll /test/dis_rep/ #在客戶機上測試正常 有資料 總用量 204800 -rw-r--r-- 1 root root 41943040 12月 18 14:52 demo1.log -rw-r--r-- 1 root root 41943040 12月 18 14:52 demo2.log -rw-r--r-- 1 root root 41943040 12月 18 14:52 demo3.log -rw-r--r-- 1 root root 41943040 12月 18 14:52 demo4.log -rw-r--r-- 1 root root 41943040 12月 18 14:52 demo5.log
##### 上述實驗測試,凡是帶複製資料,相比而言,資料比較安全 #####
#其他的維護命令:
1.檢視GlusterFS卷 gluster volume list 2.檢視所有卷的資訊 gluster volume info 3.檢視所有卷的狀態 gluster volume status 4.停止一個卷 gluster volume stop dis-stripe 5.刪除一個卷,注意:刪除卷時,需要先停止卷,且信任池中不能有主機處於宕機狀態,否則刪除不成功 gluster volume delete dis-stripe 6.設定卷的訪問控制 #僅拒絕 gluster volume set dis-rep auth.deny 192.168.80.100 #僅允許 gluster volume set dis-rep auth.allow 192.168.80.* #設定192.168.80.0網段的所有IP地址都能訪問dis-rep卷(分散式複製卷)