GlusterFS

文章介绍了开源分布式文件系统GlusterFS,其特点是高度可扩展和高可用,采用弹性HASH算法实现数据分布。详细阐述了GlusterFS的结构,包括分布式卷、条带卷、复制卷和分布式条带卷的工作原理与创建方法。并提供了具体的部署步骤,包括节点配置、集群创建、卷类型创建和客户端挂载。最后,进行了冗余测试,展示了不同卷类型的容错能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 一

 、 GFS概念
Gluster File System,开源的分布式文件系统,是Scale存储的核心,能够处理千数量级的客户端。在传统的解决方案中,Glusterfs能够灵活的结合物理的,虚拟的和云资源去体现高可用和企业级的性能存储。
由存储服务器(Brick Server)、客户端以及NFS/Samba 存储网关组成
无元数据服务器

二)、GlusterFS特点

  • 扩展性和高性能

  • 高可用性

  • 全局统一命名空间

  • 弹性卷管理

  • 基于标准协议

(三)、GFS的结构

模块化堆栈式架构
模块化、堆栈式的架构
通过对模块的组合,实现复杂的功能


 (四)、弹性HASH算法
通过HASH算法得到一个32位的整数
划分为N个连续的子空间,每个空间对应一个Brick
弹性HASH算法的优点
保证数据平均分布在每一个Brick中
解决了对元数据服务器的依赖,进而解决了单点故障以及访问瓶颈
(五)、GlusterFS工作原理(工作流程) 
1、客户端或应用程序通过GlusterFS的挂载点访问数据
2、linux系统内核通过VFS API收到请求并处理
3、VFS将数据递交给FUSE内核文件系统, fuse文件系统则是将数据通过/dev/fuse设备文件递交给了GlusterFS client端
4、GlusterFS client 收到数据后,client根据配置文件的配置对数据进行处理
5、通过网络将数据传递至远端的GlusterFS Server,并且将数据写入到服务器存储设备上

(六)、GFS卷类型 
分布式卷
条带卷
复制卷
分布式条带卷
分布式复制卷
条带复制卷
分布式条带复制卷
1、分布式卷:
没有对文件进行分块处理
通过扩展文件属性保存HASH值
支持的底层文件系统有ext3、ext4、ZFS、XFS等

特点:
文件分布在不同的服务器,不具备冗余性
更容易和廉价地扩展卷的大小
单点故障会造成数据丢失
依赖底层的数据保护

创建命令:

gluster volume create dis-volume server1:/dir1 server2:/dir2

2、条带卷
根据偏移量将文件分成N块(N个条带节点),轮询的存储在每个Brick Server节点
存储大文件时,性能尤为突出
不具备冗余性,类似Raid0

 特点:
数据被分割成更小块分布到块服务器群中的不同条带区
分布减少了负载且更小的文件加速了存取的速度
没有数据冗余

创建命令: gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2

3、复制卷
同一文件保存一份或多分副本
复制模式因为要保存副本,所以磁盘利用率较低
多个节点上的存储空间不一致,那么将按照木桶效应取最低节点的容量作为该卷的总容量

 特点:
卷中所有的服务器均保存一个完整的副本
卷的副本数量可由客户创建的时候决定
至少由两个块服务器或更多服务器
具备冗余性

创建命令: gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2

4、分布式条带卷
兼顾分布式卷和条带卷的功能
主要用于大文件访问处理
至少最少需要 4 台服务器

创建命令: gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2
 

二、GFS分布式文件系统部署步骤

1.集群环境

Node1节点:node1/192.168.179.11          磁盘: /dev/sdb1            挂载点: /data/sdb1
                                            /dev/sdc1                    /data/sdc1
                                            /dev/sdd1                    /data/sdd1
                                            /dev/sde1                    /data/sde1
 
Node2节点:node2/192.168.179.22          磁盘: /dev/sdb1            挂载点: /data/sdb1
                                            /dev/sdc1                    /data/sdc1
                                            /dev/sdd1                    /data/sdd1
                                            /dev/sde1                    /data/sde1
 
Node3节点:node3/192.168.179.33          磁盘: /dev/sdb1            挂载点: /data/sdb1
                                            /dev/sdc1                    /data/sdc1
                                            /dev/sdd1                    /data/sdd1
                                            /dev/sde1                    /data/sde1
 
