一、GlusterFS
1.GlusterFS简介
1)开源的分布式文件系统
2)由存储服务器、客户端以及NFS/Samba存储网关组成
3)无元数据服务器GlusterFs(分布式文件系统)
FS:文件系统文件系统组成:
1)文件系统接口
2)对对像管理的软件集合
3)对象及属性文件系统作用
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。 负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取文件系统的挂载使用。 除根文件系统以外的文件系统创建后要使用需要先挂载至挂载点后才可以被访问,挂载点即分区设备文件关联的某个目录文件,类比: NES。 元数据服务器的作用:存储元数据,帮用户定位文件的位置、索引等信息
2.GlusterFS特点
1)扩展性和高性能
2)高可用性
3)全局统一命名空间
4)弹性卷管理
5)基于标准协议3.GlusterFS术语
1)Brick:存储服务器:实际存储用户数据的服务器
2)Volume: 本地文件系统的“分区”
3)FUSE:用户空间的文件系统(类比EXT4),“这是一个伪文件系统”,FUSE (用户空间的文件系统)伪文件系统用户端的交互模块。
4)VFS
5)GlusterdVES (虚拟端口) :内核态的虚拟文件系统,用户是先提交请求交给VES然后VFS交给FUSE再交给GFS客户端,最后由客户端交给远端的存储。 以本地文件系统为例,用户想要读写一个文件,会借助于EXT4文件系统,然后把数据写在磁盘上,而如果是远端的GFS,客户端的请求则应该交给FUSE(为文件系统),就可以实现跨界点存储在GFS上。 使用GFS会使用到以上的虚拟文件系统 glusterd (服务)是运行在存储节点的进程 客户端运行的是gluster client 整个GFS之间的交互是由Gluster client和glusterd完成的 (GFS使用过程)。
4.模块化堆栈式架构
1)模块化、堆栈式的架构
2)通过对模块的组合,实现复杂的功能GFS的架构
存储服务器,存储节点信息GFS 提供了一个全局统一命名空间
此命名空间提供了一个API,此API 是用户访问GFS服务器中数据的唯一入口。
弹性卷管理: RAIN (基于容错、读写性能等技术)可以在分布式文件系统之上可以使用RAID卷的集中管理。
基于标准协议:客户端和存储服务器交互需要借助网络,而相关的网络协议包括TCP/IP协议。模块化:
类似linux编译安装
很多功能都可以做定制的,通常都是通过软件开发的方式封装为模块,按需使用/不适用GlusterFs
把功能封装为一个个模块,通过加载/调用/启用的方式就可以对应的功能。
堆栈式架构设计:
通过对模块不同功能的组合米实现复杂功能VES:虚拟的内核文件系统,通过VES的API接受请求、处理请求(根据请求,加载模块)
I/O cache:I/O缓存
read ahead :内核文件预读
distribute/stripe: 分布式、条带卷通过加载模块,然后联合多个client端,组成所需要的分布式卷、条带卷等
gige: 千兆网/千兆接口
TCP/IP :网络协议InfiniBand
网络协议,与TCP/IP相比,TCP/IP具有转发丢失数据包的特性,基于此通讯协议可能导致通讯变慢,而IB使用基于信任的、流控制的机制来确保连接完整性,数据包丢失几率小。
RDMA:负责数据传输,有一种数据传输协议,功能:为了解决传输中客户端与服务器端数据处理的延迟。
POSIX:可移植操作系统接口,主要解决不同操作系统间的移植性,然后再转换为逻辑存储(EXT4 +BRICK)。
可以提高GFS的工作效率
Application:客户端或应用程序通过GlusterFSync的挂载点访问数据。
VES: linux 系统内核通过VFS API收到请求并处理
FUSE : VES 将数据递交给FUSE内核文件系统,fuse文件系统则是将数据通过/dev/fuse设备文件递交给了GlusterFS client端。
GlusterFS Client :通过网络将数据传递至远端的GlusterFS Server,并且写入到服务器存储设备上。
read ahead :内核文件预读
工作流程:
客户端在本地发出读写请求,然后交由VES的API接受请求,接受请求后会交给FUSE (内核伪文件系统)FUSE可以模拟操作系统,所以可以对文件系统进行转存,转存的设备位置为: /dev/fuse (用于传输的设备-虚拟设备文件)交给GFS客户端,client 会根据配置文件对数据进行处理,然后再通过TCP网络发送到GFS服务端,并且将数据写到服务器存储设备上。5.GlusterFS的卷类型
1)分布式卷
2)条带卷
3)复制卷
4)分布式条带卷
5)分布式复制卷
6)条带复制卷
7)分布式条带复制卷(1)分布式卷
1)没有对文件进行分块处理
2)通过扩展文件属性保存HASH值
3)支持的底层文件系统有EXT3、EXT4、ZFS、 XFS等
4)没有分块处理,文件只能存在一个server中,效率不提升分布式卷的特点
1)文件分布在不同的服务器,不具备冗余性
2)更容易和廉价地扩展卷的大小
3)单点故障会造成数据丢失
4)依赖底层的数据保护(2)条带卷
1)根据偏移量将文件分成N块(N个条带节点),轮询的存储在每个Brick Server节点
2)存储大文件时,性能尤为突出
3)不具备冗余性,类似Raid0
4)从多个server中同时读取文件,效率提升特点
1)数据被分割成更小块分布到块服务器群中的不同条带区
2)分布减少了负载且更小的文件加速了存取的速度
3)没有数据冗余创建条带卷
创建了一个名为Stripe-volume的条带卷,文件将被分块轮询的存储在Server1:/dir1和Server2:/dir2两个Brick中。
(3)复制卷
1)同一文件保存一份或多份副本
2)因为要保存副本,所以磁盘利用率较低
3)若多个节点上的存储空间不一致,将按照木桶效应取最低节点的容量作为该卷的总容量特点
1)卷中所有的服务器均保存一个完整的副本
2)卷的副本数量可由客户创建的时候决定
3)至少有两个块服务器或更多服务器
4)具备冗余性创建复制卷
创建名为rep-volume的复制卷,文件将同时存储两个副本,分别在Server1 :/dir1和Server2:/dir2两个Brick中
(4)分布式条带卷
1)兼顾分布式卷和条带卷的功能
2)主要用于大文件访问处理
3)至少最少需要4台服务器(5)分布式复制卷
1)兼顾分布式卷和复制卷的功能
2)用于需要冗余的情况
3)创建分布式复制卷
4)创建名为dis-rep的分布式条带卷,配置分布式复制卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)条带卷(默认):类似RAID0,文件被分成数据块并以轮询的方式分布到多个BrickServier上,文件存储以数据块为单位,支持大文件存储,文件越大,读取效率越高。
复制卷(Replica volume) :将文件同步到多个Brick上,使其具备多个文件副本, 属于文件级RAID
具有容错能力。因为数据分散在多个Brick 中,所以读性能得到很大提升,但写性能下降。分布式条带卷(Distribute Stripe volume) : Brick Server 数量是条带数(数据块分布的Brick
数量)的倍数,兼具分布式卷和条带卷的特点。分布式复制卷(Distribute Replica volume) : Brick Server数量是镜像数(数据副本
数量)的倍数,兼具分布式卷和复制卷的特点。条带复制卷(stripe Replica volume) :类似RAID 10,同时具有条带卷和复制卷的特点。
分布式条带复制卷(Distribute Stripe Replicavolume) :三种基本卷的复合卷,通常用于类Map Reduce 应用。
二、GlusterFS 集群
Node1节点: node1/192.168.22.126
磁盘挂载点/dev/sdb1/data/sdb1/dev/sdc1/data/sdc1/dev/sdd1/data/sdd1/dev/sde1/data/sde1Node2节点: node2/192.168.22.168
磁盘挂载点/dev/sdb1/data/sdb1/dev/sdc1/data/sdc1/dev/sdd1/data/sdd1/dev/sde1/data/sde1Node3节点: node1/192.168.22.196
磁盘挂载点/dev/sdb1/data/sdb1/dev/sdc1/data/sdc1/dev/sdd1/data/sdd1/dev/sde1/data/sde1Node4节点: node1/192.168.22.206
磁盘挂载点/dev/sdb1/data/sdb1/dev/sdc1/data/sdc1/dev/sdd1/data/sdd1/dev/sde1/data/sde1客户端节点: 192.168.22.186
1.准备环境(所有node节点上操作)
(1)关闭防火墙
systemctl stop firewalld systemctl disable firewalld setenforce 0
(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]) 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 /opt/fdisk.sh cd /opt/ ./fdisk.sh 使用df-hT确认是否全部分区挂载完成
(3)配置/etc/hosts文件
以Node1节点为例:
echo "192.168.22.126 node01" >> /etc/hosts echo "192.168.22.168 node02" >> /etc/hosts echo "192.168.22.196 node03" >> /etc/hosts echo "192.168.22.206 node04" >> /etc/hosts
2.安装、启动GlusterFS。(所有node节点上操作)
cd /etc/yum.repos.d/ mkdir repo.bak mv *.repo repo.bak unzip gfsrepo.gzip vim glfs.repo [glfs] name=glfs baseurl=file:///opt/gfsrepeo gpgcheck=0 enabled=1 yum clean all && yum makecache yum -y install centos-release-gluster 如采用官方yum 源安装,可以直接指向互联网仓库 yum -y install glusterfs-server glusterfs-rdma glusterfs glusterfs-fuse systemctl start glusterd.service systemctl enable glusterd.service systemctl status glusterd.service
安装时出现以下错误,现在装的rpm版本比repo源里的版本高。先查询后,找到名字在卸载
先安装glusterfs-server glusterfs-rdma
添加DNS,进行时间同步
ntpdate ntp1.aliyun.com
3.添加节点到存储信任池中(在node1 节点上操作)
只要在一台Node节点上添加其它节点即可
gluster peer probe node01 gluster peer probe node02 gluster peer probe node03 gluster peer probe node04
在每个Node节点上查看群集状态
gluster peer status
4.创建卷
根据规划创建
卷名称卷类型Brickdis-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)(1)创建分布式卷
1)创建分布式卷,没有指定类型,默认创建的是分布式卷
gluster volume create dis-volume node1: /data/sdb1 node2:/data/sdb1 force
2)查看卷列表
gluster volume list
3)启动新建分布式卷
gluster volume start dis-volume
4)查看创建分布式卷信息
gluster volume info dis-volume
(2)创建条带卷
指定类型为stripe,数值为2,且后面跟了2个Brick Server, 所以创建的是条带卷。
gluster volume create stripe-volume stripe 2 node01:/data/sdc1 node02:/data/sdc1 force gluster volume start stripe-volume gluster volume info stripe-volume
(3) 创建复制卷
指定类型为replica, 数值为2,且后面跟了2个Brick Server, 所以创建的是复制卷。
gluster volume create rep-volume replica 2 node03:/data/sdb1 node04:/data/sdb1 force gluster volume start rep-volume gluster volume info rep-volume
(4)创建分布式条带卷
指定类型为stripe, 数值为2,而且后面跟了4个Brick Server,是2的两倍,所以创建的是分布式条带卷。
gluster volume create dis-stripe stripe 2 node01:/data/sdd1 node02:/data/sdd1 node03: /data/sdd1 node04:/data/sdd1 force gluster volume start dis-stripel gluster volume info dis-stripe
(5)创建分布式复制卷
指定类型为replica, 数值为2,而且后面跟了4个Brick Server, 是2的两倍,所以创建的是分布式复制卷。
gluster volume create dis-rep replica 2 node01:/data/sde1 node02:/data/sde1 node03:/data/sde1 node04:/data/sde1 force gluster volume start dis-rep gluster volume info dis-rep gluster volume list
5.Gluster客户端
(1)安装客户端软件
cd /etc/yum.repos.d/ mkdir repo.bak mv *.repo repo.bak vim glfs.repo [glfs] name=glfs baseurl=file:/L Lopt /gfsrepe : gpgcheck=0 enabled=1 yum clean all && yum makecache yum -y install glusterfs-fuse glusterfs
(2)创建挂载目录
mkdir -p /test/{dis,stripe,rep,dis_stripe,dis_rep} ls /test
(3)配置/etc/hosts 文件
echo "192.168.22.126 node01" >> /etc/hosts echo "192.168.22.168 node02" >> /etc/hosts echo "192.168.22.196 node03" >> /etc/hosts echo "192.168.22.206 node04" >> /etc/hosts
(4)挂载Gluster 文件系统
1)临时挂载
mount.glusterfs node01:dis-volume /test/dis mount.glusterfs node01:stripe-volume /test/stripe mount.glusterfs node01:rep-volume /test/rep mount.glusterfs node01:dis-stripe /test/dis_stripe mount.glusterfs node01:dis-rep /test/dis_rep df -Th
2)永久挂载
vim /etc/ fstab node01:dis-volume /test/dis glusterfs defaults,_netdev 0 0 node01:stripe-volume /test/stripe glusterfs defaults,_netdev 0 0 node01:rep-volune /test/rep glusterfs defaults,_netdev 0 0 node01:dis-stripe /test/dis_stripe glusterfs defaults,_netdev 0 0 node01:dis-rep /test/dis_rep glusterfs defaults,_netdev 0 0
6.测试Gluster 文件系统
(1)卷中写入文件,客户端操作
cd /opt dd if=/dev/zero of=/opt/demo1.log bs=1M count=20 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 ls -1h /opt cp demo* /test/dis cp demo* /test/stripe/ cp demo* /test/rep/ cp demo* /test/dis_stripe/ cp demo* /test/dis_rep/
(2)查看文件分布
查看分布式文件分布
ls -lh /data/sdb1 数据没有被分片 ll -h /data/sdb1
查看条带卷文件分布
ls -lh /data/sdc1 数据被分片50%没副本没冗余 ll -h /data/sdc1 数据被分片50%没副本没冗余
查看复制卷分布
ll -h /data/sdb1 数据没有被分片有副本有冗余 ll -h /data/sdb1 数据没有被分片有副本有冗余
查看分布式条带卷分布
ll -h /data/sdd1 数据被分片50%没副本没冗余 ll -h /data/sdd1 ll -h /data/sdd1 ll -h /data/sdd1
查看分布式复制卷分布
数据没有被分片有副本有冗余
ll -h /data/sde1 ll -h /data/sde1 ll -h /data/sde1 ll -h /data/sde1
7.破坏性测试
挂起node2节点或者关闭glusterd服务来模拟故障
systemctl stop glusterd.service
在客户端上查看文件是否正常
分布式卷数据查看ll 在客户上发现少了demo5.1og文件,这个是在node2上的
条带卷
cd stripe/ 无法访问,条带卷不具备冗余性
分布式条带卷
ll 无法访问,分布条带卷不具备冗余性
分布式复制卷
ll 可以访问,分布式复制卷具备冗余性
挂起node2和node4 节点,在客户端上查看文件是否正常
测试复制卷是否正常ls -l 在客户机上测试正常数据有
测试分布式条卷是否正常
ll 在客户机上测试正常没有数据
测试分布式复制卷是否正常
ll 在客户机上测试正常有数据
8.其他的维护命令
(1)查看GlusterFs卷
gluster volume list
(2)查看所有卷的信息
gluster volume info
(3)查看所有卷的状态
gluster volume status
(4)停止一个卷
gluster volume stop dis-stripe
(5)删除一个卷
注意:删除卷时,需要先停止卷,且信任池中不能有主机处于宕机状态,否则删除不成功
gluster volume delete dis-stripe
(6)设置卷的访问控制
1)仅拒绝
gluster volume set dis-rep auth.allow 192.168.22.100
2)仅允许
gluster volume set dis-rep auth.allow 192.168.22.* 设置192.168.22.0网段的所有IP地址都能访问dis-rep卷( 分布式复制卷)
版权归原作者 Drw_Dcm 所有, 如有侵权,请联系我们删除。