GFS简介

发布时间 2023-04-06 09:07:18作者: menglang

一:文件系统(FS)概述

1.1文件系统的组成

接口:文件系统接口

功能模块(管理、存储的工具):对对象管理里的软件集合

对象及属性:(使用此文件系统的消费者)

1.2文件系统的作用

从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统

主要负责为用户建立文件、存入、读出、修改、转储文件,控制文件的存取

1.3文件系统的挂载使用

除了和文件系统以外的文件系统创建后要使用需要先挂载至挂载点后才可以被访问

挂载点即分区设备文件关联的某个目录文件

类比NFS(外部的文件系统),使用挂载的方式才可以让本地系统来使用外部的文件系统的功能

例如:配置永久挂载时,我们会写入挂载点与挂载目录,还有文件系统的名称(xfs),文件类型格式等。我们在远程跨服务器使用GFS分布式文件系统,挂载时也需要指定其文件格式(GlusterFS)


二:GFS分布式文件系统

2.1GFS简介

GFS是一个可扩展、开源的分布式文件系统(可以很好的体现出弹性伸缩的特点),用于大型的、分布式的、对大量数据进行访问的应用,在传统的解决方案中,GFS 能够灵活的结合物理的,虚拟的和云资源去体现高可用和企业级的性能存储

由存储服务器、客户端以及NFS/Samba 存储网关(可选,根据需要选择使用)组成。

没有元数据服务器组件,这有助于提升整个系统的性能、可靠性和稳定性。

GFS由三个组件组成

(1)存储服务器(Brick Server)

(2)客户端(不在本地)(且,有客户端,也会有服务端,这点类似于NFS,但是更为复杂)

(3)存储网关(NFS/Samaba)

注:没有元数据服务器组件,这有助于提升整个系统的性能、可靠性和稳定性。

无元数据服务器: 元数据是核心,描述对象的信息,影响其属性; 例如NFS,存放数据本身,是一个典型的元数据服务器可能存在单点故障,故要求服务器性能较高,服务器一旦出现故障就会导致数据丢失; 反过来看,所以无元数据服务不会有单点故障。 那么数据存放在哪里呢?会借用分布式的原则,分散存储,不会有一个统一的数据服务器

2.2GFS和传统的分布式文件系统(MFS)的区别

传统的分布式文件系统大多通过元服务器来存储元数据,元数据包含存储节点上的目录信息、目录结构等。这样的设计在浏览目录时效率高,但是也存在一些缺陷,例如单点故障。一旦元数据服务器出现故障,即使节点具备再高的冗余性,整个存储系统也将崩溃。而 GlusterFS 分布式文件系统是基于无元服务器的设计,数据横向扩展能力强,具备较高的可靠性及存储效率。

GlusterFS同时也是Scale-Out(横向扩展)存储解决方案Gluster的核心,在存储数据方面具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。局命名空间来管理数据。

2.3GFS的特点

2.3.1扩展性和高性能

可扩展性,扩展节点,通过多节点提高性能

GlusterFS利用双重特性来提供高容量存储解决方案。 (1)Scale-Out架构允许通过简单地增加存储节点的方式来提高存储容量和性能(磁盘、计算和I/O资源都可以独立增加),支持10GbE和 InfiniBand等高速网络互联。 (2)Gluster弹性哈希(ElasticHash)解决了GlusterFS对元数据服务器的依赖,改善了单点故障和性能瓶颈,真正实现了并行化数据访问。GlusterFS采用弹性哈希算法在存储池中可以智能地定位任意数据分片(将数据分片存储在不同节点上),不需要查看索引或者向元数据服务器查询。

2.3.2高可用性

不存在单点故障,有备份机制,类似Raid的容灾机制

GlusterFS可以对文件进行自动复制,如镜像或多次复制,从而确保数据总是可以访问,甚至是在硬件故障的情况下也能正常访问。 当数据出现不一致时,自我修复功能能够把数据恢复到正确的状态,数据的修复是以增量的方式在后台执行,几乎不会产生性能负载。 GlusterFS可以支持所有的存储,因为它没有设计自己的私有数据文件格式,而是采用操作系统中主流标准的磁盘文件系统(如EXT3、XFS等)来存储文件,因此数据可以使用传统访问磁盘的方式被访问。

2.3.3全局统一命名空间

