GFS分散式檔案系統部署解析

weixin_50345481發表於2021-01-04


前言

GlusterFS作為一個開源的分散式檔案系統,不同於之前的服務系統,gfs具有模組化, 擴充套件性和高效能等優點,瞭解並掌握該項技術,有利於技術能力的全面發展與提升。


一 GlusterFS概述

1.1 GlusterFS簡介

開源的分散式檔案系統
由儲存伺服器,客戶端(預設GFS掛載服務,RDMA協議)以及NFS/Samba(使用前需開啟對應協議)儲存閘道器組成
無後設資料伺服器(無資料元屬性資訊)

1.2 GlusterFS特點

  擴充套件性和高效能
  高可用性  
  全域性統一名稱空間
  彈性卷管理
  基於標準協議

1.3 GlusterFS術語

Brick(儲存塊)(磚):指可信主機池中由主機提供的用於物理儲存的專用分割槽(磁碟分割槽),是GlusterFS中的基本儲存單元,同時也是可信儲存池中伺服器上對外提供的儲存目錄。

Volume(邏輯卷):一個邏輯卷是一組Brick的集合。卷是資料儲存的邏輯裝置,類似於LVM中的邏輯卷。大部分Gluster管理操作是在捲上進行的

FUSE(Filesystem inUserspace):是一個核心模組,允許使用者建立自己的檔案系統,無須修改核心程式碼。

VFS:核心空間對使用者空間提供的訪問磁碟的介面。(客戶機訪問伺服器的入口介面)

Glusterd(後臺管理程式):在儲存群集中每個節點上都要執行。

1.4 模組化堆疊式架構

  模組化,堆疊式的架構
  通過對模組的組合,實現複雜的功能

二 GlusterFS工作原理

2.1 GlusterFS工作流程:

1.客戶端或應用程式通過GlusterFS的掛載點(VFS)訪問資料

2.linux系統核心通過VFS API收到請求並處理

3.VFS將資料遞交給FUSE核心檔案系統,fuse檔案系統則是將資料通過/dev/fuse裝置檔案遞交給了GlusterFS client(客戶機)

4.GlusterFS client收到資料後,client根據配置檔案的配置對資料進行處理

5.通過網路將資料傳遞至遠端的GlusterFS server(伺服器),並且將資料寫入到伺服器的儲存裝置上。

2.2 彈性HASH演算法

1.通過HASH演算法得到一個32位的整數

2.劃分為N個連續的子空間,每個空間對應一個Brick

3.彈性HASH演算法的優點:
    保證資料平均分佈在每一個Brick中
    解決了對後設資料伺服器的依賴,進而解決了單點故障以及訪問瓶頸
    
四個Brick節點的GlusterFS卷,平均分配2的32次方的區間的範圍空間
訪問檔案時,通過計算該檔案的HASH值(key值),從而對應到Brick儲存空間

2.3 GlusterFS的卷型別

分散式卷
條帶卷
複製卷
分散式條帶卷
分散式複製卷
條帶複製卷
分散式條帶複製卷

2.3.1 分散式卷

2.3.1.1 分散式卷(異地儲存)

  沒有對檔案進行分塊處理
  通過擴充套件檔案屬性儲存HASH值
  支援的底層檔案系統有EXT2,EXT4,ZFS,XFS等
沒有分塊處理,檔案只能存在一個server中,效率不提升

在這裡插入圖片描述

2.3.1.2 分散式卷的特點

檔案分佈在不同的伺服器不具備冗餘性(備份)
更容易和廉價地擴充套件卷的大小
單點故障會造成資料丟失
依賴底層的資料保護(需要進行額外的資料備份)

2.3.1.3 建立分散式卷

建立一個名為dis-volume(卷名稱,自定義)的分散式卷,檔案將根據HASH分佈在server1:/dir1、server2:/dir2和server3:/dir3中

#gluster volume create dis-volume server1:/dir1 server2:/dir2 server3:/dir3
 server1:/dir1:主機名:/掛載點 

2.3.2 條帶卷

2.3.2.1 條帶卷

根據偏移量將檔案分成N塊(N個條帶節點),輪詢的儲存在每個Brick Server節點
儲存大檔案時,效能尤為突出
不具備冗餘性,類似Raid0

