GFS分散式檔案系統、結合實驗分析各種儲存卷的特點。深入刨析分散式儲存的方式。

wulimingde發表於2020-10-30

一、GFS(GlusterFS)概述

1、GFS簡介

  • 開源的分散式檔案系統
  • 由儲存伺服器、客戶端、NFS或Samba儲存閘道器組成
  • 無後設資料伺服器(管理的節點伺服器被隱藏)
    2、GFS的特點
  • 擴充套件性和高效能
  • 高可用性
  • 全域性統一名稱空間
  • 彈性卷管理
  • 基於標準協議(RDMA:(特點去中心化)或TCP/IP)
  • 模組化、堆疊式的架構
  • 通過對模組的組合,實現複雜的功能

3、GFS術語

  • Brick:儲存節點、儲存塊
  • Volume:儲存卷
  • FUSE:使用者空間檔案系統
  • VFS:虛擬的檔案系統
  • Glusterd:叢集

4、GFS用到的演算法
彈性HASH演算法

  • 通過HASH演算法得到一個32位的整數
  • 劃分為N個連續的子空間,每個空間對應一個Brick彈性

HASH演算法的優點

  • 保證資料平均分佈在每一個Brick中
  • 解決了對後設資料伺服器的依賴,進而解決了單點故障以及訪問瓶頸

二、GlusterFS的卷型別分

1、布式卷

分散式卷

  • 沒有對檔案進行分塊處理
  • 通過擴充套件檔案屬性儲存HASH值
  • 支援的底層檔案系統有EXT3、EXT4、ZFS、XFS等

分散式卷的特點

  • 檔案分佈在不同的伺服器,不具備冗餘性
  • 更容易、廉價地、擴充套件卷的大小
  • 單點故障會造成資料丟失
  • 依賴底層的資料保護

在這裡插入圖片描述

2、條帶卷

條帶卷

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

條帶卷特點

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

在這裡插入圖片描述

3、複製卷

複製卷

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

複製卷特點

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

4、分散式條帶卷

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

在這裡插入圖片描述

5、分散式複製卷

  • 兼顧分散式卷和複製卷的功能
  • 用於需要冗餘的情況
    在這裡插入圖片描述

三、例項搭建GFS實驗

搭建GFS分散式檔案系統,掌握建立各種儲存卷的方法,建立完成後通過寫入和破壞檔案測試各種卷的儲存方式。

1、實驗規劃圖

在這裡插入圖片描述

2、實驗詳細配置過程

1)同步所有儲存伺服器的時間、關閉selinux、關閉防火牆
[root@localhost ~]#   ntpdate ntp1.aliyum.com  //同步阿里雲的時鐘伺服器
[root@localhost ~]# systemctl stop firewalld      //關閉防火牆
[root@localhost ~]# systemctl disabled firewalld    //開機不自動啟動
[root@localhost ~]# vi /etc/selinux/config //編輯核心防護的配置檔案
......
SELINUX=disabled     //改為disabled,開機不自啟
......
[root@localhost ~]# setenforce 0     //關閉核心防護
2) 配置所有儲存伺服器的主機名和/etc/hosts檔案

[root@wu ~]# hostnamectl set-hostname nodo1、nodo2、nodo3、nodo4
[root@nodo1 ~]# vim /etc/hosts
192.168.10.6 nodo1
192.168.10.7 nodo2
192.168.10.8 nodo3
192.168.10.9 nodo4

3)建立、格式化、掛載所有儲存伺服器新增的4塊磁碟

這裡使用指令碼建立:點選前往指令碼

[root@localhost ~]# df -Th       
檔案系統                型別      容量  已用  可用 已用% 掛載點
/dev/sdb1               xfs        20G   33M   20G    1% /data/sdb1
/dev/sdc1               xfs        20G   33M   20G    1% /data/sdc1
/dev/sdd1               xfs        20G   33M   20G    1% /data/sdd1
/dev/sde1               xfs        20G   33M   20G    1% /data/sde1
4)所有伺服器安裝GFS中glusterfs管理工具的yum安裝包源(乾貨)