类比 API 的性质/概念,系统里根据他命名所定义的隔离区域,是一个独立空间;统一的名称空间,与客户端交互,把请求存放至后端的块数据服务器

分布式存储中,将所有节点的命名空间整合为统一命名空间,将整个系统的所有节点的存储容量组成一个大的虚拟存储池,供前端主机访问这些节点完成数据读写操作。

2.3.4弹性卷管理

方便扩容及对后端存储集群的管理与维护,较为复杂

GlusterFS通过将数据储存在逻辑卷中,逻辑卷从逻辑存储池进行独立逻辑划分而得到。 逻辑存储池可以在线进行增加和移除,不会导致业务中断。逻辑卷可以根据需求在线增长和缩减,并可以在多个节点中实现负载均衡。 文件系统配置也可以实时在线进行更改并应用,从而可以适应工作负载条件变化或在线性能调优。

2.3.5基于标准协议

基于标准化的文件使用协议,让 CentOS 兼容 GFS

Gluster 存储服务支持 NFS、CIFS、HTTP、FTP、SMB 及 Gluster原生协议,完全与 POSIX 标准(可移植操作系统接口)兼容。 现有应用程序不需要做任何修改就可以对Gluster 中的数据进行访问,也可以使用专用 API 进行访问。

三:GFS专业术语

3.1Brick(块存储服务器)

实际存储用户数据的服务器

指可信主机池中由主机提供的用于物理存储的专用分区,是GlusterFS中的基本存储单元,同时也是可信存储池中服务器上对外提供的存储目录。 存储目录的格式由服务器和目录的绝对路径构成,表示方法为 SERVER:EXPORT,如 192.168.137.20:/data/mydir/。

3.2Volume(逻辑卷)

本地文件系统的 "分区"

一个逻辑卷是一组 Brick 的集合。卷是数据存储的逻辑设备,类似于 LVM 中的逻辑卷。大部分 Gluster 管理操作是在卷上进行的。

3.3FUSE

是一个内核模块,允许用户创建自己的文件系统,无须修改内核代码

用户 空间的文件系统(类比EXT4),“这是一个伪文件系统”;以本地文件系统为例,用户想要读写一个文件,会借助于EXT4文件系统,然后把数据写在磁盘上;而如果是远端的GFS,客户端的请求则应该交给FUSE(为文件系统),就可以实现跨界点存储在GFS上

3.4VFS(虚拟端口)

内核空间对用户空间提供的访问磁盘的接口

内核态的虚拟文件系统,用户是先提交请求交给VFS然后VFS交给FUSE,再交给GFS客户端,最后由客户端交给远端的存储

3.5Glusterd(后台管理进程):服务端

在存储群集中的每个节点上都要运行

运行再存储节点的进程(客户端运行的是gluster client)GFS使用过程中整个GFS之间的交换由Gluster client 和glusterd完成

四:GlusterFS构成

模块化堆栈式架构

  • 模块化、堆栈式的架构

  • 通过对模块的组合,实现复杂的功能

1、API:应用程序编程接口 2、模块化:每个模块可以提供不同的功能 3、堆栈式:同时启用多个模块,多个功能可以组合,实现复杂的功能

五:GlusterFS 的工作原理

5.1GlusterFS 的工作流程

img

工作流程:

(1)客户端或应用程序通过 GlusterFS 的挂载点访问数据;

(2)linux系统内核通过 VFS API 虚拟接口收到请求并处理;

(3)VFS 将数据递交给 FUSE 内核文件系统,这是一个伪文件系统,这个伪文件系统主要用来转存,它提供一个虚拟接口,映射出来/dev/fuse这样一个虚拟路径,并向系统注册一个实际的文件系统 FUSE,而 FUSE 文件系统则是将数据通过 /dev/fuse 设备文件递交给了 GlusterFS client 端。可以将 FUSE 文件系统理解为一个代理

(4)GlusterFS client 会实时监听/dev/fuse下的数据,一旦数据更新,会把数据拿过来,client 根据配置文件的配置对数据进行处理

(5)经过 GlusterFS client 处理后,通过网络将数据传递至远端的 GlusterFS Server,server会先转存到本地的vfs虚拟文件系统中,然后再通过vfs转存到EXT3上。EXT3指的是各个block块中的EXT3文件系统中。

服务器详解:

