探索GlusterFS:开源分布式文件系统

news2025/6/26 22:41:57

目录

引言

一、GlusterFS简介

(一)基本介绍

(二)GlusterFS特点

(三)GlusterFS术语

(四)GlusterFS工作流程

二、GlusterFs的卷类型

(一)卷类型

(二)卷比较

三、部署GlusterFS群集

(一)磁盘分区

(二)修改主机名

(三)安装GlusterFS

1.准备好GlusterFS包

2.搭建yum仓库

3.yum安装

4.添加节点到存储信任池

5.创建卷

5.1 创建分布式卷

5.2 创建条带卷

5.3 创建复制卷

5.4 创建分布式条带卷

5.5 创建分布式复制卷

5.6 开启卷

6.卷操作

(二)客户端进行测试

1.客户端安装GlusterFS

2.挂载卷

3.创建测试文件

4.查看文件状态

5.模拟破坏测试


引言

在大数据时代背景下,随着企业与个人数据量的爆炸式增长,传统的单机文件系统已经无法满足日益增长的数据存储和访问需求。在此背景下,一种名为GlusterFS的开源分布式文件系统应运而生,以其卓越的可扩展性、高可用性和高性能特性,为海量数据存储提供了有力支持。本文将深入探讨GlusterFS的工作原理、核心特性以及实际应用场景

一、GlusterFS简介

(一)基本介绍

GlusterFS是一个完全开源、无中心设计的分布式文件系统,旨在构建大规模、弹性扩展、高性能的存储解决方案。它将多个物理存储设备汇聚成一个巨大的、虚拟的、全局统一命名空间的存储池,使得数据可以在整个集群中透明地分布和共享。

GlusterFS 是一个开源的分布式文件系统,它允许将多个物理存储设备(如硬盘)通过网络聚合在一起,形成一个大规模的、可扩展的、并行访问的存储池。GlusterFS 采用无中心的设计架构,没有单点故障,具备高可用性和高性能的特点。

在 GlusterFS 中,数据以分布式的、虚拟的、全局统一命名空间的方式进行管理。这意味着,无论实际的数据存储在集群中的哪个节点上,对用户来说都是透明的,可以像操作本地文件系统一样操作远程存储资源。

GlusterFS 主要适用于以下场景:

大规模数据存储:能够处理PB级的数据存储需求,且可以根据需要动态扩展存储容量。

高并发访问:通过多节点并行处理I/O请求,提高系统的读写性能和响应速度。

高可用性:支持多种冗余策略,确保在部分硬件故障时数据仍能正常访问

(二)GlusterFS特点

1.可扩展性和高性能

横向扩展:GlusterFS设计之初就考虑到了极高的可扩展性,能够通过添加更多的存储节点来轻松扩展存储容量和吞吐量,支持从几个TB到数PB级别的存储规模。

高性能:GlusterFS通过分布式并行处理I/O请求,优化了读写性能,特别是针对大数据集的读取操作,通过条带化、镜像和分布式复制等存储策略,可以大幅提升数据访问效率。

2.高可用性

无单点故障:GlusterFS没有中央元数据服务器,而是通过分布式元数据管理来避免单点故障,确保即使某个节点失效,整个文件系统仍然能够保持运行。

冗余和自动恢复:支持多种数据保护模式,包括复制、分布式复制和奇偶校验等,能够在节点故障时迅速恢复数据服务。

3.全局统一命名空间

提供了一个全局的、统一的文件命名空间,使得用户可以从单一入口点访问整个集群内的所有文件,简化了数据管理。

4.弹性卷管理

灵活的存储卷管理机制允许管理员根据业务需求调整存储策略,比如增加或减少冗余级别,或者动态地向现有卷添加新存储节点。

5.弹性哈希算法

使用弹性的哈希算法将数据分布在整个集群中,确保数据分布的均衡和高效定位。

6.标准协议支持