Node4节点:node4/192.168.179.44         磁盘: /dev/sdb1            挂载点: /data/sdb1
                                            /dev/sdc1                    /data/sdc1
                                            /dev/sdd1                    /data/sdd1
                                            /dev/sde1                    /data/sde1

 

 客户端节点为192.168.179.55

 

2.更改节点名称

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

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

 在这里插入图片描述

 

 3.节点进行磁盘挂载,安装本地源

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

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  #执行脚本

 

 

4.Hosts文件创建映射关系

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

echo "192.168.179.11 node1" >> /etc/hosts
echo "192.168.179.22 node2" >> /etc/hosts
echo "192.168.179.33 node3" >> /etc/hosts
echo "192.168.179.44 node4" >> /etc/hosts

  5.创建GFS本地安装源

cd /opt
tar -zxvf gfsrepo.zip /opt     #解压gfsrepo.zip压缩包
 
vim /etc/yum.repos.d/glfs.repo   #创建本地源
 
[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
 
 
yum clean all 
yum makecache
 
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
 
systemctl start glusterd.service 
systemctl enable glusterd.service
 
systemctl status glusterd.service

 在这里插入图片描述

 

 

6.添加节点创建集群

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

  1. gluster peer probe node1

  2. gluster peer probe node2

  3. gluster peer probe node3

  4. gluster peer probe node4

  5. gluster peer status

 

 7.根据规划创建卷

卷名称                 卷类型                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 list
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.查看GFS创建列表

 gluster volume list
在这里插入图片描述

 部署Gluster客户端(192.168.179.55)

1.创建本地安装源

systemctl stop firewalld
setenforce 0
 
cd /opt
 
unzip gfsrepo.zip 
 
 
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

 2.创建测试目录

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

 3.创建节点映射

echo "192.168.179.11 node1" >> /etc/hosts
echo "192.168.179.22 node2" >> /etc/hosts
echo "192.168.179.33 node3" >> /etc/hosts
echo "192.168.179.44 node4" >> /etc/hosts

 4.挂载分布式文件系统

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
df -h

 

 5.创建测试文件并写入GFS文件系统

 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=/opt/demo5.log bs=1M count=40

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

 

 

  验证文件分布效果

1、查看分布式文件分布(node1:/dev/sdb1、node2:/dev/sdb1)

在这里插入图片描述

 在这里插入图片描述

  2、查看条带卷文件分布(node1:/dev/sdc1、node2:/dev/sdc1)

在这里插入图片描述

 在这里插入图片描述

 3、查看复制卷文件分布 node3:/dev/sdb1、node4:/dev/sdb1

在这里插入图片描述

 在这里插入图片描述

  4、查看分布式条带卷分布(node1:/dev/sdd1、node2:/dev/sdd1、node3:/dev/sdd1、node4:/dev/sdd1)

在这里插入图片描述

 在这里插入图片描述

 在这里插入图片描述

 在这里插入图片描述

 5、查看分布式复制卷分布(node1:/dev/sde1、node2:/dev/sde1、node3:/dev/sde1、node4:/dev/sde1)

在这里插入图片描述

 在这里插入图片描述

 在这里插入图片描述

 在这里插入图片描述

 冗余测试

在这里插入图片描述

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

1、分布式卷数据查看,不具备冗余        `分布式卷node1(/data/sdb1)、node2(/data/sdb1)`
挂起 node2 节点模拟故障

 在这里插入图片描述

 2、条带卷,无法访问,不具备冗余   `条带卷 node1(/data/sdc1)、node2(/data/sdc1)`

 在这里插入图片描述

 3、复制卷,`复制卷node3(/data/sdb1)、node4(/data/sdb1)`,关闭node4(192.168.179.44)进行测试,具有冗余

 在这里插入图片描述

 4、分布式条带卷node1(/data/sdd1)、node2(/data/sdd1)、node3(/data/sdd1)、node4(/data/sdd1),不具备冗余

在这里插入图片描述

  5、分布式复制卷node1(/data/sde1)、node2(/data/sde1)、node3(/data/sde1)、node4(/data/sde1),具有冗余

在这里插入图片描述

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值