Application:客户端或应用程序通过GlusterFSync的挂载点访问数据

VFS:linux系统内核通过VFS的API 收到请求并处理

FUSE:VFS将数据递交给FUSE内核文件系统,fuse文件系统则是将数据通过/dev/fuse设备文件递交给了GlusterFS

GlusterFS Client :通过网络将数据传递至远端的GlusterFS Server, 并且写入到服务器存储设备上

5.2后端存储如何定位文件

通过弹性HASH算法

弹性 HASH 算法是 Davies-Meyer 算法的具体实现,通过 HASH 算法可以得到一个 32 位的整数范围的 hash 值

假设逻辑卷中有 N 个存储单位 Brick,则 32 位的整数范围将被划分为 N 个连续的子空间,每个空间对应一个 Brick。

当用户或应用程序访问某一个命名空间时,通过对该命名空间计算 HASH 值,根据该 HASH 值所对应的 32 位整数空间定位数据所在的 Brick

六:GlusterFS的卷类型

基本卷

(1) distribute volume:分布式卷



(2) stripe volume:条带卷



(3) replica volume:复制卷

复合卷

(4) distribute stripe volume:分布式条带卷



(5) distribute replica volume:分布式复制卷



(6) stripe replica volume:条带复制卷



(7) distribute stripe replicavolume:分布式条带复制卷

6.1分布式卷(Distribute volume)

简单来说,就是如果有10个文件,如果不用分布式卷,这10个文件会放在一台服务器上,对于分布式而言,这10文件是会分布在不同的服务器节点上进行保存

文件通过 HASH 算法分布到所有 Brick Server 上,这种卷是 GlusterFS 的默认卷;以文件为单位根据 HASH 算法散列到不同的 Brick

其实只是扩大了磁盘空间,如果有一块磁盘损坏,数据也将丢失,属于文件级的 RAID0, 不具有容错能力。

在该模式下,并没有对文件进行分块处理,文件直接存储在某个 Server 节点上。 由于直接使用本地文件系统进行文件存储, 所以存取效率并没有提高,反而会因为网络通信的原因而有所降低。

分布式卷特点:

文件分布在不同的服务器,不具备冗余性。



更容易和廉价地扩展卷的大小。



单点故障会造成数据丢失。



依赖底层的数据保护。

分布式卷原理:

File1 和 File2 存放在 Server1,而 File3 存放在 Server2,文件都是随机存储,一个文件(如 File1)要么在 Server1 上,要么在 Server2 上,不能分块同时存放在 Server1和 Server2 上

创建分布式卷:

创建一个名为dis-volume的分布式卷,文件将根据HASH分布在server1:/dir1、server2:/dir2和server3:/dir3中gluster volume create dis-volume server1:/dir1 server2:/dir2 server3:/dir3

案例:

4个文件 2个brick存储服务器3个文件放在第一个brick块中,第四个文件放在第二个brick块中

6.2条带卷 (Stripe volume)

类似 RAID0,文件被分成数据块并以轮询的方式分布到多个 Brick Server 上,文件存储以数据块为单位,支持大文件存储, 文件越大,读取效率越高,但是不具备冗余性

条带卷特点:

数据被分割成更小块分布到块服务器群中的不同条带区



轮询的存储在每个Brick Serve节点



分布减少了负载且更小的文件加速了存取的速度



在存储大文件时,性能尤为突出



没有数据冗余,类似于Raid 0

条带卷原理:

File 被分割为 6 段,1、3、5 放在 Server1,2、4、6 放在 Server2

创建条带卷:

创建了一个名为stripe-volume的条带卷,文件将被分块轮询的存储在Server1:/dir1和Server2:/dir2两个Brick中gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2

案例:

100个文件  50+50

6.3复制卷(Replica volume)

将文件同步到多个 Brick 上,比如说我有五个文件,这5个文件是一个整体,放在服务器A上,复制卷会帮我们复制一份复制在服务器B上。属于文件级 RAID 1,具有容错能力。因为数据分散在多个 Brick 中,所以读性能得到很大提升,但写性能下降。复制卷具备冗余性,即使一个节点损坏,也不影响数据的正常使用。但因为要保存副本,所以磁盘利用率较低

复制卷特点:

卷中所有的服务器均保存一个完整的副本。



卷的副本数量可由客户创建的时候决定,但复制数必须等于卷中 Brick 所包含的存储服务器数。