從多個server中同時讀取檔案,效率提升

在這裡插入圖片描述

2.3.2.2 特點

    資料被分割成更小塊分佈到塊伺服器群中的不同條帶區
    分佈減少了負載且更小的檔案加速了存取的速度
    沒有資料冗餘

2.3.2.3 建立條帶卷

建立了一個名為Stripe-volume的條帶卷,檔案將被分塊輪詢的儲存在Server1:/dir1和Server2:/dir2兩個Brick中 
# gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2                                          磁碟數         協議

2.3.3 複製卷

2.3.3.1 複製卷(類似Raid1)

  同一檔案儲存一份或多分副本
  因為要儲存副本,所以磁碟利用率較低
  若多個節點上的儲存空間不一致,將按照木桶效應取最低節點的容量作為該卷的總容量

在這裡插入圖片描述

2.3.3.2 特點

   卷中所有的伺服器均儲存一個完整的副本
   卷的副本數量可由客戶建立的時候決定
   至少有兩個塊伺服器或更多伺服器
   具備冗餘性

2.3.3.3 建立複製卷

建立名為rep-volume的複製卷,檔案將同時儲存兩個副本,分別
在Server1 :/dir1和Server2:/dir2兩個Brick中

# gluster volume create rep-volume replica 2transport tcp server1:/dir1 server2:/dir2

2.3.4 分散式條帶卷

2.3.4.1 分散式條帶卷(先條帶,後分布)

   兼顧分散式卷和條帶卷的功能
   主要用於大檔案訪問處理
   至少最少需要4臺伺服器

在這裡插入圖片描述

2.3.4.2 建立分散式條帶卷

建立了名為dis-stripe的分散式條帶卷,配置分散式的條帶卷時,卷中Brick所包含的儲存伺服器數必須是條帶數的倍數(>=2倍)

# gluster volume create dis-stripe stripe 2 transport tcp server1:/dir1server2:/dir2 server3:/dir3 serve:4:/dir4

2.3.5 分散式複製卷

2.3.5.1 分散式複製卷

兼顧分散式卷和複製卷的功能
用於需要冗餘的情況

在這裡插入圖片描述

2.3.5.2 建立分散式複製卷

建立名為dis-rep的分散式條帶卷,配置分散式複製卷時,卷中Brick所包含的儲存伺服器數必須是複製卷數的倍數(>=2)

# gluster volume create dis-rep replica 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4

2.3.6 總結:

分散式:儲存brick不在一個區域範圍,某一個區域內brick壞了,不影響另一個區域的brick。
條帶式:多個brick形成一個整體,這個整體內的任意一塊brick壞了,整個條帶卷不可用。
複製卷:多個brick形成一個整體,這個整體內的每塊brick都有完整的副本,由此,複製卷內任意一塊brick壞了,不影響複製卷使用。

三 GlusterFS部署

3.1 群集環境

卷型別

卷名稱            卷型別          空間大小           Brick
dis-volume       分散式卷          12G    node1(/e6)、node2(/e6)
stripe-volume    條帶卷            10G    node1(/d5)、node2(/d5)
rep-volume       複製卷            5G     node3(/d5)、node4(/d5)
dis-stripe       分散式條帶卷       12G    node1(/b3)、node2(/b3)       
                                         node3(/b3)、node4(/b3)
dis-rep          分散式複製卷       8G     node1(/c4)、node2(/c4)
                                         node3(/c4)、node4(/c4)

3.2 部署準備

重新命名:

[root@server1 ~]# hostnamectl set-hostname node1
[root@server1 ~]# bash
[root@server2 ~]# hostnamectl set-hostname node2
[root@server2 ~]# bash
[root@client1 ~]# hostnamectl set-hostname node3
[root@client1 ~]# bash
[root@server1 ~]# hostnamectl set-hostname node4
[root@server1 ~]# bash
[root@localhost ~]# hostnamectl set-hostname client
[root@localhost ~]# bash

裝置:

node1:20.0.0.10
node2:20.0.0.11
node3:20.0.0.12
node4:20.0.0.13
client:20.0.0.14

3.3 部署流程:

在node1上

[root@node1 ~]# vi /etc/hosts  對映
新增
20.0.0.10   node1
20.0.0.11   node2
20.0.0.12   node3
20.0.0.13   node4

