Linux GlusterFS file system | GFS distributed file system cluster deployment | super detailed

Introduction to GlusterFS

开源的分布式文件系统
由存储服务器、客户端以及NFS/Samba 存储网关组成
无元数据服务器
文件系统组成:
1、文件系统接口
2、对对像管理的软件集合
3、对象及属性

GlusterFS Features

扩展性和高性能
高可用性
全局统一命名空间
弹性卷管理
基于标准协议

GlusterFS Terminology

1、Brick  (块存储服务器)实际存储用户数据的服务器
2、Volume  本地文件系统的"分区"
3、FUSE    用户空间的文件系统(类别EXT4),”这是一个伪文件系统“,用户端的交换模块
4、VFS    (虚拟端口)内核态的虚拟文件系统,用户是提交请求给VFS 然后VFS交给FUSH,再交给GFS客户端,最后由客户端交给远端的存储
5、Glusterd(服务)是运行再存储节点的进程(客户端运行的是gluster client)GFS使用过程中整个GFS之间的交换由Gluster client 和glusterd完成

GFS workflow

insert image description here

工作流程:

1、客户端或应用程序通过GFS的挂载点访问数据
2、linux系统内容通过VFSAPI收到请求并处理
3、VFS将数据递交给FUSE内核文件系统,fuse文件系统则是将数据通过/dev/fuse设备文件递交给了GlusterFS client端
4、GlusterFS client端收到数据后,会根据配置文件的配置对数据进行处理
5、再通过网络,将数据发送给远端的ClusterFS server,并将数据写入到服务器储存设备上
6、server再将数据转交给VFS伪文件系统,再由VFS进行转存处理,最后交给EXT4

Seven types of volumes supported by GFS

1、分布式卷(默认):文件通过HASH算法分布到所有Brick Server上,这种卷是GFS的基础;以文件为单位根据HASH算法散列到不同的Brick,其实只是扩大了磁盘空间,并不具备容错能力,属于文件级RAID 0

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

3、复制卷(Replica volume):将文件同步到多个Brick上,使其具备多个文件副本,属于文件级RAID 1,具有容错能力。因为数据分散在多个Brick中,所以读性能得到很大提升,但写性能下降

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

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

6、条带复制卷(Stripe Replca volume):类似RAID 10,同时具有条带卷和复制卷的特点

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

GFS server deployment

1.1 Cluster environment

Node1节点:node1/192.168.10.10		  磁盘: /dev/sdb1			挂载点: /data/sdb1
											/dev/sdc1					/data/sdc1
											/dev/sdd1					/data/sdd1
											/dev/sde1					/data/sde1

Node2节点:node2/192.168.10.20		  磁盘: /dev/sdb1			挂载点: /data/sdb1
											/dev/sdc1					/data/sdc1
											/dev/sdd1					/data/sdd1
											/dev/sde1					/data/sde1

Node3节点:node3/192.168.10.30		  磁盘: /dev/sdb1			挂载点: /data/sdb1
											/dev/sdc1					/data/sdc1
											/dev/sdd1					/data/sdd1
											/dev/sde1					/data/sde1

Node4节点:node4/192.168.10.40  	  磁盘: /dev/sdb1			挂载点: /data/sdb1
											/dev/sdc1					/data/sdc1
											/dev/sdd1					/data/sdd1
											/dev/sde1					/data/sde1

insert image description here

1.2 Changing the node name

hostnamectl set-hostname node1
hostnamectl set-hostname node2
hostnamectl set-hostname node3
hostnamectl set-hostname node4

1.3 The node mounts the disk and installs the local source

systemctl stop firewalld
setenforce 0

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  #赋执行权限

./opt/fdisk.sh  #执行脚本

insert image description here
insert image description here

1.4 Hosts file creation mapping relationship

#根据规定的实验环境修改主机名,配置/etc/hosts文件
#以Node1节点为例:
hostnamectl set-hostname node1
echo "192.168.10.10 node1" >> /etc/hosts
echo "192.168.10.20 node2" >> /etc/hosts
echo "192.168.10.30 node3" >> /etc/hosts
echo "192.168.10.40 node4" >> /etc/hosts

insert image description here

1.5 Create a GFS local installation source

node1-node4执行:
#将gfsrepo 软件上传到/opt目录下解压,本博客资源中有gfsrepo.zip包
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
#创建本地glfs的yum源并使用
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
#yum 安装Gluster
#此处若出现依赖关系错误问题则执行一下命令,原因是系统中存在的版本过高需要卸载
yum remove glusterfs-api.x86_64 glusterfs-cli.x86_64 glusterfs.x86_64 glusterfs-libs.x86_64 glusterfs-client-xlators.x86_64 glusterfs-fuse.x86_64 -y

systemctl start glusterd.service      #开启服务
systemctl enable glusterd.service     #开机自启   
systemctl status glusterd.service     #查看服务 

只需在一条node执行:
#添加节点到存储信任池中
gluster peer probe node1
gluster peer probe node2
gluster peer probe node3
gluster peer probe node4
node1-node4执行:
#在每个Node节点上查看群集状态
gluster peer status

