GlusterFS概述
開源的分佈式文件系統
由存儲服務器、客戶端以及NFS/Samba存儲網關組成
無元數據服務器(數據傳輸組件RDMA)
GlusterFS特點
擴展性、高性能、高可用性
全局統一命名空間
彈性卷管理---->雲的特性:水平(實例數)、垂直(硬件性能)
ECS(虛擬)、OSS和RDS(裸金屬)
基於標準協議
GlusterFS術語
Brick(節點)
Volume(卷)
FUSE(用戶端交互模塊)
VFS(虛擬化文件系統)
Glusterd(服務)
模塊化堆棧式架構
模塊化、堆棧式的架構
通過對模塊的組合,實現複雜的功能
GlusterFS工作原理
GlusterFS工作流程
彈性HASH算法
通過HASH算法得到一個32位的整數
劃分爲N個連續的子空間,每個空間對應一個Brick
彈性HASH算法的優點:
保證數據平均分佈在每一個Brick中
解決了對元數據服務器的依賴,進而解決了單點故障以及訪問瓶頸
GlusterFS的卷類型
1.分佈式卷(fastdfs和gfs搭建)
沒有對文件進行分塊處理
通過擴展文件屬性保存HASH值
支持的底層文件系統有ext3、ext4、 ZFS、 XFS等
分佈式卷的特點
●文件分佈在不同的服務器,不具備冗餘性
●更容易和廉價地擴展卷的大小
●單點故障會造成數據丟失
●依賴底層的數據保護
2.條帶卷
●根據偏移量將文件分成N塊(N個條帶節點),輪詢的存儲在每個BrickServer節點
●存儲大文件時,性能尤爲突出
●不具備冗餘性,類似Raid0
條帶卷的特點
●數據被分割成更小塊分佈到塊服務器羣中的不同條帶區
●分佈減少了負載且更小的文件加速了存取的速度
●沒有數據冗餘
3. 複製卷
●同一文件保存一份或多分副本
●複製模式因爲要保存副本,所以磁盤利用率較低
●多個節點上的存儲空間不一致, 那麼將按照木桶效應取最低節點的容量
●作爲該卷的總容量
複製卷的特點
●卷中所有的服務器均保存一個完整的副本
●卷的副本數量可由客戶創建的時候決定
●至少由兩個塊服務器或更多服務器
●具備冗餘性
4.分佈式條帶卷
●兼顧分佈式卷和條帶卷的功能
●主要用於大文件訪問處理
●至少最少需要4臺服務器
5.分佈式複製卷
●兼顧分佈式卷和複製卷的功能
●用於需要冗餘的情況下
羣集環境
卷類型
卷名稱 | 卷類型 | 空間大小 | Brick |
---|---|---|---|
dis-volume | 分佈式卷 | 40G | node1(/b1)、node2(/b1) |
stripe-volume | 條帶卷 | 40G | node1(/c1)、node2(/c1) |
rep-volume | 複製卷 | 20G | node3(/b1)、node4(/b1) |
dis-stripe | 分佈式條帶卷 | 40G | node1(/d1)、node2(/d1)、node3(/d1)、node4(/d1) |
dis-rep | 分佈式複製卷 | 20G | node1(/e1)、node2(/e1)、node3(/e1)、node4(/e1) |
實驗準備
1、爲四臺服務器服務器每臺添加4個磁盤
2、修改服務器的名稱
分別修改爲node1、node2、node3、node4
[root@localhost ~]#hostnamectl set-hostname node1
[root@localhost ~]# su
3、將四臺服務器上的磁盤格式化,並掛載
在這裏我們使用腳本執行掛載
#進入opt目錄
[root@node1 ~]# cd /opt
#磁盤格式化、掛載腳本
[root@node1 opt]# vim a.sh
#! /bin/bash
echo "the disks exist list:"
fdisk -l |grep '磁盤 /dev/sd[a-z]'
echo "=================================================="
PS3="chose which disk you want to create:"
select VAR in `ls /dev/sd*|grep -o 'sd[b-z]'|uniq` quit
do
case $VAR in
sda)
fdisk -l /dev/sda
break ;;
sd[b-z])
#create partitions
echo "n
p
w" | fdisk /dev/$VAR
#make filesystem
mkfs.xfs -i size=512 /dev/${VAR}"1" &> /dev/null
#mount the system
mkdir -p /data/${VAR}"1" &> /dev/null
echo -e "/dev/${VAR}"1" /data/${VAR}"1" xfs defaults 0 0\n" >> /etc/fstab
mount -a &> /dev/null
break ;;
quit)
break;;
*)
echo "wrong disk,please check again";;
esac
done
#給於腳本執行權限
[root@node1 opt]# chmod +x a.sh
將腳本通過scp推送到其他三臺服務器上
scp a.sh root@192.168.45.134:/opt
scp a.sh root@192.168.45.130:/opt
scp a.sh root@192.168.45.136:/opt
在四臺服務器上執行腳本,並完成
這個只是樣本
[root@node1 opt]# ./a.sh
the disks exist list:
==================================================
1) sdb
2) sdc
3) sdd
4) sde
5) quit
chose which disk you want to create:1 //選擇要格式化的盤
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x37029e96.
Command (m for help): Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): Partition number (1-4, default 1): First sector (2048-41943039, default 2048): Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): Using default value 41943039
Partition 1 of type Linux and of size 20 GiB is set
Command (m for help): The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
分別在四個服務器上查看掛載情況
4、設置hosts文件
在第一臺node1上修改
#在文件末尾添加
vim /etc/hosts
192.168.45.133 node1
192.168.45.130 node2
192.168.45.134 node3
192.168.45.136 node4
通過scp將hosts文件推送給其他服務器和客戶端
#將/etc/hosts文件推送給其他主機
[root@node1 opt]# scp /etc/hosts [email protected]:/etc/hosts
root@192.168.45.130's password:
hosts 100% 242 23.6KB/s 00:00
[root@node1 opt]# scp /etc/hosts [email protected]:/etc/hosts
[email protected]'s password:
hosts 100% 242 146.0KB/s 00:00
[root@node1 opt]# scp /etc/hosts [email protected]:/etc/hosts
root@192.168.45.136's password:
hosts 100% 242 146.0KB/s 00:00
在其他服務器上查看推送情況
關閉所有服務器和客戶端的防火牆
[root@node1 ~]# systemctl stop firewalld.service
[root@node1 ~]# setenforce 0
在客戶端和服務器上搭建yum倉庫
#進入yum文件路徑
[root@node1 ~]# cd /etc/yum.repos.d/
#創建一個空文件夾
[root@node1 yum.repos.d]# mkdir abc
#將CentOS-文件全部移到到abc下
[root@node1 yum.repos.d]# mv CentOS-* abc
#創建私有yum源
[root@node1 yum.repos.d]# vim GLFS.repo
[demo]
name=demo
baseurl=http://123.56.134.27/demo
gpgcheck=0
enable=1
[gfsrepo]
name=gfsrepo
baseurl=http://123.56.134.27/gfsrepo
gpgcheck=0
enable=1
#重新加載yum源
[root@node1 yum.repos.d]# yum list
安裝必要軟件包
[root@node1 yum.repos.d]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
在其他三臺上進行同樣的操作
在四臺服務器上啓動glusterd,並設置爲開機自啓動
[root@node1 yum.repos.d]# systemctl start glusterd.service
[root@node1 yum.repos.d]# systemctl enable glusterd.service
添加節點信息
[root@node1 yum.repos.d]# gluster peer probe node2
peer probe: success.
[root@node1 yum.repos.d]# gluster peer probe node3
peer probe: success.
[root@node1 yum.repos.d]# gluster peer probe node4
peer probe: success.
在其他服務器上查看節點信息
[root@node1 yum.repos.d]# gluster peer status
# 創建分佈式卷
#創建分佈式卷
[root@node1 yum.repos.d]# gluster volume create dis-vol node1:/data/sdb1 node2:/data/sdb1 force
#檢查信息
[root@node1 yum.repos.d]# gluster volume info dis-vol
#查看分佈式現有卷
[root@node1 yum.repos.d]# gluster volume list
#啓動卷
[root@node1 yum.repos.d]# gluster volume start dis-vol
在客戶端上掛載
#遞歸創建掛載點
[root@manager yum.repos.d]# mkdir -p /text/dis
#將剛纔創建的卷掛載到剛纔創建的掛載點下
[root@manager yum.repos.d]# mount.glusterfs node1:dis-vol /text/dis
創建條帶卷
#創建卷
[root@node1 yum.repos.d]# gluster volume create stripe-vol stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
#查看現有卷
[root@node1 yum.repos.d]# gluster volume list
dis-vol
stripe-vol
#啓動條帶卷
[root@node1 yum.repos.d]# gluster volume start stripe-vol
volume start: stripe-vol: success
在客戶端掛載
#創建掛載點
[root@manager yum.repos.d]# mkdir /text/strip
#掛載條帶卷
[root@manager yum.repos.d]# mount.glusterfs node1:/stripe-vol /text/strip/
創建複製卷
#創建複製卷
[root@node1 yum.repos.d]# gluster volume create rep-vol replica 2 node3:/data/sdb1 node4:/data/sdb1 force
volume create: rep-vol: success: please start the volume to access data
#開啓複製卷
[root@node1 yum.repos.d]# gluster volume start rep-vol
volume start: rep-vol: success
在客戶機掛載複製卷
[root@manager yum.repos.d]# mkdir /text/rep
[root@manager yum.repos.d]# mount.glusterfs node3:rep-vol /text/rep
創建分佈式條帶
#創建分佈式條帶卷
[root@node1 yum.repos.d]# gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force
volume create: dis-stripe: success: please start the volume to access data
#啓動分佈式條帶卷
[root@node1 yum.repos.d]# gluster volume start dis-stripe
volume start: dis-stripe: success
在客戶機上掛載
[root@manager yum.repos.d]# mkdir /text/dis-strip
[root@manager yum.repos.d]# mount.glusterfs node4:dis-stripe /text/dis-strip/
創建分佈式複製卷
#創建分佈式複製卷
[root@node2 yum.repos.d]# 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@node2 yum.repos.d]# gluster volume start dis-rep
volume start: dis-rep: success
# 查看現有卷
[root@node2 yum.repos.d]# gluster volume list
dis-rep
dis-stripe
dis-vol
rep-vol
stripe-vol
在客戶端掛載
[root@manager yum.repos.d]# mkdir /text/dis-rep
[root@manager yum.repos.d]# mount.glusterfs node3:dis-rep /text/dis-rep/
以上我們完成了卷的創建和掛載,現在我們來進行卷的測試
首先在客戶機上創建5個40M的文件
[root@manager yum.repos.d]# dd if=/dev/zero of=/demo1.log bs=1M count=40
40+0 records in
40+0 records out
41943040 bytes (42 MB) copied, 0.0175819 s, 2.4 GB/s
[root@manager yum.repos.d]# dd if=/dev/zero of=/demo2.log bs=1M count=40
40+0 records in
40+0 records out
41943040 bytes (42 MB) copied, 0.269746 s, 155 MB/s
[root@manager yum.repos.d]# dd if=/dev/zero of=/demo3.log bs=1M count=40
40+0 records in
40+0 records out
41943040 bytes (42 MB) copied, 0.34134 s, 123 MB/s
[root@manager yum.repos.d]# dd if=/dev/zero of=/demo4.log bs=1M count=40
40+0 records in
40+0 records out
41943040 bytes (42 MB) copied, 1.55335 s, 27.0 MB/s
[root@manager yum.repos.d]# dd if=/dev/zero of=/demo5.log bs=1M count=40
40+0 records in
40+0 records out
41943040 bytes (42 MB) copied, 1.47974 s, 28.3 MB/s
然後複製5個文件到不同的捲上
[root@manager yum.repos.d]# cp /demo* /text/dis
[root@manager yum.repos.d]# cp /demo* /text/strip
[root@manager yum.repos.d]# cp /demo* /text/rep
[root@manager yum.repos.d]# cp /demo* /text/dis-strip
[root@manager yum.repos.d]# cp /demo* /text/dis-rep
查看卷的內容
查看分佈式卷
查看條帶卷
查看複製卷
查看分佈式條帶卷
查看分佈式複製卷
故障測試
關閉node2服務器觀察結果
[root@manager yum.repos.d]# ls /text/
dis dis-rep dis-strip rep strip
[root@manager yum.repos.d]# ls /text/dis
demo1.log demo2.log demo3.log demo4.log
[root@manager yum.repos.d]# ls /text/dis-rep
demo1.log demo2.log demo3.log demo4.log demo5.log
[root@manager yum.repos.d]# ls /text/dis-strip/
demo5.log
[root@manager yum.repos.d]# ls /text/rep/
demo1.log demo2.log demo3.log demo4.log demo5.log
[root@manager yum.repos.d]# ls /text/strip/
[root@manager yum.repos.d]#
結論:
- 分佈卷缺少demo5.log文件
- 條帶卷無法訪問
- 複製卷正常訪問
- 分佈式條帶卷缺少文件
- 分佈式複製卷正常訪問
刪除卷
要刪除卷需要先停止卷,在刪除卷的時候,卷組必須處於開啓狀態
#停止卷
[root@manager yum.repos.d]# gluster volume delete dis-vol
#刪除卷
[root@manager yum.repos.d]# gluster volume delete dis-vol
訪問控制
#僅拒絕
[root@manager yum.repos.d]# gluster volume set dis-vol auth.reject 192.168.45.133
#僅允許
[root@manager yum.repos.d]# gluster volume set dis-vol auth.allow 192.168.45.133