至少由两个块服务器或更多服务器。



若多个节点上的存储空间不一致,将按照木桶效应取最低节点的容量作为改卷的总容量。



具备冗余性。

复制卷原理:

File1 同时存在 Server1 和 Server2,File2 也是如此,相当于 Server2 中的文件是 Server1 中文件的副本

创建复制卷:

创建名为rep-volume的复制卷,文件将同时存储两个副本,分别在Server1:/dir1和Server2:/dir2两个Brick中gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2

*案例:*

100m 4个文件2个brick服务器



100 * 4文件存在第一个和第二个brick

6.4分布式条带卷(Distribute Stripe volume)

Brick Server 数量是条带数(数据块分布的 Brick 数量)的倍数,兼具分布式卷和条带卷的特点。 主要用于大文件访问处理,创建一个分布式条带卷最少需要 4 台服务器

分布式条带卷原理:

File1 和 File2 通过分布式卷的功能分别定位到Server1和 Server2。在 Server1 中,File1 被分割成 4 段,其中 1、3 在 Server1 中的 exp1 目录中,2、4 在 Server1 中的 exp2 目录中。在 Server2 中,File2 也被分割成 4 段,其中 1、3 在 Server2 中的 exp3 目录中,2、4 在 Server2 中的 exp4 目录中

创建分布式条带卷:

创建一个名为dis-stripe的分布式条带卷,配置分布式的条带卷时,卷中Brick所包含的存储服务器数必须是条带数的倍数(>=2倍)。 Brick 的数量是 4(Server1:/dir1、Server2:/dir2、Server3:/dir3 和 Server4:/dir4),条带数为 2(stripe 2) gluster volume create dis-stripe stripe 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4 创建卷时,存储服务器的数量如果等于条带或复制数,那么创建的是条带卷或者复制卷;如果存储服务器的数量是条带或复制数的 2 倍甚至更多,那么将创建的是分布式条带卷或分布式复制卷。

*案例:*

50 * 3       放在一个 brick



50 * 1       放在第二个brick



50 * 3       放在第三个brick



50 * 1       放在第四个brick

6.5分布式复制卷(Distribute Replica volume)

分布式复制卷(Distribute Replica volume):Brick Server 数量是镜像数(数据副本数量)的倍数,兼具分布式卷和复制卷的特点,主要用于需要冗余的情况下

*分布式复制卷原理:*

File1 和 File2 通过分布式卷的功能分别定位到 Server1 和 Server2。在存放 File1 时,File1 根据复制卷的特性,将存在两个相同的副本,分别是 Server1 中的exp1 目录和 Server2 中的 exp2 目录。在存放 File2 时,File2 根据复制卷的特性,也将存在两个相同的副本,分别是 Server3 中的 exp3 目录和 Server4 中的 exp4 目录

*创建分布式复制卷:*

创建一个名为dis-rep的分布式复制卷,配置分布式的复制卷时,卷中Brick所包含的存储服务器数必须是复制数的倍数(>=2倍)。 Brick 的数量是 4(Server1:/dir1、Server2:/dir2、Server3:/dir3 和 Server4:/dir4),复制数为 2(replica 2) gluster volume create dis-rep replica 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4

*案例:*

100 * 3     放在一个brick



100 * 1     放在第二个brick



100 * 3     放在第三brick



100 * 1     放在第四个brick

6.6条带复制卷(Stripe Replica volume)

类似 RAID 10,同时具有条带卷和复制卷的特点

6.7分布式条带复制卷(Distribute Stripe Replicavolume)

三种基本卷的复合卷,通常用于类 Map Reduce 应用

七:GFS部署

7.1集群环境

Node1节点:node1/192.168.137.20		  磁盘: /dev/sdb1		挂载点: /data/sdb1



											/dev/sdc1				/data/sdc1



											/dev/sdd1				/data/sdd1



											/dev/sde1				/data/sde1



 



Node2节点:node2/192.168.137.15		  磁盘: /dev/sdb1		挂载点: /data/sdb1



											/dev/sdc1				/data/sdc1



											/dev/sdd1				/data/sdd1



											/dev/sde1				/data/sde1



 



Node3节点:node3/192.168.137.10	      磁盘: /dev/sdb1		挂载点: /data/sdb1



											/dev/sdc1				/data/sdc1



											/dev/sdd1				/data/sdd1



											/dev/sde1				/data/sde1



 



