分布式文件系统的另一个成员:GFS

一、概述

1、开源的分布式文件系统
2、由存储服务器(块block服务器)、客户端及NFS/Samba存储网关组成
3、无元数据服务器
4、模块化、堆栈式建构
5、通过模块的组合,实现复杂的功能

二、特点

一、分布式特点

1、扩展性和高性能
2、高可用性

二、GFS特点

1、全局同一命名空间(共享资源)
2、弹性管理卷(RAID)
3、基于标准协议(客户端和存储服务器之间交互需要借助网络)

三、术语

术语含义
brick存储服务器:实际存储用户数据的服务器
volume本地文件系统的"分区”
FUSE用户空间的文件系统(类比EXT4)(伪文件系统)以本地文件系统为例,用户想要读写一个文件,会借助于EXT4文件系统,然后把数据写在磁盘上而如果是远端的GFS,客户端的请求则应该交给FUSE(伪文件系统),就可以实现跨界点存储在GFS上
FUSE(用户空间的文件系统)伪文件系统用户端的交互模块
VFS(虚拟端口)内核态的虚拟文件系统,用户是先提交请求交给VFS然后VFS交给FUSE再交给GFS客户端,最后由客户端交给远端的存储

四、GFS工作过程

在这里插入图片描述
Application
客户端或应用程序通过GlusterFSync的挂载点访问数据。
VFS
linux系统内核通过VFS API收到请求并处理。
FUSE
VPS将数据递交给FUSE内核文件系统,fuse文件系统则是将数据通过/dev/fuse设备文件递交给了GFS client端。
GFS Client
通过网络将数据传递至远端的GFS Server,并且写入到服务器存储设备上。

一、写

客户端在本地发出读写请求,然后交由VFS 的API接受请求,接受请求后会交给FUSE(内核伪文件系统),FUSE可以模拟操作系统,所以可以对文件系统进行转存,转存的设备位置为:/dev/fuse(用于传输的设备-虚拟设备文件)交给GFs客户端,client会根据配置文件对数据进行处理,然后再通过TCP/ib/rdma网络发送到GFs服务端,并且将数据写到服务器存储设备上。

二、读

通过page函数调用模块read,读取缓存,如果缓存没有,gfs就数据保存到缓存中。

五、如何提高GFS工作效率

1、gige: 千兆网/干兆接口
2、TCP/IP:网络协议
3、InfiniBand:网络协议,与TCP/IP相比,TCP/IP具有转发丢失数据包的特性,基于此通讯协议可能导致通讯变慢,而1s使用基于信任的、流控制的机制来确保连接完整性,数据包丢失几率小。
4、RDMA:负责数据传输,有一种数据传输协议。
功能:为了解决传输中客户端与服务器端数据处理的延迟。
5、POSIX:可移植操作系统接口,主要解决不同操作系统间的移植性。
6、转换为逻辑存储(EXT4 +BRICK)。

六、卷分类

GFS支持七种卷,即分布式卷、条带卷、复制卷、分布式条带卷、分布式复制卷、条带复制卷和分布式条带复制卷。

一、分布式卷

分布式卷(默认):文件通过HASH算法分布到所有 Brick Server 上,是GFS的基础。以文件为单位根据HASH算法散列到不同的Brick,其实只是扩大了磁盘空间,如果有一块磁盘损坏,数据也将丢失,属于文件级的RAID 0,不具有容错能。
ps
两个brick中,文件的存放:n-1:1

二、条带卷

条带卷(默认):类似RAID0,文件被分成数据块并以轮询的方式分布到多个Brick Server上,文件存储以数据块为单位,支持大文件存储,文件越大,读取效率越高。
ps
文件的存放:1:1

三、复制卷

复制卷(Replica volume):将文件同步到多个Brick 上,使其具备多个文件副本,属于文件级RAID1,具有容错能力。因为数据分散在多个Brick 中,所以读性能得到很大提升,但写性能下降。
ps
文件存放为brick服务器中的文件一致,冗余。

四、分布式条带卷

分布式条带卷(Distribute Stripe volume) : Brick Server 数量是条带数(数据块分布的Brick数量)的倍数,兼具分布式卷和条带卷的特点。

五、分布式复制卷

分布式复制卷(Distribute Replica volume) : Brick Server 数量是镜像数(数据副本数量)的倍数,兼具分布式卷和复制卷的特点。

六、条带复制卷

条带复制卷(stripe Replica volume):类似RAID 10,同时具有条带卷和复制卷的特点。

七、分布式条带复制卷

分布式条带复制卷(Distribute stripe Replicavolume):三种基本卷的复合卷,通常用于类Map Reduce应用。

七、实验

一、部署

实验环境
GFS:
	Node1:129.168.238.150
	Node2:129.168.238.100
	Node3:129.168.238.99
	Node4:129.168.238.133
client:192.168.238.134

四台GFS节点

