Glusterfs分布式

一、分布式文件系统介绍

分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源并不直接与本地节点相连,而是分布于计算网络中的一个或者多个节点的计算机上。目前意义上的分布式文件系统大多都是由多个节点计算机构成,结构上是典型的客户机/服务器模式。流行的模式是当客户机需要存储数据时,服务器指引其将数据分散的存储到多个存储节点上,以提供更快的速度,更大的容量及更好的冗余特性。

二、GlusterFS概述

GlusterFS系统是一个可扩展的网络文件系统,具有高扩展性、高可用性、高性能、可横向扩展等特点,并且其没有元数据服务器的设计,让整个服务没有单点故障的隐患。

三、GFS 专业术语

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

四、工作流程

在这里插入图片描述

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

五、GlusterFS 支持卷的类型

基本卷
distribute volume:分布式卷
文件通过HASH算法分布到所有Brick Server上,一个节点的磁盘损坏,数据丢失
stripe volume:条带卷
文件被分成数据块并以轮询的方式分布到多个Brick Server上,文件存储以数据块为单位,支持大文件存储,文件越大,读取效率越高
replica volume:复制卷
将文件同步到多个Brick Server上,使其具备多个文件副本,具有容错能力。因为数据分散在多个 Brick 中,所以读性能得 到很大提升,但写性能下降。
复合卷
distribute stripe volume:分布式条带卷
Brick Server 数量是条带数(数据块分布 的 Brick 数量)的倍数,兼具分布式卷和条带卷的特点。
distribute replica volume:分布式复制卷
Brick Server 数量是镜像数(数据副本 数量)的倍数,兼具分布式卷和复制卷的特点
stripe replica volume:条带复制卷
类似 RAID 10,同时具有条带卷和复制卷的 特点
distribute stripe replicavolume:分布式条带复制卷
三种基本卷的复合卷,通常 用于类 Map Reduce 应用

六、实验

实验环境:所有节点添加四块磁盘
Node1节点:192.168.177.100
磁盘:/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
挂载点:/data/sdb1 /data/sdc1 /data/sdd1 /data/sde1

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

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

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

客户端节点:192.168.177.116

步骤一:环境准备:关闭防火墙、seLinux、ntp同步时钟(所有节点)

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
ntp ntp1.aliyun.com

步骤二:磁盘分区并挂载(所有node节点都做)
编辑分区挂载脚本

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)
        #本地磁盘就退出case语句
        fdisk -l /dev/sda   
        break ;;
    sd[b-z])
        #免交互磁盘分区
        echo "n    ##创建磁盘
                p
                
                
           
                w"  | fdisk /dev/$VAR
 
		#格式化文件系统
        mkfs.xfs -i size=512 /dev/${VAR}"1" &> /dev/null    
		#创建挂载目录
        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 //依次执行4次,分别将对应的磁盘挂载到对应的挂载点。示例:/dev/sdb1 --> /data/sdb1

步骤三:修改主机名,并添加映射(所有节点都做)

//以Node1节点为例:
hostnamectl set-hostname node1
echo "192.168.177.100 node1" >> /etc/hosts
echo "192.168.177.110 node2" >> /etc/hosts
echo "192.168.177.111 node3" >> /etc/hosts
echo "192.168.177.130 node4" >> /etc/hosts
echo "192.168.177.116 client" >> /etc/hosts

步骤四:安装并启动GlusterFS(所有node做)
提前上传软件库gfsrepo到opt目录下

//备份yum源的repo文件
cd /etc/yum.repos.d/
mkdir repo.bak
mv *.repo repo.bak
//解压
unzip gfsrepo.zip
//配置本地yum源
vim /etc/yum.repos.d/glfs.repo
[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
//重建yum源缓存
yum clean all && yum makecache
//安装需要的组件
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma

如果yum安装的时候报以上错误,是因为高低版本不兼容导致,手动卸载(又几个卸载几个)
例如上图的 glusterfs-libs-3.12.2-18.e17.x86_64 就需要手动卸载
rpm卸载需要忽略依赖关系,使用 --nodeps
示例:rpm -e --nodeps glusterfs-libs

//启动、开机自启并查看运行状态
systemctl start glusterd.service 
systemctl enable glusterd.service
systemctl status glusterd.service

步骤五:添加节点到存储信任池中(在 node1 节点上操作)

gluster peer probe node1
gluster peer probe node2
gluster peer probe node3
gluster peer probe node4

步骤六:在每个Node节点上查看群集状态

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)

