GlusterFS
一、 GlusterFS简介
- 开源的分布式文件系统
- 由存储服务器、客户端以及NFS/Samba 存储网关组成
- 无元数据服务器
二、 GlusterFS特点
- 扩展性和高性能
- 高可用性
- 全局统一命名空间
- 弹性卷管理
- 基于标准协议
三、GlusterFS术语
- Brick
- Volume
- FUSE
- VFS
- Glusterd
四、模块化堆栈式架构
- 模块化、堆栈式的架构
- 通过对模块的组合,实现复杂的功能
五、GlusterFS工作原理
- GlusterFS client 收到数据后,client根据配置文件的配置对数据进行处理
- 客户端或应用程序通过GlusterFS的挂载点访问数据
- linux系统内核通过VFS API收到请求并处理
- VFS将数据递交给FUSE内核文件系统, fuse文件系统则是将数据通过/dev/fuse设备文件递交给了GlusterFS
client端 - 通过网络将数据传递至远端的GlusterFS Server,并且将数据写入到服务器存储设备上
六、弹性HASH算法
- 通过HASH算法得到一个32位的整数
- 划分为N个连续的子空间,每个空间对应一个Brick
- 弹性HASH算法的优点
- 保证数据平均分布在每一个Brick中
- 解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈
七、GlusterFS的卷类型
- 分布式卷
- 条带卷
- 复制卷
- 分布式条带卷
- 分布式复制卷
- 条带复制卷
- 分布式条带复制卷
7.1 分布式卷
- 分布式卷
- 没有对文件进行分块处理
- 通过扩展文件属性保存HASH值
- 支持的底层文件系统有EXT3、EXT4、ZFS、XFS等
分布式卷的特点
- 文件分布在不同的服务器,不具备冗余性
- 更容易和廉价地扩展卷的大小
- 单点故障会造成数据丢失
- 依赖底层的数据保护
格式
gluster volume create dis-volume server1:/dir1 server2:/dir2 server3:/dir3
- 没有分块处理,文件只能存在一个server中,效率不提升
7.2 条带卷
- 根据偏移量将文件分成N块(N个条带节点),轮询的存储在每个Brick Server节点
- 存储大文件时,性能尤为突出
- 不具备冗余性,类似Raid0
- 从多个server中同时读取文件,效率提升
特点
- 数据被分割成更小块分布到块服务器群中的不同条带区
- 分布减少了负载且更小的文件加速了存取的速度
- 没有数据冗余
- 创建条带卷
- 创建了一个名为Stripe-volume的条带卷,文件将被分块轮询的存储在Server1:/dir1和Server2:/dir2两个Brick中
gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2 force #(直接执行)
7.3 复制卷
- 同一文件保存一份或多分副本
- 因为要保存副本,所以磁盘利用率较低
- 若多个节点上的存储空间不一致,将按照木桶效应取最低节点的容量作为该卷的总容量
特点
-
卷中所有的服务器均保存一个完整的副本
-
卷的副本数量可由客户创建的时候决定
-
至少有两个块服务器或更多服务器
-
具备冗余性
-
创建复制卷
-
创建名为rep-volume的复制卷,文件将同时存储两个副本,分别在Server1:/dir1和Server2:/dir2两个Brick中
gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2
7.4 分布式条带卷
分布式条带卷
- 兼顾分布式卷和条带卷的功能
- 主要用于大文件访问处理
- 至少最少需要 4 台服务器
创建分布式条带卷
- 创建了名为dis-stripe的分布式条带卷,配置分布式的条带卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)
gluster volume create dis-stripe stripe 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
7.5 分布式复制卷
- 兼顾分布式卷和复制卷的功能
- 用于需要冗余的情况
创建分布式复制卷
- 创建名为dis-rep的分布式条带卷,配置分布式复制卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)
gluster volume create dis-rep replica 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
八、GlusterFS部署
8.1 实验环境
- 5台虚拟机作为node 节点服务器
- 客户端:node1:192.168.75.144
- 四个节点服务器作为分布式文件系统GFS服务器
- node2:192.168.75.200
- node3:192.168.75.131
- node4:192.168.75.134
- node5:192.168.75.155
8.2 实验步骤
- 所有服务器进行设置主机名
hostnamectl set-hostname node1
su
hostnamectl set-hostname node2
su
hostnamectl set-hostname node3
su
hostnamectl set-hostname node4
su
hostnamectl set-hostname node5
su
- 关闭防火墙核心防护
systemctl stop firewalld
setenforce 0
- 对节点服务器配置修改host文件
vim /etc/hosts
192.168.75.134 node4
192.168.75.200 node2
192.168.75.131 node3
192.168.75.144 node1
192.168.75.155 node5
~
- 对节点服务器配置添加4个硬盘———分区——格式化——挂载操作
1.手动添加4个20G硬盘为所有节点
2.使用脚本一键部署(分区、格式化、挂载操作)
3. df -h //查看挂载情况
vim disk.sh
#! /bin/bash
echo "the disks exist list:"
##grep出系统所带磁盘
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)
##本地磁盘就退出case语句
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
- 执行脚本
chmod +x disk.sh
./disk.sh
df -Th //查看磁盘挂载情况
- 为所有服务器添加GFSyum仓库为了之后安装glusters glusterfs-server glusterfs-fuse glusterfs-rdma
所有节点服务器设置
window 的共享文件夹设置everyone
mount -t cifs -o username=ty,password=ty //192.168.1.8/gfsrepo /opt/GFS
[root@node5 yum.repos.d]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda3 xfs 50G 5.0G 46G 10% /
devtmpfs devtmpfs 906M 0 906M 0% /dev
tmpfs tmpfs 922M 0 922M 0% /dev/shm
tmpfs tmpfs 922M 11M 911M 2% /run
tmpfs tmpfs 922M 0 922M 0% /sys/fs/cgroup
/dev/sda5 xfs 246G 33M 246G 1% /home
/dev/sda1 xfs 1014M 163M 852M 17% /boot
tmpfs tmpfs 185M 36K 185M 1% /run/user/0
/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
/dev/sr0 iso9660 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64
//192.168.1.8/gfsrepo cifs 297G 244G 53G 83% /opt/GFS
设置yum 仓库
vim GLFS.repo
[GLFS]
name=glfs
baseurl=file:///opt/GFS/
gpgcheck=0
enabled=1
yum clean all
yum makecache
yum list
安装包红色不是报错
- 安装gluster服务(GFS服务器需要安装)
yum -y install glusters glusterfs-server glusterfs-fuse glusterfs-rdma
出现故障
可用: glusterfs-client-xlators-3.10.2-1.el7.x86_64 (GLFS)
glusterfs-client-xlators = 3.10.2-1.el7
您可以尝试添加 --skip-broken 选项来解决该问题
您可以尝试执行:rpm -Va --nofiles --nodigest
[root@node2 GFS]#
解决方法
[root@node3 yum.repos.d]# yum remove glusterfs-libs.x86_64
之后再次执行yum -y install glusters glusterfs-server glusterfs-fuse glusterfs-rdma
- 开启gluster服务
systemctl restart glusterd
- 设置时间同步(gluster-server需要设置)
ntpdate ntp1.aliyun.com
- 添加入存储信任池只要在一台主机上添加其他节点即可 ##如果建立信任池出错,查看防火墙和服务是否开启
gluster peer probe node3
gluster peer probe node4
gluster peer probe node5
- 查看所有节点
[root@node2 GFS]# gluster peer status
Number of Peers: 3
Hostname: node4
Uuid: 902d4c1e-cccf-42f3-8946-61dc83b3f4d1
State: Peer in Cluster (Connected)
Hostname: node3
Uuid: 126ac64f-026f-4ade-bcf8-e0e537be729f
State: Peer in Cluster (Connected)
Hostname: node5
Uuid: faa7791c-7e9f-451c-a1ca-11535b45264d
State: Peer in Cluster (Connected)
[root@node2 GFS]#
- 客户端node1:192.168.75.144设置
安装yum仓库
window 的共享文件夹gfsrepo设置everyone ##gfsrepo是装有gluster安装包的
mkdir GFS
mount -t cifs -o username=ty,password=ty //192.168.1.8/gfsrepo /opt/GFS
[root@node5 yum.repos.d]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda3 xfs 50G 5.0G 46G 10% /
devtmpfs devtmpfs 906M 0 906M 0% /dev
tmpfs tmpfs 922M 0 922M 0% /dev/shm
tmpfs tmpfs 922M 11M 911M 2% /run
tmpfs tmpfs 922M 0 922M 0% /sys/fs/cgroup
/dev/sda5 xfs 246G 33M 246G 1% /home
/dev/sda1 xfs 1014M 163M 852M 17% /boot
tmpfs tmpfs 185M 36K 185M 1% /run/user/0
/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
/dev/sr0 iso9660 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64
//192.168.1.8/gfsrepo cifs 297G 244G 53G 83% /opt/GFS
cd /etc/yum.repo
mkdir bak
mv C* bak
设置yum 仓库
vim GLFS.repo
[GLFS]
name=glfs
baseurl=file:///opt/GFS/
gpgcheck=0
enabled=1
yum clean all
yum makecache
yum list
yum -y install glusterfs glusterfs-fuse
vim /etc/hosts
192.168.75.134 node4
192.168.75.200 node2
192.168.75.131 node3
192.168.75.144 node1
192.168.75.155 node5
安装包红色不是报错
##############################################################
yum -y install glusters glusterfs-server glusterfs-fuse glusterfs-rdma
出现故障
可用: glusterfs-client-xlators-3.10.2-1.el7.x86_64 (GLFS)
glusterfs-client-xlators = 3.10.2-1.el7
您可以尝试添加 --skip-broken 选项来解决该问题
您可以尝试执行:rpm -Va --nofiles --nodigest
[root@node2 GFS]#
解决方法:[root@node3 yum.repos.d]# yum remove glusterfs-libs.x86_64
之后再次执行yum -y install glusterfs glusterfs-fuse
//开启gluster服务
systemctl restart glusterd
-
在节点服务node 4操作(任意节点)
-
新建一个分布卷
gluster volume create dis-vol node2:/data/sdb1 node3:/data/sdb1 force
//dis-vol 是指卷组名
force 直接执行
//gluster volume info dis-vol ##查看卷组信息,created是指还没有在运行
//gulster volume start dis-vol ## 启动卷组
//gulster volume list ## 查看卷组的列表
//gluster volume delete dis-vol ## 删除卷组
注意:新建卷组是在gluster节点服务器。
然后再客户端挂载卷组使用
- 客户端挂载验证
分布式卷========
- 分布式卷
- 没有对文件进行分块处理
- 通过扩展文件属性保存HASH值
- 支持的底层文件系统有ext3、ext4、ZFS、XFS
######分布式卷具有如下特点#########
- 文件分布在不同的服务器,不具备冗余性
- 更容易和廉价地扩展卷的大小
- 单点故障会造成数据丢失
- 依赖底层的数据保护
1.在node 2上新建一个分布式卷dis-vol
[root@node2 GFS] gluster volume create dis-vol node2:/data/sdb1 node3:/data/sdb1 force
volume create: dis-vol: success: please start the volume to access data
[root@node2 GFS] gluster volume info dis-vol
Volume Name: dis-vol
Type: Distribute
Volume ID: d065aa57-a6b4-44bd-a82b-0c062ccc1515
Status: Created
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: node2:/data/sdb1
Brick2: node3:/data/sdb1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node2 GFS] gluster volume start dis-vol //启动卷组
volume start: dis-vol: success
- 客户端挂载验证
[root@node4-client opt] mkdir -p /test/dis
[root@node4-client opt] mount.glusterfs node2:dis-vol /test/dis
################新建测试文件#################################cd /opt/test/dis
[root@node4-client dis] dd if=/dev/zero of=/demo1.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.0159063 秒,2.6 GB/秒
[root@node4-client dis] dd if=/dev/zero of=/demo2.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.0257849 秒,1.6 GB/秒
[root@node4-client dis] dd if=/dev/zero of=/demo3.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.0834383 秒,503 MB/秒
[root@node4-client dis] dd if=/dev/zero of=/demo4.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.0850667 秒,493 MB/秒
[root@node4-client dis] dd if=/dev/zero of=/demo5.log bs=1M count=40
记录了40+0 的读入
记录了40+0 的写出
41943040字节(42 MB)已复制,0.0478089 秒,877 MB/秒
[root@node4-client /] mv demo* /test/dis
[root@node4-client /] cd /test/dis/
[root@node4-client dis] ll -h
总用量 200M
-rw-r--r--. 1 root root 40M 9月 13 23:01 demo1.log
-rw-r--r--. 1 root root 40M 9月 13 23:01 demo2.log
-rw-r--r--. 1 root root 40M 9月 13 23:01 demo3.log
-rw-r--r--. 1 root root 40M 9月 13 23:01 demo4.log
-rw-r--r--. 1 root root 40M 9月 13 23:01 demo5.log
- node 2节点查看文件
[root@node2 GFS] cd /data/sdb1/
[root@node2 sdb1] ll
总用量 163840
-rw-r--r--. 2 root root 41943040 9月 13 23:01 demo1.log
-rw-r--r--. 2 root root 41943040 9月 13 23:01 demo2.log
-rw-r--r--. 2 root root 41943040 9月 13 23:01 demo3.log
-rw-r--r--. 2 root root 41943040 9月 13 23:01 demo4.log
- node 3节点查看文件
[root@node3 yum.repos.d] cd /data/sdb1
[root@node3 sdb1] ll
总用量 40960
-rw-r--r--. 2 root root 41943040 9月 13 23:01 demo5.log
[root@node3 sdb1]
================ 条带卷 ================
条带卷
- 根据偏移量将文件分成N块(N个条带节点),轮询的存储在每个Brick Server节点
- 存储大文件是,性能尤为突出
- 不具备冗余性。类似RAID0
-----------条带卷特点------------
- 数据被分割成更小块分布到块服务器群中的不同条带区
- 分布减少了负载且更小的文件加速了存取的速度
- 没有数据冗余
gluster volume create strip-vol stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
gluster volume start stripe-vol
gluster volume info stripe-vol
复制卷
复制卷
- 同一文件保存一份或多副本
- 复制模式因为要保存副本,所有磁盘利用率较低
- 多个节点上的存储空间不一致,那么将按照木桶效应取最低节点的容量作为改卷的总容量
---------特点----------------
- 卷中所有的服务器均保存在一个完整的副本
- 卷的副本数量可由客户创建的时候决定
- 至少由两个块服务器或更多服务器
- 具备冗余性
gluster volume create rep-vol replica 2 node3:/data/sdb1 node4:/data/sdb1 force
gluster volume start rep-vol
gluster volume info rep-vol
=分布式条带卷
- 条带卷的功能
- 访问处理
- 节点服务器
gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 force
gluster volume start dis-stripe
gluster volume info dis-stripe
gluster volume list
================ 分布式复制卷 ============
- 分布式复制卷
- 兼顾分布式卷和复制卷的功能
- 用于需要冗余的情况下
gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 force
gluster volume start dis-rep
gluster volume info dis-rep
gluster volume list
条带复制卷==========
将文件分割并备份随机存放在不同的服务器里,File被分割4段,1、3存放在server1(exp1)上,2、4存放在server2(exp4),server1上的(exp3)存放server2(exp4)的备份文件,server2上的(exp2)存放server1(exp1)的备份文件。
创建l例子:gluster volume create test-volume stripe 2 replica 2 transport tcp server1:/exp1 server2:/exp2 server3:/exp3 server4:/exp4
分布式条带复制卷
三种基本卷的复合卷。
创建语法: gluster volume create [disperse []] [redundancy ] [transport tcp | rdma | tcp,rdma]
例子:gluster volume create test1 disperse 3 server1:/brick{1…6} force
- 客户端临时挂载
mount.glusters node1:dis-vol /text/dis //挂载分布式卷
mount.glusters node1:stripe-vol /text/strip //挂载条带卷
mount.glusters node1:rep-vol /text/rep //挂载复制卷
mount.glusters node1:dis-stripe /text/dis_stripe //挂载分布条带卷
mount.glusters node1:dis-rep /text/dis_rep //挂载分布复制卷
//然后回到之前创建卷区的节点服务器的,查看文件分布存储情况。
访问控制
- 仅拒绝
gluster volume set dis-vol auth.reject 192.168.175.142
volume set:success
- 仅允许
gluster volume set dis-vol auth.allow 192.168.175.142
volume set:success