(づ ̄3 ̄)づ╭❤~GlusterFSt分布式文件系统~~

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、文件系统简介

1、组成

①:接口:文件系统接口
②:功能模块(管理、存储的工具):对对像管理的软件集合
③:对象及属性:(使用此文件系统的消费者)

2、作用

从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统;主要负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取

3、文件系统的挂载使用

除根文件系统以外的文件系统创建后要使用需要先挂载至挂载点后才可以被访问,挂载点即分区设备文件关联的某个目录文件;类比: NFS

二、GlusterFSt分布式文件系统概述

用于存储、管理物理文件(保存磁盘时使用)

1、GlusterFSt简介

用于存储、管理物理文件(保存磁盘时使用)

  1. 开源的分布式文件系统
  2. GFS的组成:由存储服务器(比如块服务器block)、客户端(对象)以及NFS/Samba存储网关组成(接口),三个部分
  3. 无元数据的服务器;
    客户端的定位比较重要,因为他是无元数据服务器的

1.1、元数据服务器的作用

存储元数据,帮用户定位文件的位置、索引等信息
有元数据服务器文件系统中,如果元数据损坏,会直接导致文件系统不可用( 单点故障-服务器定位)
详见下图:若A宕机,就无法获取数据
在这里插入图片描述

而GFS把元数据服务器舍弃了,使用的是数据挂载形式挂载到客户端,挂载的网关是NFS/Samba,实现ABC三台GFS服务器数据共享,即使服务器A宕机,也可以从服务器B/C拿取数据
在这里插入图片描述

2、GlusterFS特点

  1. 扩展性和高性能:分布式特点
  2. 高可用性:分布式特点
  3. 全局统一命名空间:共享资源(名称空间:隔离、独立的整体/环境,与其他名称空间是隔离独立的)
  4. 弹性卷管理:条带、复制、分布式、分布式条带、分布式复制;类似raid
  5. 基于标准协议

3、GlusterFS术语

  1. Brick存储服务器:实际存储用户数据的服务器
  2. Volume:本地文件系统的"分区”
  3. FUSE:用户 空间的文件系统(类比EXT4),“这是一个伪文件系统”;以本地文件系统为例,用户想要读写一个文件,会借助于EXT4文件系统,然后把数据写在磁盘上;而如果是远端的GFS,客户端的请求则应该交给FUSE(为文件系统),就可以实现跨界点存储在GFS上
  4. VFS(虚拟端口) :内核态的虚拟文件系统,用户是先提交请求交给VFS然后VFS交给FUSE,再交给GFS客户端,最后由客户端交给远端的存储
  5. Glusterd(服务):是允许在存储节点的进程

4、模块化堆栈式架构

  1. 模块化、堆栈式的架构
  2. 通过对模块的组合,实现复杂的功能

模块化
类似linux 编译安装;很多功能都可以做定制的,通常都是通过软件开发的方式封装为模块,按需使用/不适用
GlusterFs也是这个思想:把功能封装为一个个模块,通过加载/调用/启用的方式就可以对应的功能
堆栈式架构设计
通过对模块不同功能的组合来实现复杂功能

5、GFS工作流程

  1. 写的过程
  • GFS客户端服务器
    需求:将数据保存在GFS文件系统中(客户端在本地发出写请求)
    • 交由VFS的API接受请求–>组合功能模块,将数据交给FUSE(内核伪文件系统)
    • FUSE可以模拟操作系统,可以对文件系统进行转存,转存的设备位置为: /dev/fuse (用于传输的设备-虚拟设备文件)
    • /dev/fuse 虚拟设备文件会将数据交给GFS客户端
    • GFS客户端client会根据配置文件对数据进行处理,然后再通过TCP/IB/rdma网络发送到GFS服务端
  • GFS服务端服务器
    • 接收到数据之后
    • 会将数据保存在对应的存储节点上
      详见下图
      客户端/应用程序通过GFS的挂载点访问数据
  1. 读取过程:
    客户端在本地发出读请求
  • 交由VFS的API接受请求–>组合功能模块,将数据交给FUSE(内核伪文件系统)
  • FUSE在/dev/fuse (用于传输的设备-虚拟设备文件)查询缓存,执行page函数读取(read)内存,若缓存有,则返回客户端
  • 若没有缓存,GFS客户端会去GFS服务端获取数据,GFS服务端通过VFS接口去本地读取缓存
  • 再把缓存存储在/dev/fuse,读取了缓存数据之后再通过VFS返回给客户端
    详细见下图
    在这里插入图片描述
  1. 提高GFS的工作效率的架构模式
  • gige: 千兆网/千兆接口
  • TCP/IP :网络协议
  • InfiniBand:网络协议,与TCP/IP相比,TCP/IP具有转发丢失数据包的特性,基于此通讯协议可能导致通讯变慢,而IB使用基于信1、流控制的机制来确保连接完整性,数据包丢失几率小。
  • RDMA:负责数据传输,有一种数据传输协议,功能:为了解决传输中客户端与服务器端数据处理的延迟
  • POSIX:可移植操作系统接口,主要解决不同操作系统间的移植性然后再转换为逻辑存储(EXT4 +BRICK)
  1. 各服务器详解
  • Application:客户端或应用程序通过GlusterFSync的挂载点访问数据
  • VFS:linux系统内核通过VFS的API 收到请求并处理
  • FUSE :VFS将数据递交给FUSE内核文件系统,fuse文件系统则是将数据通过/dev/fuse设备文件递交给了GlusterFS
  • GlusterFS Client ;通过网络将数据传递至远端的GlusterFS Server, 并且写入到服务器存储设备上