1、创建分布式卷

#创建分布式卷,没有指定类型,默认创建的是分布式卷
gluster volume create dis-volume node1:/data/sdb1 node2:/data/sdb1 force	
#启动新建分布式卷
gluster volume start dis-volume
#查看创建分布式卷信息
gluster volume info dis-volume

2、创建条带卷

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

3、创建复制卷

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

4、创建分布式条带卷

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

5、创建分布式复制卷

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

6、查看
查看卷列表

gluster volume list

步骤八:部署 Gluster 客户端
安装客户端软件,提前将gfsrepo 软件上传到/opt目下

cd /etc/yum.repos.d/
mkdir repo.bak
mv *.repo repo.bak

本地yum源配置

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

创建挂载目录

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

配置 /etc/hosts 文件

echo "192.168.226.128 node1" >> /etc/hosts
echo "192.168.226.129 node2" >> /etc/hosts
echo "192.168.226.130 node3" >> /etc/hosts
echo "192.168.226.131 node4" >> /etc/hosts
echo "192.168.226.132 client" >> /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

测试 Gluster 文件系统
创建空文件

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

把创建的所有文件分别存到不同的卷中

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

查看文件分布
1、查看分布式卷的文件分布:node1(/data/sdb1)、node2(/data/sdb1)
在这里插入图片描述

数据没有被分片,分别存储在node1(/data/sdb1)、node2(/data/sdb1)

2、查看条带卷的文件分布:node1(/data/sdc1)、node2(/data/sdc1)
在这里插入图片描述

数据被分片50%,平均的存储在 node1(/data/sdc1)、node2(/data/sdc1)

3、查看复制卷的文件分布:node3(/data/sdb1)、node4(/data/sdb1)
在这里插入图片描述

数据没有被分片 有副本 有冗余

4、查看分布式条带卷的文件分布:node1(/data/sdd1)、node2(/data/sdd1)、node3(/data/sdd1)、node4(/data/sdd1)
在这里插入图片描述

数据被分片50% 没副本 没冗余

5、查看分布式复制卷的文件分布:node1(/data/sde1)、node2(/data/sde1)、node3(/data/sde1)、node4(/data/sde1)
在这里插入图片描述

数据没有被分片 有副本 有冗余

破坏性测试

挂起 node2 节点,在客户端上查看文件是否正常
1、分布式卷数据查看,发现客户端少了demo5.log,这个文件按原本是在node2节点上的。
在这里插入图片描述

2、条带卷数据查看,因为条带卷将数据分片,此时的文件是不完整的,所以读取不到
在这里插入图片描述

3、复制卷数据查看,数据完整,因为有冗余
在这里插入图片描述

4、分布式条带卷数据查看,只有demo5.log,因为又做了分布式,又做了分片,而demo5.log这个文件是分片又分布在 node3和node4节点上,所以他的数据是完整的,可以看到,而node2节点故障,node1上的文件数据是不完整的,所以无法读取。
在这里插入图片描述

5、分布式复制数据查看,数据完整,具有冗余性
在这里插入图片描述

挂起 node2 和 node4 节点,在客户端上查看文件是否正常
6、再一次查看分布式条带卷数据,这一次demo5.log的文件也不完整了,所有所有数据都无法读取
在这里插入图片描述

7、查看分布式复制卷数据,依然是读取到数据的
在这里插入图片描述

通过以上的实验可以看出,凡是带复制的,数据都是比较安全的

其他的维护命令

查看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.226.100
仅允许
gluster volume set dis-rep auth.allow 192.168.226.* #设置192.168.226.0网段的所有IP地址都能访问dis-rep卷(分布式复制卷)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值