支持行业标准的网络协议,例如NFS、SMB/CIFS、HTTP/REST等,使得不同操作系统和应用程序都能够方便地访问存储资源。

7.POSIX兼容性

兼容POSIX标准,使得大多数符合POSIX要求的应用程序可以直接在GlusterFS之上运行。

8.用户空间设计

利用用户空间的FUSE(Filesystem in Userspace)技术,使得系统设计更加灵活,能够快速迭代和改进。

(三)GlusterFS术语

Brick: Bricks是GlusterFS中最基本的存储单元,它们通常是物理服务器上指定的目录路径。每个brick代表了一块存储空间,所有的brick组合起来形成了一个大的、分布式的存储池。

Volume: Volume是在GlusterFS中组织和管理存储的一种逻辑实体,它是由一个或多个brick组成,通过特定的存储模式(如分布式、复制、条带化等)将bricks联合起来,形成一个具有特定属性的虚拟文件系统。

Cluster: Cluster指的是连接在一起并参与GlusterFS服务的一组服务器节点。这些节点通过网络互相协作,共同提供存储服务。

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

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

(四)GlusterFS工作流程

1.客户端访问数据

客户端或客户端应用程序访问GlusterFS

客户端通过挂载点访问GlusterFS分布式文件系统,就像访问常规的本地文件系统一样。

客户端应用程序发出对文件系统的读写请求。

2.操作系统内核处理

当客户端操作系统接收到应用程序的I/O请求时,它通过VFS层处理这个请求。

如果是Linux系统,客户端通常通过FUSE内核模块或内建的Kernel Module,因为FUSE只是一个伪文件系统,不能直接对接客户端,只能通过缓存区/dev/fuse与客户端对接

3.GlusterFS客户端

GlusterFS客户端负责将操作系统传递来的I/O请求转换为对GlusterFS服务端的调用。
客户端使用GlusterFS的API与集群中的各个节点进行通信,确定数据的位置。

根据GlusterFS的卷配置和弹性HASH算法,客户端计算出数据应该存储或读取的brick(存储节点)。
弹性HASH算法使得数据在多个brick之间均衡分布,且能在集群动态变化时重新分布数据。

4.数据传输

客户端通过网络将请求发送到对应的brick节点。

brick节点接收到请求后,通过VFS接口,在本地文件系统上执行相应的读写操作。

5.卷类型影响的处理方式

根据卷的类型(如分布式卷、复制卷、条带卷、分布式复制卷等),请求的处理方式会有所不同

6.返回结果

brick完成操作后,将结果通过网络传回给客户端。
客户端再将处理结果反馈给操作系统,进而由操作系统通知应用程序

二、GlusterFs的卷类型

(一)卷类型

GlusterFs的卷类型有七种:即分布式卷、条带卷、复制卷、分布式条带卷、分布式复制卷、条带复制卷和分布式条带复制卷。

分布式卷

又称哈希卷,文件通过散列函数(hash algorithm)分配到集群中的brick上,没有数据冗余,容量较大,但不具备容错能力。

条带卷

类似RAID0,文件被分割成多个数据块,均匀分布到各brick上,实现并行读写,提高性能,但也缺乏冗余,单个brick故障会导致数据丢失。

复制卷

类似RAID1,文件在多个brick上创建相同的副本,提供了数据冗余和高可用性,但磁盘利用率相对较低。

分布式条带卷

结合了分布式卷和条带卷的特点,文件被条带化后分布到多个brick上,可以获得更好的性能和一定的扩展性,但同样不自带冗余。

分布式复制卷

将分布式卷与复制卷结合,提供分布式存储的同时还保证数据的冗余。

条带复制卷

结合条带卷和复制卷,既能实现数据条带化以提高性能,又能做到数据的冗余备份。

分布式条带复制卷

综合了分布式、条带化和复制三种策略,提供最佳的性能和冗余

(二)卷比较

以上七种卷的类型,只需要掌握以下五种即可

卷类型存储方式冗余能力应用场景
分布式卷

