文章目录
一、FS(文件系统)概述
1.1文件系统的组成
- 接口:文件系统接口
- 功能模块(管理、存储的工具):对象管理的软件集合
- 独享及属性:使用文件系统的消费者
1.2文件系统的作用
- 从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统
- 负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取
1.3文件系统的挂载使用
- 出根文件系统以外的文件系统创建后要使用需要先挂载至挂载点后才可以访问,挂载点即分区设备文件关联的某个目录文件,比如NFS
二、GlusterFS(分布式文件系统)概述
- GlusterFS分布式文件系统,用于存储、管理磁盘文件(保存在磁盘)
2.1分布式文件系统简介
- Glusterfs是一个开源的分布式文件系统,是Scale存储的核心,能够处理千数量级的客户端.在传统的解决 方案中Glusterfs能够灵活的结合物理的,虚拟的和云资源去体现高可用和企业级的性能存储.
- Glusterfs通过TCP/IP或InfiniBand RDMA网络链接将客户端的存储资块源聚集在一起,使用单一的全局命名空间来管理数据,磁盘和内存资源.
- Glusterfs基于堆叠的用户空间设计,可以为不同的工作负载提供高优的性能.
2.2分布式文件系统的组成(组件)
- 存储服务器(块服务器block、工具、管理存储)
- 客户端(需要存储文件的对象)
- NFS/Samba存储网关组成(接口)
- 无元数据服务器:客户端的定位比较重要,因为他是无元数据服务器的
2.3GlusterFS特点
-
扩展性和高性能(分布式的特点)
-
高可用性(分布式的特点)
-
全局统一命名空间:共享资源(名称空间:隔离、独立的整体、环境),与其他名称空间是隔离独立的)
-
弹性卷管理(条带、复制、分布式、分布式条带、分布式复制;类似raid)
数据储存在逻辑卷中,逻辑卷可以从虚拟化的物理存储池进行独立逻辑划分而得到。存储服务器可以在线进行增加和移除,不会导致应用中断。逻辑卷可以在所有配置服务器中增长和缩减,可以在不同服务器迁移进行容量均衡,或者增加和移除系统,这些操作都可在线进行。文件系统配置更改也可以实时在线进行并应用,从而可以适应工作负载条件变化或在线性能调优 -
基于标准定义
Gluster存储服务支持NFS, CIFS, HTTP, FTP以及Gluster原生协议,完全与POSIX标准兼容。现有应用程序不需要作任何修改或使用专用API,就可以对Gluster中的数据进行访问。这在公有云环境中部署Gluster时非常有用,Gluster对云服务提供商专用API进行抽象,然后提供标准POSIX接口。
2.4元数据服务器的作用-
- 存储元数据,帮用户定位文件的位置、索引等信息
- 有元数据服务器文件系统中,如果元数据损坏,会直接导致文件系统不可用( 单点故障-服务器定位)
2.4.1若A宕机,就无法获取数据
- 客户端通过元数据服务器查询数据,服务器通过A块服务器,若是A宕机,数据就丢失了
2.4.2实现ABC 三台GFS服务器数据共享
- 而GFS把元数据服务器舍弃了,使用的是数据挂载形式挂载到客户端,挂载的网关是NFS/Samba
2.5GFS术语
- Brick存储服务器
实际存储用户数据的服务器 - Volume
本地文件系统的"分区” - FUSE
用户 空间的文件系统(类比EXT4),“这是一个伪文件系统”;以本地文件系统为例,用户想要读写一个文件,会借助于EXT4文件系统,然后把数据写在磁盘上;而如果是远端的GFS,客户端的请求则应该交给FUSE(为文件系统),就可以实现跨界点存储在GFS上 - VFS(虚拟端口)
内核态的虚拟文件系统,用户是先提交请求交给VFS然后VFS交给FUSE,再交给GFS客户端,最后由客户端交给远端的存储 - Glusterd(服务)
是允许在存储节点的进程
2.6GlusterFS模块化堆栈式架构
- 模块化、堆栈式的架构
- 通过对模块的组合,实现复杂的功能
- 模块化
①类似于Linux编译安装,很多功能都可以做定制的,通常都是通过软件开发的方式封装为模块的,按需使用或不适用
②GlusterFS也是这个思想,把功能封装为一个个模块,通过加载、调用、启用的方式就可以对应的功能 - 堆栈式架构设计
通过对模块不同功能的组合来实现复杂功能
三、GlusterFS工作原理
3.1GlusterFS写的工作流程
3.1.1GFS客户端服务器写的工作流程
- 需求:将数据保存在GFS文件系统中(客户端在本地发出写请求)
- 交由VFS的API接受请求–>组合功能模块,将数据交给FUSE(内核伪文件系统)
- FUSE可以模拟操作系统,可以对文件系统进行转存,转存的设备位置为: /dev/fuse (用于传输的设备-虚拟设备文件)
- /dev/fuse 虚拟设备文件会将数据交给GFS客户端
- GFS客户端client会根据配置文件对数据进行处理,然后再通过TCP/IB/rdma网络发送到GFS服务端
3.1.2GFS服务端服务器写的工作流程
- 接收到数据之后
- 会将数据保存在对应的存储节点上
3.2GlusterFS读取的工作流程:
客户端在本地发出读请求
- 交由VFS的API接受请求–>组合功能模块,将数据交给FUSE(内核伪文件系统)
- FUSE在/dev/fuse (用于传输的设备-虚拟设备文件)查询缓存,执行page函数读取(read)内存,若缓存有,则返回客户端
- 若没有缓存,GFS客户端会去GFS服务端获取数据,GFS服务端通过VFS接口去本地读取缓存
- 再把缓存存储在/dev/fuse,读取了缓存数据之后再通过VFS返回给客户端
3.3提高GlusterFS工作效率的架构模式
- gige: 千兆网/千兆接口
- TCP/IP :网络协议
- InfiniBand:网络协议,与TCP/IP相比,TCP/IP具有转发丢失数据包的特性,基于此通讯协议可能导致通讯变慢,而IB使用基于信1、流控制的机制来确保连接完整性,数据包丢失几率小。
- RDMA:负责数据传输,有一种数据传输协议,功能:为了解决传输中客户端与服务器端数据处理的延迟
- POSIX:可移植操作系统接口,主要解决不同操作系统间的移植性然后再转换为逻辑存储(EXT4 +BRICK)
3.4其他服务器详解
- Application:客户端或应用程序通过GlusterFSync的挂载点访问数据
- VFS:linux系统内核通过VFS的API 收到请求并处理
- FUSE :VFS将数据递交给FUSE内核文件系统,fuse文件系统则是将数据通过/dev/fuse设备文件递交给了GlusterFS
- GlusterFS Client ;通过网络将数据传递至远端的GlusterFS Server, 并且写入到服务器存储设备上
四、卷的分类
- 为了解决分布式文件数据索引、定位的复杂程度,而使用了HASH算法来辅助
- 分布式(平均分配)的好处:
①当数据量越来越大的时候,相对每个存储节点的数据量(几率)是相等的
②而如果考虑到单点故障问题,当数据存储再c存储节点,对此GFS是会有备份机制的,默认3备份,所以GFS本身的机制会对数据产生冗余,以此解决单点故障
③GlusterFS支持七种卷,即分布式卷、条带卷、复制卷、分布式条带卷、分布式复制卷、条带复制卷和分布式条带复制卷
4.1基本卷
- 分布式卷(默认)(distribute volume)
文件通过HASH算法分布到所有Brick Server上,这种卷是Glusterfs的基础;以文件为单位根据HASH算法散列到不同的Brick, 其实只是扩大了磁盘空间,如果有一块磁盘损坏,数据也将丢失,属于文件级的RAID 0, 不具有容错能力
比如:4个文件2个brick存储服务器3个文件放在第一个brick块中,第四个文件放在第二个brick块中 - 条带卷(stripe volume)
类似RAID 0,文件被分成数据块并以轮询的方式分布到多个BrickServer上,文件存储以数据块为单位,支持大文件存储,文件越大,读取效率越高,比如:100m的数据分成50m+50m分不到不同的服务器上,分布之后是以数据块为单位的条带复制卷(Stripe Replica volume) :类似RAID 10, 同时具有条带卷和复制卷的特点 - 分布式条带复制卷(Distribute Stripe Replicavolume)
三种基本卷的复合卷,通常用于类Map Reduce应用,将文件同步到多个Brick上,使其具备多个文件副本, 属于文件级RAID 1,具有容错能力。因为数据分散在多个Brick中,所以读性能得到很大提升,但写性能下降,比如:100m 4个文件,2个brick服务器,100*4 文件均存在第一个和第二个brick
4.2复合卷
- 分布式条带卷(Distribute Stripe volume)
Brick Server 数量是条带数(数据块分布的Brick数量)的倍数,兼具分布式卷和条带卷的特点
比如:503 放在第一个brick
501 放在第二个brick
503 放在第三个brick
501 放在第四个brick - 分布式复制卷(Distribute Replica volume)
Brick Server 数量是镜像数(数据副本数量)的倍数,兼具分布式卷和复制卷的特点
比如:503 放在第一个brick
501 放在第二个brick
503 放在第三个brick
501 放在第四个brick - 条带复制卷(Stripe Replica volume)
类似RAID 10, 同时具有条带卷和复制卷的特点 - 分布式条带复制卷(Distribute Stripe Replicavolume)
三种基本卷的复合卷,通常用于类Map Reduce.应用
五、GlusterFSt群集部署
5.1实验环境
hostnamectl set-hostname node1/node2/node3/node4 //修改节点服务器的主机名
su
systemctl stop firewalld //关闭防火墙
systemctl disable firewalld
setenforce 0
getenforce
ntpdate ntp1.aliyun.com //时间同步
- 四台节点服务器各添加四个盘
5.2利用脚本对磁盘分区,并挂载
- 四台节点服务器都需要做
cd /opt
vim fdisk.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 fdisk.sh
sh -x fdisk.sh
5.3修改/etc/hosts配置文件(添加地址映射)
- 所有节点服务器上操作
echo "192.168.27.133 node1" >> /etc/hosts
echo "192.168.27.134 node2" >> /etc/hosts
echo "192.168.27.135 node3" >> /etc/hosts
echo "192.168.27.136 node4" >> /etc/hosts
echo "192.168.27.138 client" >> /etc/hosts
cat /etc/hosts //查看地址映射
5.4安装、启动GlusterFS(所有node节点上操作)
rz -E //将gfsrepo软件包上传到/opt目录下
ls
gfsrepo.zip
unzip gfsrepo.zip //批量解压
cd /etc/yum.repos.d/
mkdir bak
mv CentOS-* bak //配置本地源
vim gfs.repo
[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
yum clean all
yum makecache //重新建立缓存
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma //安装gluster
yum安装失败,需要删除原有的依赖包,然后重新安装即可rpm -e --nodeps glusterfs-api glusterfs-libs glusterfs-fuse glusterfs-cli glusterfs glusterfs-client-xlators
- 开启GFS服务
systemctl start glusterd.service
systemctl enable glusterd.service
systemctl status glusterd.service
netstat -antp | grep glusterd
5.5添加节点到存储信任池中(在node1节点服务器操作)
- 只要在一台node节点上添加其他节点即可
gluster peer probe node1
gluster peer probe node2
gluster peer probe node3
gluster peer probe node4
- 在每个node节点上查看群集状态
gluster peer status
5.6创建卷
- 根据规划创建卷
5.6.1创建分布式卷
- 创建分布式卷,没有指定类型,默认创建的是分布式卷
gluster volume create dis-volume node1:/data/sdb1 node2:/data/sdb1 force
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 ##查看创建分布式卷信息
5.6.2创建条带卷
- 指定类型为 stripe,数值为 2,且后面跟了 2 个 Brick Server,所以创建的是条带卷
[root@node1 yum.repos.d]# gluster volume create stripe-volume stripe 2 node1:/data/sdc1 node2:/data/sdc1 force //创建的是条带卷
[root@node1 yum.repos.d]# gluster volume start stripe-volume //启动新建条带卷
[root@node1 yum.repos.d]# gluster volume info stripe-volume //查看创建条带卷信息
5.6.3创建复制卷
- 指定类型为 replica,数值为 2,且后面跟了 2 个 Brick Server,所以创建的是复制卷
[root@node1 yum.repos.d]# gluster volume create rep-volume replica 2 node3:/data/sdb1 node4:/data/sdb1 force
[root@node1 yum.repos.d]# gluster volume start rep-volume //启动新建复制卷
[root@node1 yum.repos.d]# gluster volume info rep-volume //查看创建复制卷信息
5.6.4创建分布式条带卷
- 指定类型为 stripe,数值为 2,而且后面跟了 4 个 Brick Server,是 2 的两倍,所以创建的是分布式条带卷
[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
[root@node1 yum.repos.d]# gluster volume start dis-stripe //启动新建分布式条带卷
[root@node1 yum.repos.d]# gluster volume info dis-stripe //查看创建分布式条带卷信息
5.6.5创建分布式复制卷
- 指定类型为 replica,数值为 2,而且后面跟了 4 个 Brick Server,是 2 的两倍,所以创建的是分布式复制卷
[root@node1 yum.repos.d]# gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force
[root@node1 yum.repos.d]# gluster volume start dis-rep //启动分布式复制卷
[root@node1 yum.repos.d]# gluster volume info dis-rep //查看创建分布式复制卷信息
5.6.6查看卷列表
[root@node1 yum.repos.d]# gluster volume list
5.7部署Gluster客户端
- 在node1上创建五个卷后,在客户端上把卷挂载在指定的五个目录内,在目录内写入了五个文件,五个文件分别保存在五个目录里面
5.7.1安装客户端软件
[root@client ~]# cd /opt
[root@client opt]# rz -E //将软件包上传到/opt目录下
[root@client opt]# ls
gfsrepo.zip
[root@client opt]# unzip gfsrepo.zip //批量解压
[root@client opt]# unzip gfsrepo.zip
[root@client opt]# cd /etc/yum.repos.d/
[root@client yum.repos.d]# mv CentOS-* bak
[root@client yum.repos.d]# vim gfs.repo
[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
[root@client yum.repos.d]# yum clean all
[root@client yum.repos.d]# yum makecache
[root@client yum.repos.d]#yum -y install glusterfs glusterfs-fuse
5.7.2创建挂载目录
[root@client yum.repos.d]# mkdir -p /test/{dis,stripe,rep,dis_stripe,dis_rep}
[root@client yum.repos.d]# ls /test
5.7.3配置/etc/hosts文件
- 添加映射
echo "192.168.27.133 node1" >> /etc/hosts
echo "192.168.27.134 node2" >> /etc/hosts
echo "192.168.27.135 node3" >> /etc/hosts
echo "192.168.27.136 node4" >> /etc/hosts
echo "192.168.27.138 client" >> /etc/hosts
5.7.4挂载GFS文件系统
- 临时挂载
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
df -hT //查询挂载
5.8测试GFS文件系统
5.8.1卷中写入文件,客户端操作
cd /test/
dd if=/dev/zero of=/opt/demo1.log bs=1M count=40 ##从/dev/zero内复制文件到opt目录下,命名demo1,大小1M,20次,一共20M
dd if=/dev/zero of=/opt/demo2.log bs=1M count=20
dd if=/dev/zero of=/opt/demo3.log bs=1M count=20
dd if=/dev/zero of=/opt/demo4.log bs=1M count=20
dd if=/dev/zero of=/opt/demo5.log bs=1M count=20
cd /opt
ls -lh
- 将demo复制到test所对应的目录
cp demo* /test/dis
cp demo* /test/stripe/
cp demo* /test/rep/
cp demo* /test/dis_stripe/
cp demo* /test/dis_rep/
ls /test/
5.8.2查看文件分布
- 查看分布式文件分布
[root@node1 yum.repos.d]# ls -lh /data/sdb1 //没有被分片,文件分开节点存放
[root@node2 yum.repos.d]# ll -h /data/sdb1
- 查看条带卷文件分布
[root@node1 yum.repos.d]# ls -lh /data/sdc1 //查询数据被分片50% 没副本 没冗余
[root@node2 yum.repos.d]# ll -h /data/sdc1
- 查看复制卷分布
[root@node3 yum.repos.d]# ll -h /data/sdb1
[root@node4 yum.repos.d]# ll -h /data/sdb1 没有被分片,有副本,有冗余
- 查看分布式条带卷分布
[root@node1 yum.repos.d]# ll -h /data/sdd1 //文件被分片50%,没副本,没冗余
[root@node2 yum.repos.d]# ll -h /data/sdd1
- 查看分布式复制卷分布
ll -h /data/sde1 ##数据没有被分片 有副本 有冗余
5.9GFS破坏性测试
- 挂起node2节点服务器或关闭glusterd服务来模拟故障
systemctl stop glusterd ##关闭glusterd服务node2节点来模拟故障
- 在客户端查看文件是否正常,分布式数据查看
ls ##在客户端上查看文件是否正常
查看卷数据是否正常
ls /test/dis ##测试分布式是否正常
ls /test/rep ##测试复制带是否正常
ls /test/stripe ##测试条带是否正常
ll /test/dis_stripe ##测试分布式条带是否正常
ls /test/dis_rep ##测试分布复制带是否正常
六、GFS的维护命令
- 查看GlusterFS卷
gluster volume list
- 查看所有卷的信息
gluster volume info
- 查看所有卷的状态
gluster volume status
- 停止一个卷
gluster volume stop dis-stripe
- 删除一个卷,注意:删除卷时,需要先停止卷,且信任池中不能有主机处于宕机状态,否则删除不成功
gluster volume delete dis-stripe
- 设置卷的访问控制(仅拒绝)
gluster volume set dis-rep auth.deny 192.168.27.134
-
- 仅允许,设置192.168.27.0网段的所有IP地址都能访问dis-rep卷(分布式复制卷)
gluster volume set dis-rep auth.allow 192.168.27.*