6、卷的基本分类

为了解决分布式文件数据索引、定位的复杂程度,而使用了HASH算法来辅助
分布式(平均分配)的好处:
当数据量越来越大的时候,相对每个存储节点的数据量(几率)是相等的
而如果考虑到单点故障问题,当数据存储再c存储节点,对此GFS是会有备份机制的,默认3备份,所以GFS本身的机制会对数据产生冗余,以此解决单点故障
GlusterFS支持七种卷,即分布式卷、条带卷、复制卷、分布式条带卷、分布式复制卷、条带复制卷和分布式条带复制卷

  1. 基本卷
    (1) 分布式卷(默认)(distribute volume)
    文件通过HASH算法分布到所有Brick Server上,这种卷是Glusterfs的基础;以文件为单位根据HASH算法散列到不同的Brick, 其实只是扩大了磁盘空间,如果有一块磁盘损坏,数据也将丢失,属于文件级的RAID 0, 不具有容错能力
    比如:4个文件2个brick存储服务器3个文件放在第一个brick块中,第四个文件放在第二个brick块中
    (2) 条带卷(stripe volume)
    类似RAID 0,文件被分成数据块并以轮询的方式分布到多个BrickServer上,文件存储以数据块为单位,支持大文件存储,文件越大,读取效率越高
    比如:100m的数据分成50m+50m分不到不同的服务器上,分布之后是以数据块为单位的
    条带复制卷(Stripe Replica volume) :类似RAID 10, 同时具有条带卷和复制卷的特点
    (3) 分布式条带复制卷(Distribute Stripe Replicavolume)
    三种基本卷的复合卷,通常用于类Map Reduce应用,将文件同步到多个Brick上,使其具备多个文件副本, 属于文件级RAID 1,具有容错能力。因为数据分散在多个Brick中,所以读性能得到很大提升,但写性能下降
    比如:100m 4个文件,2个brick服务器
    100*4 文件均存在第一个和第二个brick
  2. 复合卷
    (4) 分布式条带卷(Distribute Stripe volume)
    Brick Server 数量是条带数(数据块分布的Brick数量)的倍数,兼具分布式卷和条带卷的特点
    比如:503 放在第一个brick
    50
    1 放在第二个brick
    503 放在第三个brick
    50
    1 放在第四个brick
    (5) 分布式复制卷(Distribute Replica volume)
    Brick Server 数量是镜像数(数据副本数量)的倍数,兼具分布式卷和复制卷的特点
    比如:503 放在第一个brick
    50
    1 放在第二个brick
    503 放在第三个brick
    50
    1 放在第四个brick
    (6) 条带复制卷(Stripe Replica volume)
    类似RAID 10, 同时具有条带卷和复制卷的特点
    (7) 分布式条带复制卷(Distribute Stripe Replicavolume)
    三种基本卷的复合卷,通常用于类Map Reduce.应用

三、部署GlusterFSt群集

1、实验环境

节点ip磁盘挂载点
node1192.168.35.40sdb1、sdc1、sdd1、sde1/data
node292.168.35.10sdb1、sdc1、sdd1、sde1/data
node3192.168.35.20sdb1、sdc1、sdd1、sde1/data
node4192.168.35.30sdb1、sdc1、sdd1、sde1/data
client192.168.35.50//
四台服务器均操作
hostname node1		##临时修改主机名;四台节点服务器均需要修改
bash
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

2、使用脚本对硬盘进行分区挂载

vim /opt/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 /opt/fdisk.sh
cd /opt/
sh -x fdisk.sh

在这里插入图片描述

3、配置/etc/hosts文件(所有节点上操作)

echo "192.168.35.40 node1" >> /etc/hosts
echo "192.168.35.10 node2" >> /etc/hosts
echo "192.168.35.20 node3" >> /etc/hosts
echo "192.168.35.30 node4" >> /etc/hosts
echo "192.168.35.50 client" >> /etc/hosts
cat /etc/hosts

在这里插入图片描述

4、安装、启动GFS(所有节点上操作)

gfsrepo压缩包上传至opt目录下
unzip gfsrepo.zip

在这里插入图片描述

