GlusterFS 支持七种卷,即分布式卷(理解为通过hash算法达到把数据存放到brick)、条带卷(理解为将数据切片)、复制卷(就是raid1)、分布式条带卷(将数据切片再分布式)、分布式复制卷(复制数据再分布式)、条带复制卷和分布式条带复制卷。
生产环境中 企业80% 用分布式 复制卷 (最少4台机器) 20% 因为机器不够 用复制卷
一 实验环境
首先需要4台机器(66,77,88,99)做服务端(因为分布式复制和分布式条带 最少需要4台机器)安装gfs 提供5大逻辑卷
再用一台55机器 做客户端,分别访问这5大逻辑卷
二 4台服务端准备工作
1,66,77,88,99 四台机器加4块磁盘
2, scan 刷新磁盘供电接口 并查看
3,改主机名,方便后续操作
4,为加快访问速度 写hosts文件 做映射(55客户机也写)
传给其他机器
5,将每个服务端新加的磁盘 格式化并分区
这里为了简略,直接写/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
脚本解释:先过滤出 除sda 的磁盘, 启用for循环 ,VAR 变量调用刚刚的磁盘名
进入fdisk 分区页面 (echo -e 免交互 \n 是换行的意思)
再mkfs 格式化
创建挂载点的文件夹
永久挂载 写到 /etc/fstab 文件中
mount -a 重新挂载一次
将脚本传给其他服务端
给脚本加执行权限 执行脚本
查看是否分区成功
6,所有机器本地yum 安装gfs
生产环境基本是内网,需要手搓本地元安装gfs 这边利用脚本快速到目的。
脚本代码如下:
#!/bin/bash function backuprepo { cd /etc/yum.repos.d mkdir repo.bak mv *.repo repo.bak #mount /dev/sr0 /mnt > /dev/null } makeglfsrepo(){ echo '[glfs] name = glfs baseurl=file:///opt/gfsrepo enabled=1 gpgcheck=0' > glfs.repo } useglfsrepo (){ yum clean all > /dev/null yum makecache > /dev/null } install () { yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma systemctl start glusterd.service systemctl enable glusterd.service systemctl status glusterd.service } #============main============== backuprepo makeglfsrepo useglfsrepo install
脚本解释:backuprepo makeglfsrepo useglfsrepo install
这四个都是函数名,先定义函数,再调用函数。
重点介绍下 install 函数中的 yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
意思是 使用YUM命令无交互式地(
-y
选项)安装GlusterFS客户端、服务器、FUSE模块(允许非特权用户挂载GlusterFS卷)以及RDMA(远程直接内存访问)支持(提高GlusterFS性能)。
#将gfsrepo 软件上传到/opt目录下 解压
给脚本加执行权限 执行脚本 所有机器成功运行gfs
注意,如果是网络元下载 gfs
#yum -y install centos-release-gluster #如采用官方 YUM 源安装,可以直接指向互联网仓库
若出现报错,故障原因是版本过高导致 将原来的gfs卸载,重新安装
7,添加节点到存储信任池中(在 node1 节点上操作)
gluster
: 命令行工具,用于管理和监控GlusterFS集群。peer probe
: 子命令组合,用于向GlusterFS集群中添加一个新的对等节点。
#在每个Node节点上查看群集状态 gluster peer status
8,创建卷(在一台node上操作即可)
#根据规划创建如下卷
卷名称 | 卷类型 | Brick |
fenbushi | 分布式卷 | node1(/data/sdb1)、node2(/data/sdb1) |
tiaodai | 条带卷 | node1(/data/sdc1)、node2(/data/sdc1) |
fuzhi | 复制卷 | node3(/data/sdb1)、node4(/data/sdb1) |
fbstd | 分布式条带卷 | node1(/data/sdd1)、node2(/data/sdd1)、node3(/data/sdd1)、node4(/data/sdd1) |
fbsfz | 分布式复制卷 | node1(/data/sde1)、node2(/data/sde1)、node3(/data/sde1)、node4(/data/sde1) |
查看卷列表
gluster volume list
8.1 创建分布式卷
#创建分布式卷,没有指定类型,默认创建的是分布式卷
#启动新建分布式卷
#查看创建分布式卷信息
8.2 创建条带卷
指定类型为 stripe,数值为 2,且后面跟了 2 个 Brick Server,所以创建的是条带卷
启动条带
查看条带卷信息
8.3 创建复制卷
#指定类型为 replica,数值为 2,且后面跟了 2 个 Brick Server,所以创建的是复制卷
启动复制卷
查看复制卷信息
8.4 创建分布式条带卷
#指定类型为 stripe,数值为 2,而且后面跟了 4 个 Brick Server,是 2 的两倍,所以创建的是分布式条带卷
启动分布式条带卷‘
查看分布式条带卷信息
8.5 创建分布式复制卷
指定类型为 replica,数值为 4,而且后面跟了 4 个 Brick Server,,所以创建的是分布式复制卷
启动 分布式复制
查看分布式复制卷 信息
注意! 我这边指定类型为 replica,数值为 4 意思就是会复制4分, 再分布式到四台机器上
三 55客户端步骤
1,客户端挂载 Gluster 文件系统
1.1客户端需要先做一下步骤
① 安装gfs客户端软件
② 创建挂载目录
③ 配置 /etc/hosts 文件 (做服务端ip 的映射 加快速度)
1.2 临时挂载Gluster 文件系统
首先在服务端查看所有的逻辑卷 gluster volume list
临时挂载:(前面的fenbushi 是卷名 后面的是挂载的文件夹)
查看挂载情况df -Th
这边可以看到 分布式条带有20G 因为是由4个5G的盘组成
分布式复制只有5G 是因为是由4个5G的盘组成,但是是1乘以4bricks 的形式。一份数据4个brick都复制,可用容量就是5G
1.3 永久挂载
vim /etc/fstab
node1:fenbushi /test/fenbushi glusterfs defaults,_netdev 0 0
node1:tiaodai /test/taiodai glusterfs defaults,_netdev 0 0
node1:fuzhi /test/fuzhi glusterfs defaults,_netdev 0 0
node1:fbstd /test/fbstd glusterfs defaults,_netdev 0 0
node1:fbsfz /test/fbsfz glusterfs defaults,_netdev 0 0
四 测试 Gluster 文件系统
1.1 如何检测 得造数据
(命令 dd if=/dev/zero of=/opt/demo1.log bs=1M count=40
的作用是在 /opt
目录下创建一个名为 demo1.log
、大小为40兆字节的空文件,其中填充的内容全部为零字节。这种操作常用于测试、初始化磁盘、创建大文件占位符等场景。)
1.2 将测试数据 复制到所有的卷(挂载点)
2 查看文件分布
2.1 查看分布式卷
数据被分布式存储
node1(/data/sdb1):
node2(/data/sdb1):
2.2 查看条带卷
数据被分片
node1(/data/sdc1)
node2(/data/sdc1)
2.3 查看复制卷
数据没有被分片 有副本 有冗余
node3(/data/sdb1)
node4(/data/sdb1)
2.4 查看分布式条带卷
#数据被分片50% 没副本 没冗余
node1(/data/sdd1)
node2(/data/sdd1)
node3(/data/sdd1)
node4(/data/sdd1)
2.5 查看分布式复制卷分布
#数据没有被分片 有副本 有冗余
node1(/data/sde1)
node2(/data/sde1)
node3(/data/sde1)
node4(/data/sde1)
五 破坏性测试
#挂起 node2 节点(即77机器)或者关闭glusterd服务来模拟故障(亲测要挂起)
[root@node2 ~]# systemctl stop glusterd.service
然后在客户端上查看文件是否正常
1.1 分布式卷数据查看
#在客户机上发现少了demo5.log文件,这个是在node2上的
1.2 条带卷查看
#无法访问,
1.3 查看分布式条带卷
#无法访问,分布条带卷不具备冗余性 (
1.4 查看分布式复制卷
数据正常
上述实验测试,凡是带复制数据,相比而言,数据比较安全
六 扩展其他的维护命令
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.deny 192.168.80.100
#仅允许
gluster volume set dis-rep auth.allow 192.168.80.* #设置192.168.80.0网段的所有IP地址都能访问dis-rep卷(分布式复制卷)
安装报错:版本过高,先解除依赖关系
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
七 总结
分布式卷:以文件为单位,通过hash散列在各个Brick中,不具备冗余
条带卷:把文件数据进行分块,轮询的分布在各个Brick中,不具备冗余能力
复制卷:把文件进行Brick中做镜像存储,具备冗余能力
分布式条带卷:不具备冗余能力,至少要4个服务器,Brick≥2 条带的2倍
分布式复制卷:具备冗余能力,至少4台Brick Brick数量≥2 副本数的2倍