虛擬機器自帶的線網源安裝的包不能使用,所以得自己配置yum源。
下載連結:https://pan.baidu.com/s/1S8QfAmaJhil0ZWAMek0lUA 提取碼:tiqu
方法一
直接將下載包上傳到伺服器中
方法二
使用共享目錄的方式掛載到服務其中
掛載方式:點選前往
可能會遇到的報錯:點選前往
配置glusterfs工具的yum安裝源

[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# mkdir wu
[root@localhost yum.repos.d]# mv C* wu
[root@localhost yum.repos.d]# vim gfs.repo
[GFS]
name=gfs
baseurl=file:///abc/gfsrepo
gpgcheck=0
enabled=1
[root@localhost yum.repos.d]# yum clean all
[root@localhost yum.repos.d]# yum list
[root@localhost ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
[root@localhost ~]# systemctl start glusterd.service
[root@localhost ~]# systemctl enable glusterd.service
5)新增儲存信任池
  • 新增入儲存信任池只要在一臺主機上新增其他節點即可
[root@node1 ~]# gluster peer probe node2
peer probe: success. 
[root@node1 ~]# gluster peer probe node3
peer probe: success. 
[root@node1 ~]# gluster peer probe node4
peer probe: success. 
[root@node1 ~]# gluster peer status
Number of Peers: 3
Hostname: node2
Uuid: e1b534f2-90e7-413c-8d20-d24e1b8d81a2
State: Peer in Cluster (Connected)
Hostname: node3
Uuid: e156ca03-c0cb-495b-84d9-bbaa8366433a
State: Peer in Cluster (Connected)
Hostname: node4
Uuid: b59b9d13-27fe-443c-ad04-4cbee1b4114e
State: Peer in Cluster (Connected)
6)建立各種卷組
建立分佈卷
[root@node1 ~]# gluster volume create dis-volume node1:/data/sdb1 node2:/data/sdb1 force   //建立分散式卷
volume create: dis-volume: success: please start the volume to access data
[root@node1 ~]# gluster volume start dis-volume   //啟動分散式卷
volume start: dis-volume: success
[root@node1 ~]# gluster volume info dis-volume  //檢視分散式卷的資訊
 Volume Name: dis-volume
Type: Distribute
Volume ID: 2c319349-6f00-42b0-b1a3-df0ce39b274e
Status: Started      //表示啟動成功
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdb1
Brick2: node2:/data/sdb1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on

建立條帶卷
[root@node1 data]# gluster volume create stripe-volume stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
volume create: stripe-volume: success: please start the volume to access data
[root@node1 data]# gluster volume start stripe-volume 
volume start: stripe-volume: success

建立複製卷
[root@node1 data]# gluster volume create rep-volume replica 2 node3:/data/sdb1 node4:/data/sdb1 force
[root@node1 data]# gluster volume start rep-volume 
volume start: rep-volume: success

建立分散式條帶卷
[root@node1 data]# gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd3 node4:/data/node4 force
volume create: dis-stripe: success: please start the volume to access data
[root@node1 data]# gluster volume start dis-stripe 
volume start: dis-stripe: success

建立分散式複製卷
[root@node1 data]# gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force
volume create: dis-rep: success: please start the volume to access data
[root@node1 data]# gluster volume start dis-rep 
volume start: dis-rep: success

常用的管理檢視分散式卷組的命令
gluster volume  list       //檢視建立了那些卷組
gluster volume info   [卷組名]    //檢視所有卷組或固定的卷組資訊
gluster volume stauts|start|stop  卷組名   //調整卷組的狀態
gluster volume delete  卷組名    //刪除某一個卷組
gluster volume  vreate  卷組型別-卷組名  新增的磁碟掛載點 force   //建立一個卷組

3、GFS管理節點配置