以文件为单位,将文件整个散列各个brick当中

不具备

当不需要数据冗余时,可以用于存储

大量的非关键数据

条带卷

将文件分块,通过轮询的方式,存放在各个brick当中

不具备

需要高可用性和数据安全性的场景,

如数据库和关键业务系统。

复制卷

将文件存放在某一个brick当中,另一个brick做镜像备份

具备

需要高带宽和并行读写性能的场景,

如流媒体服务、大数据分析等

分布式条带卷

结合了分布式和条带卷的特点,文件不仅在多个brick间分布,而且会将每个文件进行分块存储

不具备

分布式条带卷通常适用于对性能要求

很高,同时可以接受较低冗余度或通

过其他方式保证数据安全性的应用环

境,如高性能计算、大规模数据分析

和内容分发等

分布式复制卷

结合了分布式和复制卷的特点,文件不仅在多个brick间分布,而且在每个子卷内做复制,提供高可用性和扩展性

具备

既要扩展存储容量又要保证数据冗余

的复杂环境。

可根据不同的使用场景,选择不同的卷类型,提高效率

三、部署GlusterFS群集

环境准备

类型IP地址主机名磁盘设备挂载点
server1192.168.83.30gfs1

/dev/sdb1

/dev/sdc1

/dev/sdd1

/dev/sde1

/data/sdb

/data/sdc

/data/sdd

/data/sde

server2192.168.83.40gfs2

/dev/sdb1

/dev/sdc1

/dev/sdd1

/dev/sde1

/data/sdb

/data/sdc

/data/sdd

/data/sde

server3192.168.83.50gfs3

/dev/sdb1

/dev/sdc1

/dev/sdd1

/dev/sde1

/data/sdb

/data/sdc

/data/sdd

/data/sde

server4192.168.83.60gfs4

/dev/sdb1

/dev/sdc1

/dev/sdd1

/dev/sde1

/data/sdb

/data/sdc

/data/sdd

/data/sde

客户端192.168.83.100gfs-client

(一)磁盘分区

首先在每一台服务器上添加磁盘,并进行磁盘分区,而后进行挂载

#!/bin/bash
DEV=`ls /dev/sd* |grep -o 'sd[b-z]'|uniq`
#将ls /dev/sd* |grep -o 'sd[b-z]'|uniq得到的值,赋予DEV变量
for i in $DEV   #使用循环脚本,进行磁盘分区
do
echo -e "n\np\n\n\n\nw\n" |fdisk /dev/${i} &>>/dev/null
#免交互式进行磁盘分区
mkfs.xfs /dev/${i}"1"&>> /dev/null
#格式化磁盘分区
mkdir -p /data/${i} &>>/dev/null
#在/data/目录下建立与磁盘同名的目录,用于挂载
echo "/dev/${i}1 /data/${i} xfs defaults 0 0" >> /etc/fstab
#将挂载信息导入fstab文件,做开启自动挂载
done
mount -a &>> /dev/null
#刷新挂载信息,将磁盘立即挂载

(二)修改主机名

在每一台server服务器上操作

修改主机名,并在/etc/hosts文件中添加相对应的IP地址与主机名

(三)安装GlusterFS

在所有节点上安装GlusterFS服务

1.准备好GlusterFS包

2.搭建yum仓库

3.yum安装

直接安装会因为版本原因报错,需要先执行:

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

4.添加节点到存储信任池

只需要在其中一台服务器进行操作,所有的服务器都会同步

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

使用:gluster peer status 命令

5.创建卷

同样只需要在一台服务器上操作即可

创建卷的规划如下

卷类型卷名brick
分布式卷fb_volumegfs1(/data/sdb)、gfs2(/data/sdb)
条带卷td_volumegfs1(/data/sdc)、gfs2(/data/sdc)
复制卷fz_volumegfs3(/data/sdb)、 gfs4(/data/sdb)
分布式条带卷fbtd_volumegfs1(/data/sdd)、gfs2(/data/sdd)gfs3(/data/sdd)、 gfs4(/data/sdd)
分布式复制卷fbfz_volumegfs1(/data/sde)、gfs2(/data/sde)gfs3(/data/sde)、 gfs4(/data/sde)
5.1 创建分布式卷