insert image description here
Please add a picture description
Please add a picture description

1.6 Create volumes according to plan

卷名称 				卷类型				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.7 Create a distributed volume

#创建分布式卷,没有指定类型,默认创建的是分布式卷
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

Please add a picture description

1.8 Create a striped volume

#指定类型为 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

Please add a picture description

1.9 Create a replicated volume

#指定类型为 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

Please add a picture description

1.20 Create a distributed striped volume

#指定类型为 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

Please add a picture description

1.21 Distributed replicated volumes

#指定类型为 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

Please add a picture description

Two GFS client deployment (192.168.10.50)

2.1 Client gfs environment deployment

客户端执行:
#将gfsrepo 软件上传到/opt目录下解压,本博客资源中有gfsrepo.zip包
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
#创建本地glfs的yum源并使用
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
#yum 安装Gluster
#此处若出现依赖关系错误问题则执行一下命令,原因是系统中存在的版本过高需要卸载
yum remove glusterfs-api.x86_64 glusterfs-cli.x86_64 glusterfs.x86_64 glusterfs-libs.x86_64 glusterfs-client-xlators.x86_64 glusterfs-fuse.x86_64 -y
#创建挂载目录
mkdir -p /test/{
    
    dis,stripe,rep,dis_stripe,dis_rep}
ls /test
#配置/etc/hosts文件
echo "192.168.10.10 node1" >> /etc/hosts
echo "192.168.10.20 node2" >> /etc/hosts
echo "192.168.10.30 node3" >> /etc/hosts
echo "192.168.10.40 node4" >> /etc/hosts
#挂载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

Please add a picture description

2.2 Test the Gluster file system

客户端操作:
#卷中写入文件,客户端操作
cd /opt
dd if=/dev/zero of=/opt/demo1.log bs=1M count=40
dd if=/dev/zero of=/opt/demo2.log bs=1M count=40
dd if=/dev/zero of=/opt/demo3.log bs=1M count=40
dd if=/dev/zero of=/opt/demo4.log bs=1M count=40
dd if=/dev/zero of=![在这里插入图片描述](https://img-blog.csdnimg.cn/7c3bc9657d674084b54e96736fe08c32.png#pic_center)
/opt/demo5.log bs=1M count=40
ls -lh /opt
#产生五个40M的文件在/opt目录下
cp /opt/demo* /test/dis
cp /opt/demo* /test/stripe/
cp /opt/demo* /test/rep/
cp /opt/demo* /test/dis_stripe/
cp /opt/demo* /test/dis_rep/
#将产生在/opt目录下的5个40m文件放入五个卷的挂载点中
 
①验证分布式卷
node1-node2上查看/data/sdb1中是否是每台机器上有demo1-5的一部分且都是40M完整的文件
ll -h /data/sdb1
②验证条带卷
node1-node2上查看/data/sdc1中是否每台机器上都有demo1-5文件且都为20M
ll -h /data/sdc1
③验证复制卷
node3-node4上查看/data/sdb1中是否每台机器上都有demo1-5文件且都为40M
ll -h /data/sdb1
④验证分布式条带卷分布
node1-node4上查看/data/sdd1中是否每台机器上都有demo1-5文件且都为20M
ll -h /data/sdd1
⑤验证分布式复制卷分布
node1-node4上查看/data/sde1中是否每台机器上都有demo1-5的一部分且都是40M完整的文件
ll -h /data/sde1

Please add a picture description
insert image description here

2.21 View distributed volumes and striped volumes

Please add a picture description
Please add a picture description

2.22 View the replicated volume

Please add a picture description
Please add a picture description

2.23 View Distributed Stripe Volume

Please add a picture description

Please add a picture description
Please add a picture description
Please add a picture description

2.24 View the distributed replication volume (30, 40)

Please add a picture description
Please add a picture description

Destruction test

#关闭node2机器验证五个卷,验证时会卡1分钟左右需要等待同步
node2节点的/dev/sdb1磁盘影响分布式卷,客户端dis-volume会缺少一部分文件
node2节点的/dev/sdc1磁盘影响条带卷,客户端stripe-volume中文件为空
node2节点不影响rep-volume卷(node3-node4影响,各有一份完整的数据)
node2节点的/dev/sdd1磁盘影响分布式条带卷,客户端dis-stripe会只剩下一部分文件且无法访问
node2节点的/dev/sdr1磁盘影响分布式复制卷,但是由于有复制,所以客户端中的文件完整且都可以访问
#关闭node2、node4机器验证五个卷,验证时会卡1分钟左右需要等待同步
node2节点的/dev/sdb1磁盘影响分布式卷,客户端dis-volume会缺少一部分文件
node2节点的/dev/sdc1磁盘影响条带卷,客户端stripe-volume中文件为空
node2和node4节点的/dev/sdd1磁盘影响分布式条带卷,客户端中dis-stripe文件中无文件可以访问
node2和node4节点的/dev/sde1磁盘影响分布式复制卷,但是由于有复制,所以客户端中的文件完整且都可以访问

Please add a picture description

Other maintenance commands

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.184.100

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

Guess you like

Origin blog.csdn.net/m0_75015568/article/details/129969413