[root@node1 opt]# cd /opt
[root@node1 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
[root@node1 opt]# chmod +x fdisk.sh #赋予可执行权限
[root@node1 opt]# ./fdisk.sh #进行磁盘分区
[root@node1 opt]# df -Th #查看分区和挂载

在这里插入图片描述

[root@node1 opt]# vim /etc/hosts #每个节点做地址映射

在这里插入图片描述
安装GFS

[root@node1 opt]# cd /etc/yum.repos.d/
[root@node1 yum.repos.d]# mkdir repo.bak
[root@node1 yum.repos.d]# mv *.repo repo.bak
[root@node1 yum.repos.d]# cd /opt
[root@node1 opt]# rz #上传gfsrepo软件包
[root@node1 opt]# unzip gfsrepo.zip #解包
[root@node1 opt]# vim /etc/yum.repos.d/gfs.repo #配置yum本地源
[glfs] 
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0 #不做检测
enabled=1 #启用

[root@node1 opt]# cd /etc/yum.repos.d/
[root@node1 yum.repos.d]# yum clean all && yum makecache
[root@node1 yum.repos.d]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma #yum安装GFS及其组件
[root@node1 yum.repos.d]# systemctl start glusterd #开启服务
[root@node1 yum.repos.d]# netstat -antp | grep glusterd #查看端口
tcp        0      0 0.0.0.0:24007           0.0.0.0:*               LISTEN      20705/glusterd 
[root@node1 yum.repos.d]# ntpdate ntp1.aliyun.com #同步阿里云时钟服务器
添加节点到存储信任池中 (在node1中添加)
[root@node1 yum.repos.d]# gluster peer probe node1
[root@node1 yum.repos.d]# gluster peer probe node2
[root@node1 yum.repos.d]# gluster peer probe node3
[root@node1 yum.repos.d]# gluster peer probe node4
#在每台node节点中查看
[root@node1 yum.repos.d]# gluster peer status #查看集群状态

在这里插入图片描述

二、创建卷

根据规则划分:

卷名称卷类型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)

一、分布式卷

[root@node1 yum.repos.d]# gluster volume create dis-volume node1:/data/sdb1 node2:/data/sdb1 force #创建分布式卷,没有指定类型,默认创建的是分布式卷

在这里插入图片描述

[root@node1 yum.repos.d]# gluster volume list #查看卷列表

在这里插入图片描述

[root@node1 yum.repos.d]# gluster volume start dis-volume #启动新建的分布式卷
[root@node1 yum.repos.d]# gluster volume info dis-volume #查看出创建的分布式卷的信息

在这里插入图片描述

二、条带卷

[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 #查看创建的条带卷信息

在这里插入图片描述

三、复制卷

[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 查看卷

在这里插入图片描述

四、分布式条带卷

[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 #查看卷

在这里插入图片描述
在这里插入图片描述

五、分布式复制卷

[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 #查看卷

在这里插入图片描述

八、验证

一、部署客户端

[root@localhost ~]# cd /opt
[root@localhost opt]# rz #上传软件包
[root@localhost opt]# unzip gfsrepo.zip #解包
[root@localhost opt]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# mkdir repo.bak
[root@localhost yum.repos.d]# mv *.repo repo.bak
[root@localhost yum.repos.d]# vim glfs.repo

在这里插入图片描述

[root@localhost yum.repos.d]# ntpdate ntp.aliyun.com #同步时间
13 Aug 22:05:28 ntpdate[22083]: adjust time server 203.107.6.88 offset 0.000712 sec
[root@localhost yum.repos.d]# yum clean all && yum makecache
[root@localhost yum.repos.d]# yum -y install glusterfs glusterfs-fuse #更新软件包

创建挂载目录

[root@localhost yum.repos.d]# mkdir -p /test/{dis,stripe,rep,dis_stripe,dis_rep}

在这里插入图片描述
域名映射

[root@localhost yum.repos.d]# vim /etc/hosts

在这里插入图片描述
挂载目录

[root@localhost yum.repos.d]# mount.glusterfs node1:dis-volume /test/dis
[root@localhost yum.repos.d]# mount.glusterfs node1:stripe-volume /test/stripe
[root@localhost yum.repos.d]# mount.glusterfs node1:rep-volume /test/rep
[root@localhost yum.repos.d]# mount.glusterfs node1:dis-stripe /test/dis_stripe
[root@localhost yum.repos.d]# mount.glusterfs node1:dis-rep /test/dis_rep

在这里插入图片描述

[root@localhost yum.repos.d]# cd /opt
[root@localhost opt]# dd if=/dev/zero of=/opt/demo1.log bs=1M count=20
[root@localhost opt]# dd if=/dev/zero of=/opt/demo2.log bs=1M count=20
[root@localhost opt]# dd if=/dev/zero of=/opt/demo3.log bs=1M count=20
[root@localhost opt]# dd if=/dev/zero of=/opt/demo4.log bs=1M count=20
[root@localhost opt]# dd if=/dev/zero of=/opt/demo5.log bs=1M count=20

在这里插入图片描述

[root@localhost opt]# cp demo* /test/dis
[root@localhost opt]# cp demo* /test/stripe/
[root@localhost opt]# cp demo* /test/rep/
[root@localhost opt]# cp demo* /test/dis_stripe/
[root@localhost opt]# cp demo* /test/dis_rep/

1、分布式卷
在这里插入图片描述
2、条带卷
在这里插入图片描述
3、复制卷
在这里插入图片描述
4、分布式条带卷
在这里插入图片描述
5、分布式复制卷
在这里插入图片描述
在这里插入图片描述

九、破坏性测试

node2关闭服务
[root@node2 ~]# systemctl stop glusterd

查看客户端/test目录下的文件
在这里插入图片描述
由上图可见,只有带有复制卷的才有冗余,文件才安全。

维护命令
#查看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.238.150

##仅允许
gluster volume set dis-rep auth.allow 192.168.238.*	  #设置192.168.238.0网段的所有IP地址都能访问dis-rep卷(分布式复制卷)

小结:
分布式卷:数据没有被分片,没有冗余
条带卷:数据被分片50%,没有冗余
复制卷:数据没有被分片,有冗余
分布式条带卷:数据被分片50%,没有冗余
分布式复制卷:数据没有被分片,有冗余

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值