gluster volume create  #创建卷
fb_volume              #卷的名称,可以根据实际需求定义任意合适的卷名
gfs1:/data/sdb         #表示集群中的一个节点(服务器)gfs1
gfs2:/data/sdb         #同样的,gfs2节点上的/data/sdb目录也将作为卷的一部分
force                  #这是一个可选参数,用于强制创建卷
5.2 创建条带卷

创建完条带卷后

5.3 创建复制卷

5.4 创建分布式条带卷
5.5 创建分布式复制卷
5.6 开启卷

创建完毕后,需要开启卷

命令格式为:gluster volume start  volume_name

6.卷操作

查看GlusterFS卷
gluster volume list 

查看所有卷的信息
gluster volume info x

查看所有卷的状态
gluster volume status

开启一个卷

gluster volume start  volume_name

停止一个卷
gluster volume stop  volume_name

删除一个卷

gluster volume delete volume_name

注意:删除卷时,需要先停止卷,且信任池中不能有主机处于宕机状态,否则删除不成功

设置卷的访问控制
仅拒绝
gluster volume set dis-rep auth.deny IP地址

(二)客户端进行测试

1.客户端安装GlusterFS

与客户端基本一致,首先需要准备好包组

搭建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  >>/dev/null

#移除最新版本,否则可能报错,新版本可能不支持条带卷

yum -y install glusterfs glusterfs-fuse >>/dev/null

#下载gluster客户端工具

2.挂载卷

在客户端创建挂载目录

同样在/etc/hosts文件中添加域名解析信息

将各个卷一一进行挂载

使用mount.glusterfs工具进行挂载

3.创建测试文件

创建好文件后,将它们复制到各类卷挂载点当中

4.查看文件状态

在gluster服务器上查看文件存储的状态

4.1 查看分布式卷文件存储状态

可以看到,分布式卷,是将文件整个散列在卷的各个brick上,没有备份

4.2 查看条带卷文件存储状态

而条带卷是将文件进行分片,而后进行存储,简单来说就是一个文件,有几个brick,就会分成几份进行存储,没有备份

4.3 查看复制文件存储状态

复制卷会将文件整个存储在其中一个brick上,而后另一个brick进行映射复制,这样做的好处就是增强的数据的安全性,但是性能会有所降低

4.4 查看分布式条带卷文件存储状态

分布式条带卷,会将文件在多个brick中存储,而后进行分片

4.5 查看分布式复制卷文件存储状态

分布式复制卷,会将文件整个分布在各个brick中,而且会有对应的其它brick进行映射备份,即扩展了存储容量,又达到了备份效果

5.模拟破坏测试

首先关闭一个节点服务器,比如关闭gfs2

[root@gfs2 data]#shutdown   #关机

  可以看出,有复制功能的卷,会较好的保护数据

总结

主要了解各种卷的类型与应用场景

卷类型存储方式冗余能力应用场景
分布式卷

以文件为单位,将文件整个散列各个brick当中

不具备

当不需要数据冗余时,可以用于存储

大量的非关键数据

条带卷

将文件分块,通过轮询的方式,存放在各个brick当中

不具备

需要高可用性和数据安全性的场景,

如数据库和关键业务系统。

复制卷

将文件存放在某一个brick当中,另一个brick做镜像备份

具备

需要高带宽和并行读写性能的场景,

如流媒体服务、大数据分析等

分布式条带卷

结合了分布式和条带卷的特点,文件不仅在多个brick间分布,而且会将每个文件进行分块存储

不具备

分布式条带卷通常适用于对性能要求

很高,同时可以接受较低冗余度或通