Node4节点:node4/192.168.137.30   	  磁盘: /dev/sdb1		挂载点: /data/sdb1



											/dev/sdc1				/data/sdc1



											/dev/sdd1				/data/sdd1



											/dev/sde1				/data/sde1



 



=====客户端节点:192.168.137.50=====

*1、首先,每台节点添加四块磁盘,仅做实验,无需太大*

*2、然后,重启服务器,准备开始部署*

4台node节点添加磁盘sd[b-e]

7.2更改节点名称

node1(192.168.137.20)

hostname node1



su -

node2(192.168.137.15)

hostname node2



su -

node(192.168.137.10)

hostname node3



su -

node(192.168.137.30)

hostname node4



su -

7.3关闭防火墙

systemctl stop firewalld



systemctl disable firewalld



setenforce 0

7.4磁盘进行磁盘挂载,安装本地源

所有节点(这里使用node1作为示范)

vim /opt/fdisk.sh



 



#!/bin/bash



NEWDEV=`ls /dev/sd* | grep -o 'sd[b-z]' | uniq`



for VAR in $NEWDEV



do



   echo -e "n\np\n\n\n\nw\n" | fdisk /dev/$VAR &> /dev/null



   mkfs.xfs /dev/${VAR}"1" &> /dev/null



   mkdir -p /data/${VAR}"1" &> /dev/null



   echo "/dev/${VAR}"1" /data/${VAR}"1" xfs defaults 0 0" >> /etc/fstab



done



mount -a &> /dev/null
chmod +x /opt/fdisk.sh



cd /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

7.5配置/etc/hosts文件

[root@node1 /opt] # echo "192.168.137.20 node1" >> /etc/hosts



[root@node1 /opt] # echo "192.168.137.15 node2" >> /etc/hosts



[root@node1 /opt] # echo "192.168.137.10 node3" >> /etc/hosts



[root@node1 /opt] # echo "192.168.137.30 node4" >> /etc/hosts

7.6安装、启动GlusterFS(所有node节点上操作)

7.6.1将gfsrepo 软件上传到/opt目录下

#上传gfsrepo.zip 至/opt解压缩

root@node1 /opt] # ls



fdisk.sh  rh



[root@node1 /opt] # rz -E



rz waiting to receive.



[root@node1 /opt] # ls



fdisk.sh  gfsrepo.zip  rh



[root@node1 /opt] # unzip gfsrepo.zip 
cd /etc/yum.repos.d/



mkdir repo.bak



mv *.repo repo.bak

7.6.2编译本地仓库

vim /etc/yum.repos.d/glfs.repo



 



[glfs]



name=glfs



baseurl=file:///opt/gfsrepo



gpgcheck=0



enabled=1



 



yum clean all && yum makecache

7.6.3安装

#yum -y install centos-release-gluster			#如采用官方 YUM 源安装,可以直接指向互联网仓库



yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma

如果安装的时候由于版本原因报错

rpm -e --nodeps glusterfs-api 



rpm -e --nodeps glusterfs-libs 



rpm -e --nodeps glusterfs-fuse 



rpm -e --nodeps glusterfs-cli



yum -y install glusterfs-client-xlators.x86_64 



yum -y install glusterfs-api.x86_64 



yum install -y  glusterfs-cli



如果还有其他软件包版本过高,直接卸载,重新安装即可

解决方法,卸载高版本,重新安装

7.6.4启动服务

systemctl start glusterd.service 



systemctl enable glusterd.service



systemctl status glusterd.service

7.6.5建立时间同步

ntpdate ntp1.aliyun.com

7.7添加节点创建集群

添加节点到存储信任池中(仅需在一个节点上操作,我这里依旧在node1节点上操作)

[root@node1 ~] # gluster peer probe node1



peer probe: success. Probe on localhost not needed



[root@node1 ~] # gluster peer probe node2



peer probe: success. 



[root@node1 ~] # gluster peer probe node3



peer probe: success. 



[root@node1 ~] # gluster peer probe node4



peer probe: success. 



 



 



在每个node节点上查看群集状态



[root@node1 ~] # gluster peer status



Number of Peers: 3

7.8根据规划创建卷

========根据以下规划创建卷=========



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

