一,GlusterFS简介
1,GlusterFS是什么
- Gluster是一个开源的分布式文件系统
- 是一个c/s架构
- 由存储服务器,客户端以及NFS/Samba存储网关组成。
- 没有云数据服务器组件,这有助于提升整个系统的性能,可靠性和稳定性。
文件系统定义
负责实现数据存储方式,以什么格式保存在磁盘中的一个技术。
2,GlusterFS特点
扩展性和高性能
- 分布式的特性
高可用性
- 冗余,容灾的能力
全局同一命令空间
- 将所以的节点的命令空间整个统一命令空间。将整个系统的所以节点的存储容量组成一个大的虚拟存储池,供客户端访问。
弹性卷管理
逻辑存储池可以在线进行增加和移除,不会导致业务中断,逻辑卷可以根据需求在线增长和缩减,并可以在多个节点中实现负载均衡。
基于标准协议
按照什么协议进行传输(tcp、ip),Gluster存储服务支持NFS,CLFS,HTTP.FTP.SMB及gluster原生协议,完全与POSIX标准(可移植操作系统接口)兼容。
二,GlusterFS专业术语
1,Brick(块存储服务器)
- 实际存储用户数据的服务器(相当于逻辑卷中的PE)
2,Volume(逻辑卷)
- 一个逻辑卷是一组brick的集合,卷是数据存储的逻辑设备。
- 本地文件系统的“分区”
3,FUSE(用户空间的文件系统)
用户的空间的文件系统(类别ext4),这是一个“伪文件系统(就是虚拟的文件系统)”用户端的交换模块。
4,VFS(虚拟端口)
用户是提交请求个VFS,然后VFS交给FUSH,再交给GFS客户端,最后由客户端交给远程服务端进行存储。
5,Glusterd(服务)
- 是运行再存储节点的进程(客户端运行的是gluster client),GFS使用过程中整个GFS之间的交换由Gluster client 和 glusterd 完成。
6,模块化堆伐式架构
- GlusterFS 采用模块化、堆栈式的架构。
- 通过对模块进行各种组合,即可实现复杂的功能。例如 Replicate 模块可实现 RAID1,Stripe 模块可实现 RAID0, 通过两者的组合可实现 RAID10 和 RAID01,同时获得更高的性能及可靠性。
三,GlusterFS构成
模块化推栈式架构
- 模块化、推栈式的架构
- 通过对模块的组合,实现复杂的功能
1、API: 应用程序编程接口
2、模块化: 每个模块可以提供不同的功能
3、推栈式: 同时启用多个模块,多个功能功能可以组合,实现复杂的功能
1、GlusterFS总流程
I/O cache : I/O缓存
read ahead : 内核文件预读
distribute/stripe: 分布式、条带化
Gige: 千兆网/千兆接口
TCP/IP: 网络协议
InfiniBand: 网络协议,与TCP/IP具有转发丢失数据包的特性,基于此通信协议可能导致通信变慢,而IB使用基于信任的,流程制的机制来保证连接的完整性。
RDMA: 负责数据传输,有一种数据传输协议,功能:为了解决传输过程中客户端与服务器端数据处理的延迟。
上半部分为客户端,中间为网络层,下班部分为服务端
- 封装多核功能模块,组成推栈式的结构,来实现复杂的功能。
- 然后以请求的方式与客户端进行交互,客户端与服务端进行交互,由于可能会存在系统兼容问题,需要通过posix来解决系统兼容性问题,让客户端的命令通过posix过滤后可以在服务端执行。
2,GFS的工作原理
上图说明
外来的一个请求,例:用户端申请创建一个文件,客户端或应用程序通过GFS的挂载点进行访问数据
linux系统内核通过VFS的apl收到请求并处理
VFS将数据交给FUSE内核文件系统,FUSE文件系统则是将数据通过/dev/fuse设备文件递交给GluseterFS client端。
GlusterFS client端收到数据后,会根据配置文件的配置对数据进行处理。
再通过网络,将数据发送给远程端的Gluster server,并将数据写入到服务器存储设备上。
server再将数据转交给VFS虚拟文件系统转换,在由VFS进行CFS转存处理,最后交给EXT3文件系统,最后存储到磁盘中。
四,GlusterFS的卷类型
(1)分布式卷
没有对文件进行分块处理
通过扩展文件属性保存HASH值
支持的底层文件系统有EXT3.EXT4.ZFS.XFS等
(2)条带卷
根据偏移量将文件分成N块(N个条带节点),轮询的存储在每个Brick Server节点
存储大文件时,性能尤为突出
不具备冗余性,类似Raid0
(3) 复制卷
同一文件保存一份或多分副本
因为要保存副本,所以磁盘利用率较低
若多个节点上的存储空间不一致,将按照木桶效应取最低节点的容量作为该卷的总容量
(4)分布式条带卷
兼顾分布式卷和条带卷的功能
主要用于大文件访问处理
至少最少需要4天服务器
(5)分布式复制卷
兼顾分布式卷和复制卷的功能
用于需要冗余的情况
五,GlusterFS实验
1、准备5台机器
Node1:192.168.182.160
Node2:192.168.182.137
Node3:192.168.182.138
Node4:192.168.182.139
客户端:192.168.182.175
将每台机器 添加 大小为5G的磁盘
#关闭防火墙
systemctl stop firewalld
setenforce 0
2、磁盘分区,并挂载 利用
2.磁盘分区,并挂载
vim /opt/fdisk.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
cd /opt
chmod +x fdisk.sh
./fdisk.sh
将脚本执行
#配置各个节点的/etc/hosts文件(所有节点操作)
echo "192.168.182.160 node1" >> /etc/hosts
echo "192.168.182.137 node2" >> /etc/hosts
echo "192.168.182.138 node3" >> /etc/hosts
echo "192.168.182.139 node4" >> /etc/hosts
cd /etc/yum.repos.d/
mv * repos.bak/
vim glfs.repo
[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
安装、启动GFS(所有节点操作)
unzip gfsrepo.zip
yum clean all && yum makecache
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
如果出现以下情况 可以先删除之前的依赖包 然后在下载
rpm -e --nodeps glusterfs-api glusterfs-libs glusterfs-fuse glusterfs-cli glusterfs glusterfs-client-xlators ##删除报错的依赖包
systemctl start glusterd.service
systemctl enable glusterd.service
systemctl status glusterd.service
添加DNS,进行时间同步
echo "nameserver 114.114.114.114" >> /etc/resolv.conf
ntpdate ntp1.aliyun.com
添加节点到存储信任池中(在任意一个node中操作)
gluster peer probe node1
gluster peer probe node2
gluster peer probe node3
gluster peer probe node4
更改一下名字 在进行添加
在每个node节点上查看群集状态
gluster peer status
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) |
创建分布式卷,没有指定类型,默认创建的是分布式卷
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
指定类型为 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
指定类型为 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
创建分布式条带卷
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
创建分布式复制卷
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
六,部署客户端
cd /etc/yum.repos.d/
mv * repos.bak/
vim glfs.repo
[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
yum clean all && yum makecache
cd /opt
unzip gfsrepo.zip
配置 /etc/hosts 文件
echo "192.168.182.160 node1" >> /etc/hosts
echo "192.168.182.137 node2" >> /etc/hosts
echo "192.168.182.138 node3" >> /etc/hosts
echo "192.168.182.139 node4" >> /etc/hosts
挂载 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
Node1
Node2
Node3
Node4
七,破坏性测试
node2和node4的服务器进行挂机来模拟故障,然后在客户端上查看其他服务器的文件是否正常
分布式卷数据 可以查看
条带卷 不可查看
复制卷 可产查看
分布式复制卷 可查看
注:当出现以下情况是
1、需要考虑是否是 各台机子的时间是否做了同步处理
2、需要查看版本是否一致[root@client /]# rpm -qa glusterfs glusterfs-fuse
3、或查看日志报错[root@client /]# cat /var/log/glusterfs/test0