过其他方式保证数据安全性的应用环

境,如高性能计算、大规模数据分析

和内容分发等

分布式复制卷

结合了分布式和复制卷的特点,文件不仅在多个brick间分布,而且在每个子卷内做复制,提供高可用性和扩展性

具备

既要扩展存储容量又要保证数据冗余

的复杂环境。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1584125.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【面试题】微博、百度等大厂的排行榜如何实现?

背景 现如今每个互联网平台都会提供一个排行版的功能,供人们预览最新最有热度的一些消息,比如百度: 再比如微博: 我们要知道,这些互联网平台每天产生的数据是非常大,如果我们使用MySQL的话,db实…

使用R语言计算矩形分布(均匀分布)并绘制图形

理论部分 矩形分布(均匀分布),是指在某一区间内,随机变量取任何值的概率都是相同的。这种分布的概率密度函数在一个特定的区间内是一个常数,因此其图形呈现出一个矩形的形状,故得名为“矩形分布”。在概率…

智能边缘自动化:HDMI接口钡铼ARM工业电脑实践案例

一款具备HDMI接口的高性能ARM工业计算机应运而生,为实现在工业4.0时代的关键数据实时处理与可视化管理提供了强有力的硬件支撑。这款计算机依托其独特的边缘计算能力,完美解决了工业环境中大规模数据传输至云端的高延迟问题,成功实现了OT&…

酷开科技在大数据及人工智能推动下,成功将酷开系统与AI融合

随着科技的不断发展,以及大数据这个概念的出现,让看似冷冰冰的数字开始具备了温度,开始让数字产生了温暖的价值,也让各个行业看到了大数据的作用。酷开科技生态的核心场景是家庭、是客厅,无论是以酷开科技为代表的OTT&…

电压继电器SRMUVS-220VAC-2H2D 导轨安装 JOSEF约瑟

系列型号: SRMUVS-58VAC-2H欠电压监视继电器;SRMUVS-100VAC-2H欠电压监视继电器; SRMUVS-110VAC-2H欠电压监视继电器;SRMUVS-220VAC-2H欠电压监视继电器; SRMUVS-58VAC-2H2D欠电压监视继电器;SRMUVS-100…

找不到vcruntime140.dll怎么办,vcruntime140.dll丢失的多种解决方法

在我们日常频繁地与电脑打交道、依赖其处理各种工作、学习乃至娱乐任务的过程中,偶尔会遭遇一些令人困扰的技术问题。其中一种颇为常见的情况便是,当您正全神贯注于某个重要应用的操作,或是满怀期待地试图启动一款新安装的游戏时,…

蓝桥杯刷题 二分-[2145]求阶乘(C++)

问题描述 满足 N! 的末尾恰好有 K 个 0 的最小的 N 是多少? 如果这样的 N 不存在输出 −1。 输入格式 一个整数 K。 输出格式 一个整数代表答案。 样例输入 2 样例输出 10 评测用例规模与约定 对于 30% 的数据,1 ≤ K ≤ 10的6次方 对于 100% 的数据&…

ES6对于Class类的基本语法详解(2024-04-10)

目录 1、传统ES5写法 2、ES6 的class语法 3、ES5与ES6行为对比 4、类的constructor() 方法 5、类的实例 new 6、类的对象属性(新写法) 7、类的取值函数(getter)和存值函数(setter) 8、Class类的表达…

用vue3写一个AI聊天室

效果图如下&#xff1a; 1、页面布局&#xff1a; <template><div class"body" style"background-color: rgb(244, 245, 248); height: 730px"><div class"container"><div class"right"><div class"…

SpringBoot3 + uniapp 对接 阿里云0SS 实现上传图片视频到 0SS 以及 0SS 里删除图片视频的操作(最新)

SpringBoot3 uniapp 对接 阿里云0SS 实现上传图片视频到 0SS 以及 0SS 里删除图片视频的操作 最终效果图uniapp 的源码UpLoadFile.vuedeleteOssFile.jshttp.js SpringBoot3 的源码FileUploadController.javaAliOssUtil.java 最终效果图 uniapp 的源码 UpLoadFile.vue <tem…