7.8.1创建分布式卷

#创建分布式卷,没有指定类型,默认创建的是分布式卷



 



[root@node1 ~] # gluster volume create dis-volume node1:/data/sdb1 node2:/data/sdb1 force



volume create: dis-volume: success: please start the volume to access data



 



#查看卷列表



[root@node1 ~] # gluster volume list



dis-volume



 



#启动新建分布式卷



[root@node1 ~] # gluster volume start dis-volume



volume start: dis-volume: success



 



#查看创建分布式卷信息



[root@node1 ~] # gluster volume info dis-volume

7.8.2创建条带卷

#指定类型为 stripe,数值为 2,且后面跟了 2 个 Brick Server,所以创建的是条带卷



 



[root@node1 ~] # gluster volume create stripe-volume stripe 2 node1:/data/sdc1 node2:/data/sdc1 force



volume create: stripe-volume: success: please start the volume to access data



 



[root@node1 ~] # gluster volume start stripe-volume



volume start: stripe-volume: success



 



[root@node1 ~] # gluster volume info stripe-volume

7.8.3创建复制卷

#指定类型为 replica,数值为 2,且后面跟了 2 个 Brick Server,所以创建的是复制卷



 



[root@node1 ~] # gluster volume create rep-volume replica 2 node3:/data/sdb1 node4:/data/sdb1 force



volume create: rep-volume: success: please start the volume to access data



 



[root@node1 ~] # gluster volume start rep-volume



volume start: rep-volume: success



 



[root@node1 ~] # gluster volume info rep-volume

7.8.4创建分布式条带卷

指定类型为 stripe,数值为 2,而且后面跟了 4 个 Brick Server,是 2 的两倍,所以创建的是分布式条带卷

[root@node1 ~] # gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force



volume create: dis-stripe: success: please start the volume to access data



 



[root@node1 ~] # gluster volume start dis-stripe



volume start: dis-stripe: success



 



[root@node1 ~] # gluster volume info dis-stripe

7.8.5创建分布式复制卷

指定类型为 replica,数值为 2,而且后面跟了 4 个 Brick Server,是 2 的两倍,所以创建的是分布式复制卷

[root@node1 ~] # gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force



volume create: dis-rep: success: please start the volume to access data



 



[root@node1 ~] # gluster volume start dis-rep



volume start: dis-rep: success



 



[root@node1 ~] # gluster volume info dis-rep 



 



#查看当前所有卷的列表



[root@node1 ~] # gluster volume list

7.9部署gluster客户端

部署Gluster客户端(192.168.137.50)

7.9.1关闭防火墙并安装客户端软件

systemctl stop firewalld



setenforce 0



 



[root@promote ~]#cd /opt



[root@promote opt]#ls



rh



[root@promote opt]#rz -E



rz waiting to receive.



[root@promote opt]#ls



gfsrepo.zip  rh



[root@promote opt]#unzip gfsrepo.zip 



 



root@promote opt]#cd /etc/yum.repos.d/



[root@promote yum.repos.d]#ls



local.repo  repos.bak



[root@promote yum.repos.d]#mv * repos.bak/



mv: 无法将目录"repos.bak" 移动至自身的子目录"repos.bak/repos.bak" 下



[root@promote yum.repos.d]#ls



repos.bak



[root@promote yum.repos.d]#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

7.9.2创建挂载目录

mkdir -p /test/{dis,stripe,rep,dis_stripe,dis_rep}



cd /test/



ls

7.9.3配置/etc/hosts 文件

echo “192.168.137.20 node1” >> /etc/hosts



echo “192.168.137.15 node2” >> /etc/hosts



echo “192.168.137.10 node3” >> /etc/hosts



echo “192.168.137.30 node4” >> /etc/hosts



echo “192.168.137.50 client” >> /etc/hosts

7.9.4挂载 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

永久挂载

vim /etc/fstab



 



node1:dis-volume	/test/dis				glusterfs		defaults,_netdev	0 0



node1:stripe-volume	/test/stripe			glusterfs		defaults,_netdev	0 0



node1:rep-volume	/test/rep				glusterfs		defaults,_netdev	0 0



node1:dis-stripe	/test/dis_stripe		glusterfs		defaults,_netdev	0 0



node1:dis-rep		/test/dis_rep			glusterfs		defaults,_netdev	0 0