[root@localhost ~]# systemctl stop firewalld      //關閉防火牆
[root@localhost ~]# systemctl disabled firewalld    //開機不自動啟動
[root@localhost ~]# vi /etc/selinux/config //編輯核心防護的配置檔案
......
SELINUX=disabled     //改為disabled,開機不自啟
......
[root@localhost ~]# setenforce 0     //關閉核心防護
//配置所有儲存伺服器的主機名和/etc/hosts檔案
[root@nodo1 ~]# vim /etc/hosts
192.168.10.6 nodo1
192.168.10.7 nodo2
192.168.10.8 nodo3
192.168.10.9 nodo4
//和上面一樣配置glusterfs工具的yum源,並安裝啟動
[root@localhost ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
[root@localhost ~]# systemctl start glusterd.service
[root@localhost ~]# systemctl enable glusterd.service
//將儲存伺服器中建立的各種卷組存掛載到本地使用mount.glusterfs掛載
//建立掛載點並掛載
[root@localhost ~]# mkdir -p /test/dis-volume/ /test/dis-stripe/ /test/dis-rep/ /test/stripe-volume/ /test/rep-volume/
[root@localhost ~]#  mount.glusterfs node1:dis-volume /test/dis-volume/
[root@localhost ~]#  mount.glusterfs node2:rep-volume /test/rep-volume/
[root@localhost ~]#  mount.glusterfs node3:stripe-volume /test/stripe-volume/
[root@localhost ~]#  mount.glusterfs node4:dis-stripe /test/dis-stripe/
[root@localhost ~]#  mount.glusterfs node1:dis-rep /test/dis-rep/
[root@localhost ~]# df -Th   
檔案系統                      型別        容量   已用   可用  已用%   掛載點
node1:dis-volume        fuse.glusterfs   40G   65M   40G    1% /test/dis-volume
node1:dis-rep           fuse.glusterfs   40G   65M   40G    1% /test/dis-rep
node1:dis-stripe        fuse.glusterfs   80G  130M   80G    1% /test/dis-stripe
node1:stripe-volume     fuse.glusterfs   40G   65M   40G    1% /test/stripe-volume
node1:rep-volume        fuse.glusterfs   20G   33M   20G    1% /test/rep-volume

四、在掛載點中模擬寫入資料分析分散式儲存各種卷的儲存方式

1、資料寫入

//模擬寫入資料
dd if=/dev/zero of=/txt1 bs=1M count=40
dd if=/dev/zero of=/txt2 bs=1M count=40
dd if=/dev/zero of=/txt3 bs=1M count=40
dd if=/dev/zero of=/txt4 bs=1M count=40
dd if=/dev/zero of=/txt5 bs=1M count=40
//資料複製到指定的掛載目錄下
[root@localhost /]# cp txt* /test/dis-volume/
[root@localhost /]# cp txt* /test/dis-rep/
[root@localhost /]# cp txt* /test/dis-stripe/
[root@localhost /]# cp txt* /test/stripe-volume/
[root@localhost /]# cp txt* /test/rep-volume/

2、在儲存節點檢視各種卷存放資料的方式

儲存方式剛好與上面圖對應

1、分散式卷存放資料的方式
[root@node1 data]# ll -h sdb1                  [root@node2 data]# ll -h sdb1
總用量 120M                                      總用量 80M
-rw-r--r-- 2 root root 40M 10月 30 22:44 txt1  -rw-r--r-- 2 root root 40M 10月 30 22:44 txt2
-rw-r--r-- 2 root root 40M 10月 30 22:44 txt4  -rw-r--r-- 2 root root 40M 10月 30 22:44 txt3
-rw-r--r-- 2 root root 40M 10月 30 22:44 txt5


 2、條帶卷存放資料的方式
[root@node1 data]# ll -h sdc1                   [root@node2 data]# ll -h sdc1
總用量 100M                                      總用量 100M
-rw-r--r-- 2 root root 20M 10月 30 22:45 txt1  -rw-r--r-- 2 root root 20M 10月 30 22:45 txt1
-rw-r--r-- 2 root root 20M 10月 30 22:45 txt2  -rw-r--r-- 2 root root 20M 10月 30 22:45 txt2
-rw-r--r-- 2 root root 20M 10月 30 22:45 txt3  -rw-r--r-- 2 root root 20M 10月 30 22:45 txt3
-rw-r--r-- 2 root root 20M 10月 30 22:45 txt4  -rw-r--r-- 2 root root 20M 10月 30 22:45 txt4
-rw-r--r-- 2 root root 20M 10月 30 22:45 txt5  -rw-r--r-- 2 root root 20M 10月 30 22:45 txt5


3、複製式卷存放資料的方式
[root@node3 data]# ll -h sdb1                  [root@node4 data]# ll -h sdb1 
總用量 200M                                     總用量 200M
-rw-r--r-- 2 root root 40M 10月 30 22:45 txt1  -rw-r--r-- 2 root root 40M 10月 30 22:45 txt1
-rw-r--r-- 2 root root 40M 10月 30 22:45 txt2  -rw-r--r-- 2 root root 40M 10月 30 22:45 txt2
-rw-r--r-- 2 root root 40M 10月 30 22:45 txt3  -rw-r--r-- 2 root root 40M 10月 30 22:45 txt3
-rw-r--r-- 2 root root 40M 10月 30 22:45 txt4  -rw-r--r-- 2 root root 40M 10月 30 22:45 txt4
-rw-r--r-- 2 root root 40M 10月 30 22:45 txt5  -rw-r--r-- 2 root root 40M 10月 30 22:45 txt5


4、分散式條帶卷存放資料的方式
[root@node1 data]# ll -h sdd1                  [root@node2 data]# ll -h sdd1  
總用量 60M                                       總用量 60M
-rw-r--r-- 2 root root 20M 10月 30 22:45 txt1  -rw-r--r-- 2 root root 20M 10月 30 22:45 txt1
-rw-r--r-- 2 root root 20M 10月 30 22:45 txt4  -rw-r--r-- 2 root root 20M 10月 30 22:45 txt4
-rw-r--r-- 2 root root 20M 10月 30 22:45 txt5  -rw-r--r-- 2 root root 20M 10月 30 22:45 txt5
[root@node3 data]# ll -h sdd1                  [root@node4 data]# ll -h sdd1
總用量 40M                                      總用量 40M
-rw-r--r-- 2 root root 20M 10月 30 22:45 txt2  -rw-r--r-- 2 root root 20M 10月 30 22:45 txt2
-rw-r--r-- 2 root root 20M 10月 30 22:45 txt3  -rw-r--r-- 2 root root 20M 10月 30 22:45 txt3


5、分散式複製卷存放資料的方式
[root@node1 data]# ll -h sde1                  [root@node2 data]# ll -h sde1
總用量 120M                                     總用量 120M
-rw-r--r-- 2 root root 40M 10月 30 22:44 txt1  -rw-r--r-- 2 root root 40M 10月 30 22:44 txt1
-rw-r--r-- 2 root root 40M 10月 30 22:44 txt4  -rw-r--r-- 2 root root 40M 10月 30 22:44 txt4
-rw-r--r-- 2 root root 40M 10月 30 22:44 txt5  -rw-r--r-- 2 root root 40M 10月 30 22:44 txt5
[root@node3 data]# ll -h sde1                  [root@node4 data]# ll -h sde1 
總用量 80M                                      總用量 80M 
-rw-r--r-- 2 root root 40M 10月 30 22:44 txt2  -rw-r--r-- 2 root root 40M 10月 30 22:44 txt2
-rw-r--r-- 2 root root 40M 10月 30 22:44 txt3  -rw-r--r-- 2 root root 40M 10月 30 22:44 txt3

相關文章