cd /etc/yum.repos.d/
mkdir bak
mv CentOS-* bak
vim gfs.repo		##配置yum本地源
	[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
systemctl start glusterd		##开启gluster服务
netstat -antp | grep glusterd

在这里插入图片描述

添加节点到存储信任池中(在node1节点上操作)
gluster peer probe node1
gluster peer probe node2
gluster peer probe node3
gluster peer probe node4
gluster peer status		##在每个节点上查看群集状态

在这里插入图片描述

5、创建卷

根据规划创建如下卷

卷名称卷类型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)
  1. 创建分布式卷
创建分布式卷,没有指定类型,默认创建的是分布式卷
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	##查看创建分布式卷信息

在这里插入图片描述

  1. 创建条带卷
指定类型为 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		##查看创建条带卷信息

在这里插入图片描述

  1. 创建复制卷
#指定类型为 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		##查看创建复制卷信息

在这里插入图片描述

  1. 创建分布式条带卷
指定类型为 stripe,数值为 2,而且后面跟了 4 个 Brick Server,是 2 的两倍,所以创建的是分布式条带卷
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		##查看创建分布式条带卷信息

在这里插入图片描述

  1. 创建分布式复制卷
指定类型为 replica,数值为 2,而且后面跟了 4 个 Brick Server,是 2 的两倍,所以创建的是分布式复制卷
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	##查看创建分布式复制卷信息

在这里插入图片描述

gluster volume list		##查看卷列表

在这里插入图片描述

6、客户端操作

客户端的操作:在node1上创建五个卷后,在客户端上把卷挂载在指定的五个目录内,在目录内写入了五个文件,五个文件分别保存在五个目录里面

  1. 安装客户端软件
实验准备
systemctl stop firewalld
cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 114.114.114.114
ntpdate ntp1.aliyun.com
cd /etc/yum.repos.d/
mkdir repo.bak
mv *.repo repo.bak
vim glfs.repo
	[glfs]
	name=glfs
	baseurl=file:///opt/gfsrepo
	gpgcheck=0
	enabled=1
yum clean all && yum makecache
yum -y install glusterfs glusterfs-fuse

在这里插入图片描述

  1. 创建挂载目录
mkdir -p /test/{dis,stripe,rep,dis_stripe,dis_rep}
ls /test

在这里插入图片描述

  1. 配置 /etc/hosts 文件
echo "192.168.35.40 node1" >> /etc/hosts
echo "192.168.35.10 node2" >> /etc/hosts
echo "192.168.35.20 node3" >> /etc/hosts
echo "192.168.35.30 node4" >> /etc/hosts
echo "192.168.35.50 client" >> /etc/hosts
  1. 挂载 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
df -Th	##查询挂载

在这里插入图片描述

  1. 卷中写入文件,客户端操作
cd /opt
dd if=/dev/zero of=/opt/demo1.log bs=1M count=20	##从/dev/zero内复制文件到opt目录下,命名demo1,大小1M20次,一共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
ls -lh /opt

在这里插入图片描述

cp demo* /test/dis		
cp demo* /test/stripe/
cp demo* /test/rep/
cp demo* /test/dis_stripe/
cp demo* /test/dis_rep/
ls /test/

在这里插入图片描述

7、验证gluster文件系统

gluster服务器上查看文件分布

  1. 查看分布式文件分布
ls -lh /data/sdb1		##没有被分片,文件分开节点存放

在这里插入图片描述

  1. 查看条带卷文件分布
ls -lh /data/sdc1		##查询数据被分片50% 没副本 没冗余

  1. 查看复制卷分布
复制卷放在了node3、node4
ll -h /data/sdb1	##没有被分片,有副本,有冗余  

在这里插入图片描述

  1. 查看分布式条带卷分布
ll -h /data/sdd1		##文件被分片50%,没副本,没冗余

在这里插入图片描述

  1. 查看分布式复制卷分布
ll -h /data/sde1		##数据没有被分片 有副本 有冗余

在这里插入图片描述

8、破坏性测试分布式文件系统

systemctl stop glusterd		##关闭glusterd服务node2节点来模拟故障
ls		##在客户端上查看文件是否正常
查看卷数据是否正常
ls /test/dis		##测试分布式是否正常
ls /test/rep		##测试复制带是否正常
ls /test/stripe		##测试条带是否正常
ll /test/dis_stripe	##测试分布式条带是否正常
ls /test/dis_rep		##测试分布复制带是否正常

在这里插入图片描述
在这里插入图片描述
实验结果证明:只要带复制数据的相比而言,数据比较安全

四、Gluster的其他的维护命令

gluster volume list 	##查看GlusterFS卷
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.35.10		##仅拒绝
gluster volume set dis-rep auth.allow 192.168.35.*	  ##设置192.168.35.0网段的所有IP地址都能访问dis-rep卷(分布式复制卷)#仅允许
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值