7.10测试Gluster文件系统

7.10.1卷中写入文件,客户端操作

[root@promote test]#cd /opt



[root@promote opt]#dd if=/dev/zero of=/opt/demo1.log bs=1M count=40



记录了40+0 的读入



记录了40+0 的写出



41943040字节(42 MB)已复制,0.0311576 秒,1.3 GB/秒



[root@promote opt]#dd if=/dev/zero of=/opt/demo2.log bs=1M count=40



记录了40+0 的读入



记录了40+0 的写出



41943040字节(42 MB)已复制,0.182058 秒,230 MB/秒



[root@promote opt]#dd if=/dev/zero of=/opt/demo3.log bs=1M count=40



记录了40+0 的读入



记录了40+0 的写出



41943040字节(42 MB)已复制,0.196193 秒,214 MB/秒



[root@promote opt]#dd if=/dev/zero of=/opt/demo4.log bs=1M count=40



记录了40+0 的读入



记录了40+0 的写出



41943040字节(42 MB)已复制,0.169933 秒,247 MB/秒



[root@promote opt]#dd if=/dev/zero of=/opt/demo5.log bs=1M count=40



记录了40+0 的读入



记录了40+0 的写出



41943040字节(42 MB)已复制,0.181712 秒,231 MB/秒



 



ls -lh /opt



[root@promote opt]#cp demo* /test/dis



[root@promote opt]#cp demo* /test/stripe/



[root@promote opt]#cp demo* /test/rep/



[root@promote opt]#cp demo* /test/dis_stripe/



[root@promote opt]#cp demo* /test/dis_rep/

7.10.2查看文件分布

查看分布式文件分布

[root@node1 ~]# ls -lh /data/sdb1					#数据没有被分片



[root@node2 ~]# ll -h /data/sdb1

查看条带卷文件分布

[root@node1 ~]# ls -lh /data/sdc1	#数据被分片50% 没副本 没冗余



root@node2 ~]# ll -h /data/sdc1		#数据被分片50% 没副本 没冗余

查看复制卷分布

[root@node3 ~]# ll -h /data/sdb1					#数据没有被分片 有副本 有冗余     



[root@node4 ~]# ll -h /data/sdb1					#数据没有被分片 有副本 有冗余

查看分布式条带卷分布

[root@node1 ~]# ll -h /data/sdd1					#数据被分片50% 没副本 没冗余



[root@node2 ~]# ll -h /data/sdd1



[root@node3 ~]# ll -h /data/sdd1



[root@node4 ~]# ll -h /data/sdd1

查看分布式复制卷分布

[root@node1 ~]# ll -h /data/sde1   #数据没有被分片 有副本 有冗余



[root@node2 ~]# ll -h /data/sde1



[root@node3 ~]# ll -h /data/sde1



[root@node4 ~]# ll -h /data/sde1

7.11破坏性测试

挂起 node2 节点或者关闭glusterd服务来模拟故障

systemctl stop glusterd.service



 



如没有用,需关机



init 0

在客户端上查看文件是否正常

分布式卷数据查看

ll /test/dis   #在客户端上发现少了demo5.log文件,这个是在node2上的

条带卷数据查看

ll /test/stripe/   #条带卷,无法访问,不具备冗余

分布式条带卷查看

ll /test/dis_stripe/   #无法访问,分布条带卷不具备冗余性

分布式复制卷查看

ll /test/dis_rep/   #可以访问,分布式复制卷具备冗余性

以上,带有复制数据的,数据都比较安全

八:其他维护命令

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.设置卷的访问控制 #仅拒绝 gluster volume set dis-rep auth.allow 192.168.137.100

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

九:总结

GFS数据流向

(1)mysql服务器——>存储数据到挂载目录中/data

(2)mysql数据会优先交给内核的文件系统处理——>GFS客户端处理(本地)

(3)GFS客户端会和GFS服务端进行交互,GFS服务端接收到数据,然后再通过挂载的卷的类型,对应保存在后端block块节点服务器上

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

(1)器——>存储数据到挂载目录中/data

(2)mysql数据会优先交给内核的文件系统处理——>GFS客户端处理(本地)

(3)GFS客户端会和GFS服务端进行交互,GFS服务端接收到数据,然后再通过挂载的卷的类型,对应保存在后端block块节点服务器上

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