Netty出坑记

NIO&#xff1a; 一个线程处理多个请求 BIO&#xff1a; 阻塞 netty 编码解码 TFO&#xff1a; 校验cookie合法性&#xff0c;不合法 TCP流程 设计QQ&#xff1a; 登录过程&#xff0c;client TCP协议向server发送信息&#xff0c;HTTP协议下载信息 发消息&#xff1a;clie…

Win10系统VScode远程连接VirtualBox安装的Ubuntu20.04.5

1.打开虚拟机&#xff0c;在中端中输入命令: sudo apt-get install openssh-server 安装ssh 我这里已经安装完成&#xff0c;故显示是这样 2.输入命令&#xff1a;sudo systemctl start ssh 启动远程连接 注意&#xff0c;如果使用VirtualBox安装的虚拟机&#xff0c;需要启用…

故障诊断 | Matlab实现基于小波包结合鹈鹕算法优化卷积神经网络DWT-POA-CNN实现电缆故障诊断算法

故障诊断 | Matlab实现基于小波包结合鹈鹕算法优化卷积神经网络DWT-POA-CNN实现电缆故障诊断算法 目录 故障诊断 | Matlab实现基于小波包结合鹈鹕算法优化卷积神经网络DWT-POA-CNN实现电缆故障诊断算法分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现基于小波…

【Qt 学习笔记】QWidget的geometry属性及window frame的影响

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ QWidget的geometry属性 文章编号&#xff1a;Qt 学习笔记 / 16 文章目…

Flutter Your project requires a newer version of the Kotlin Gradle plugin

在开发Flutter项目的时候,遇到这个问题Flutter Your project requires a newer version of the Kotlin Gradle plugin 解决方案分两步: 1、在android/build.gradle里配置最新版本的kotlin 根据提示的kotlin官方网站搜到了Kotlin的最新版本是1.9.23,如下图所示: 同时在Ko…

【现代C++】默认函数和删除函数

现代C中的默认函数和删除函数特性允许开发者更精确地控制类的行为&#xff0c;特别是关于对象拷贝、赋值、析构和构造的行为。这些特性可以帮助开发者避免不必要的对象拷贝&#xff0c;防止资源泄露&#xff0c;以及避免一些常见的编程错误。 1. 默认函数&#xff08;Defaulte…

docker 安装canal

一、新建文件夹 新建文件夹logs, 新建文件canal.properties instance.properties docker.compose.yml canal.propertie 修改如下&#xff1a; 修改instance.properties内容如下 1.1 canal.properties ################################################# ######### …

ES6 关于Class类的继承 extends(2024-04-10)

1、简介 类Class 可以通过extends关键字实现继承&#xff0c;让子类继承父类的属性和方法。extends 的写法比 ES5 的原型链继承&#xff0c;要清晰和方便很多。 class Foo {constructor(x, y) {this.x x;this.y y;console.log(父类构造函数)}toString() {return ( this.x …

42-软件部署实战(下):IAM系统安全加固、水平扩缩容实战

IAM应用安全性加固 iam-apiserver、iam-authz-server、MariaDB、Redis和MongoDB这些服务&#xff0c;都提供了绑定监听网卡的功能。将服务绑定到内网网卡上。 我们也可以通过iptables来实现类似的功能&#xff0c;通过将安全问题统一收敛到iptables规则&#xff0c;可以使我…

基于GAN的图像补全实战

数据与代码地址见文末 论文地址:http://iizuka.cs.tsukuba.ac.jp/projects/completion/data/completion_sig2017.pdf 1.概述 图像补全,即补全图像中的覆盖和缺失部分, 网络整体结构如下图所示,整体网络结构还是采取GAN,对于生成器,网络结构采取Unet的形式,首先使用卷积…