在這裡插入圖片描述

[root@node1 ~]# ssh-keygen -t rsa  免密登入
[root@node1 ~]# ssh-copy-id 20.0.0.11
[root@node1 ~]# ssh-copy-id 20.0.0.12
[root@node1 ~]# ssh-copy-id 20.0.0.13
[root@node1 ~]# ssh-copy-id 20.0.0.14

在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述
1.拷貝檔案

[root@node1 ~]# scp /etc/hosts root@20.0.0.11:/etc/
[root@node1 ~]# scp /etc/hosts root@20.0.0.12:/etc/
[root@node1 ~]# scp /etc/hosts root@20.0.0.13:/etc/
[root@node1 ~]# scp /etc/hosts root@20.0.0.14:/etc/

在這裡插入圖片描述
2.關閉防火牆
面向所有裝置

[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# setenforce 0
[root@node1 ~]# systemctl disable firewalld
[root@node1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@node1 ~]# grep -v "#" /etc/selinux/config

在這裡插入圖片描述

3.新增gfsrepo軟體包

[root@node1 ~]# cd /etc/yum.repos.d/
[root@node1 yum.repos.d]# vi gfs.repo 建立yum源
[root@node1 yum.repos.d]# cd

新增
[gfs]
name=gfs
baseurl=file:///root/gfsrepo
gpgcheck=0  無驗證
enabled=1   立即啟用

在這裡插入圖片描述

[root@node1 ~]# yum clean all   清除快取
[root@node1 ~]# yum makecache   建立快取

在這裡插入圖片描述

4.在四個節點裝置上安裝軟體

[root@node1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
glusterfs :軟體
glusterfs-server: 服務
glusterfs-fuse :檔案系統
glusterfs-rdma :rdma協議
[root@node1 ~]# systemctl start glusterd.service    重啟服務
[root@node1 ~]# systemctl enable glusterd.service   自啟動服務
[root@node1 ~]# systemctl status glusterd.service   服務狀態

在這裡插入圖片描述

5.時間同步

[root@node1 ~]# vi /etc/resolv.conf 
新增
nameserver 8.8.8.8

[root@node1 ~]# ntpdate ntp1.aliyun.com 與阿里雲時間伺服器同步
[root@node1 ~]# crontab -e  任務計劃
新增
*/30 * * * * /usr/sbin/ntpdate ntp1.ailyun.com
每30分鐘
分鐘 小時 日期 月 星期

[root@node1 ~]# which ntpdate 檢視

在這裡插入圖片描述

6.選擇一個節點作為信任池中的信任端
選擇node1
在node1上

[root@node1 ~]# gluster peer probe node2
[root@node1 ~]# gluster peer probe node3
[root@node1 ~]# gluster peer probe node4
[root@node1 ~]# gluster peer status  檢視信任關係

在這裡插入圖片描述

7.在四個節點裝置上新增四個5G大小的硬碟
後重啟
面向所有裝置
在node1上

[root@node1 ~]# fdisk -l  檢視磁碟資訊

在這裡插入圖片描述
在這裡插入圖片描述
8.格式化

[root@node1 ~]# mkfs.ext4 /dev/sdb 

在這裡插入圖片描述

9.建立掛載點

[root@node1 ~]# mkdir {/b1,/c1,/d1,/e1}
[root@node1 ~]# fdisk -l

在這裡插入圖片描述

10.掛載

[root@node1 ~]# mount /dev/sdb /b1
[root@node1 ~]# mount /dev/sdc /c1
[root@node1 ~]# mount /dev/sdd /d1
[root@node1 ~]# mount /dev/sde /e1
[root@node1 ~]# df -Th  檢視掛載情況

在這裡插入圖片描述

[root@node1 ~]# systemctl start glusterfsd.service   服務啟動
[root@node1 ~]# systemctl status glusterfsd.service  檢視狀態

在這裡插入圖片描述

3.3.1 開始建立卷

1.建立分散式卷
在node1上

[root@node1 ~]# gluster volume create dis-vol node1:/b1 node2:/b1 force
dis-vol :卷名稱
node1:/b1:主機名:/掛載點
[root@node1 ~]# gluster volume info dis-vol  檢視卷的詳細資訊
[root@node1 ~]# gluster volume start dis-vol  啟動開啟卷
[root@node1 ~]# gluster volume status dis-vol   檢視卷狀態

在這裡插入圖片描述
在這裡插入圖片描述

2.建立條帶卷

[root@node1 ~]# gluster volume create stripe-vol stripe 2 node1:/c1 node2:/c1 force
 stripe 2:條帶使用數量2
[root@node1 ~]# gluster volume info stripe-vol 檢視卷的詳細資訊
[root@node1 ~]# gluster volume start stripe-vol  啟動開啟卷
[root@node1 ~]# gluster volume status stripe-vol  檢視卷狀態

在這裡插入圖片描述
在這裡插入圖片描述

3.建立複製卷

[root@node1 ~]# gluster volume create rep-vol replica 2 node3:/b1 node4:/b1 force
[root@node1 ~]# gluster volume info rep-vol 
[root@node1 ~]# gluster volume start rep-vol 
[root@node1 ~]# gluster volume status rep-vol 

在這裡插入圖片描述

在這裡插入圖片描述

4.建立分散式條帶卷

[root@node1 ~]# gluster volume create dis-stripe stripe 2 node1:/d1 node2:/d1 node3:/d1 node4:/d1 force
[root@node1 ~]# gluster volume info dis-stripe 
[root@node1 ~]# gluster volume start dis-stripe 
[root@node1 ~]# gluster volume status dis-stripe 

在這裡插入圖片描述

在這裡插入圖片描述

5.建立分散式複製卷

[root@node1 ~]# gluster volume create dis-replica replica 2 node1:/e1 node2:/e1 node3:/e1 node4:/e1 force
[root@node1 ~]# gluster volume info dis-replica 
[root@node1 ~]# gluster volume start dis-replica 
[root@node1 ~]# gluster volume status dis-replica 

在這裡插入圖片描述
在這裡插入圖片描述

[root@node1 ~]# gluster volume list  檢視建立的卷列表

在這裡插入圖片描述
在客戶機上
安裝

[root@client ~]# yum -y install glusterfs glusterfs-fuse   
                                gfs命令程式 檔案系統
建立掛載點
進行掛載
[root@client ~]# mkdir {/dis,/stripe,/replica,/dis-stripe,/dis-replica}
[root@client ~]# mount.glusterfs node1:dis-vol /dis
[root@client ~]# mount.glusterfs node1:rep-vol /replica
[root@client ~]# mount.glusterfs node1:stripe-vol /stripe
[root@client ~]# mount.glusterfs node1:dis-stripe /dis-stripe
[root@client ~]# mount.glusterfs node1:dis-replica /dis-replica
[root@client ~]# df -Th  檢視掛載情況

在這裡插入圖片描述

3.3.2 進行測試

在客戶機上
檔案複製

[root@client ~]# dd if=/dev/zero of=/demo1.log bs=40M count=1(檔案大小40M)
[root@client ~]# dd if=/dev/zero of=/demo2.log bs=40M count=1
[root@client ~]# dd if=/dev/zero of=/demo3.log bs=40M count=1
[root@client ~]# dd if=/dev/zero of=/demo4.log bs=40M count=1
[root@client ~]# dd if=/dev/zero of=/demo5.log bs=40M count=1
[root@client ~]# ls -lh
[root@client ~]# cd /
[root@client /]# ls -lh  檢視檔案

在這裡插入圖片描述

在這裡插入圖片描述

複製檔案到不同的捲上

[root@client /]# cp demo* /dis
[root@client /]# cp demo* /dis-replica/
[root@client /]# cp demo* /dis-stripe/
[root@client /]# cp demo* /stripe/
[root@client /]# cp demo* /replica/
[root@client /]# cd

在這裡插入圖片描述
1.檢視分散式捲上檔案
發現檔案有5個
因為分散式卷有node1:/b1,node2:/b1

[root@client ~]# cd /dis
[root@client dis]# ls -lh

所以檢視兩個分割槽中檔案情況
在node1上
檔案4個

[root@node1 ~]# cd /b1
[root@node1 b1]# ls -lh

在這裡插入圖片描述
在node2上
只有一個檔案

[root@node2 ~]# cd /b1
[root@node2 b1]# ls -lh

在這裡插入圖片描述

在客戶機上
2.檢視條帶卷
在node1:/c1,node2:/c1

[root@client dis]# cd /stripe/
[root@client stripe]# ls -lh

在這裡插入圖片描述

在node1上
發現所有檔案都有,但檔案大小隻有一半

[root@node1 ~]# cd /c1
[root@node1 c1]# ls -lh

在這裡插入圖片描述

在node2上
顯示與node1一樣

[root@node2 ~]# cd /c1
[root@node2 c1]# ls -lh

在這裡插入圖片描述
在客戶機上
3.檢視複製卷
在node3:/b1,node4:/b1

[root@client stripe]# cd /replica/
[root@client replica]# ls -lh

在這裡插入圖片描述
在node3上
發現所有檔案都有,且檔案大小一樣

[root@node3 ~]# cd /b1
[root@node3 b1]# ls -lh

在這裡插入圖片描述

在node4上
顯示與node3一樣

[root@node4 ~]# cd /b1
[root@node4 b1]# ls -lh

在這裡插入圖片描述

在客戶機上
4.檢視分散式條帶卷
在node1:/d1,node2:/d1,node3:/d1,node4:/d1

[root@client replica]# cd /dis-stripe/
[root@client dis-stripe]# ls -lh

在這裡插入圖片描述

[root@node1 c1]# cd /d1
[root@node1 d1]# ls -lh

在node1上
在node2上
檔案存在1,2,3,4,但大小隻有一半
在這裡插入圖片描述
在這裡插入圖片描述

在node3上
在node4上
檔案存在5,大小一半

在這裡插入圖片描述
在這裡插入圖片描述

在客戶機上
5.檢視分散式複製卷
在node1:/e1,node2:/e1,node3:/e1,node4:/e1

[root@client dis-stripe]# cd /dis-replica/
[root@client dis-replica]# ls -lh

在這裡插入圖片描述

[root@node1 d1]# cd /e1
[root@node1 e1]# ls -lh

在node1上
在node2上
檔案存在1,2,3,4,且大小與原始檔一樣
在這裡插入圖片描述
在這裡插入圖片描述
在node3上
在node4上
檔案存在5,且大小與原始檔一樣
在這裡插入圖片描述
在這裡插入圖片描述

3.3.3 進行破壞測試

關閉node2
檢視情況

在客戶機上
檢視分散式,只有四個檔案,在node2上的5檔案消失

[root@client ~]# cd /dis  
[root@client dis]# ls -lh

檢視條帶卷,無資料

[root@client dis]# cd /stripe/
[root@client stripe]# ls -lh

檢視複製卷,無影響,有備份

[root@client stripe]# cd /replica/
[root@client replica]# ls -lh

檢視分散式條帶卷,node1,2上的1,2,3,4檔案消失只有5檔案

[root@client replica]# cd /dis-stripe/
[root@client dis-stripe]# ls -lh

檢視分散式複製卷,無影響,全有備份

[root@client dis-replica]# ls -lh

在這裡插入圖片描述
在這裡插入圖片描述

3.3.4 刪除卷

先停止,後刪除
在node1上

[root@node1 ~]# gluster volume list  檢視卷列表
[root@node1 ~]# gluster volume stop dis-vol  停止分散式卷
[root@node1 ~]# gluster volume status dis-vol  檢視狀態
[root@node1 ~]# gluster volume delete dis-vol  刪除卷

在這裡插入圖片描述

在客戶機上
檢視,發現分散式卷消失

[root@client ~]# df -Th

在這裡插入圖片描述

3.3.5 訪問控制

拒絕某個使用者訪問某個卷
在node1上

[root@node1 ~]# gluster volume list  檢視卷列表

[root@node1 ~]# gluster volume set rep-vol auth.reject 20.0.0.14
拒絕客戶機訪問複製卷

在這裡插入圖片描述
在客戶機上檢視
複製卷消失

[root@client ~]# df -Th
[root@client ~]# tail -f /var/log/glusterfs/replica.log 檢視日誌

在這裡插入圖片描述


總結

通過以上對gfs工作原理與實際部署操作,可以較為全面,實際的瞭解掌握該項技術能力。

相關文章