GlusterFS 分布式文件系统 搭建及使用

2024-04-14 17:52

本文主要是介绍GlusterFS 分布式文件系统 搭建及使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、GlusterFS

GlusterFS 是一个开源的分布式文件系统,旨在提供高性能、可扩展性和可靠性,适用于现代数据中心和云环境。它以横向扩展的方式设计,可以在多台服务器之间共享文件系统,为应用程序提供统一的文件存储服务。

GlusterFS 的核心理念是将多台普通的服务器组合成一个高性能的分布式存储系统。它采用了分布式哈希表来管理数据存储和访问,通过将文件划分为小块并存储在不同服务器上,实现了数据的分布式存储和负载均衡。这种分布式存储模式不仅提高了存储容量和性能,还提高了系统的可靠性,因为数据的冗余备份可以在服务器故障时保证数据的可用性。

GlusterFS 提供了简单而灵活的管理接口,使得管理员可以轻松地管理存储集群并对其进行扩展。它支持多种存储协议,包括标准的网络文件系统(NFS)、Server Message BlockSMB)和本地 POSIX 文件系统,使得应用程序可以通过不同的协议访问存储集群。

由于其高性能、可扩展性和易用性,GlusterFS 在大规模的数据存储和处理场景中被广泛应用,包括云计算、大数据分析、内容交付网络(CDN)等领域。它是一个强大而灵活的分布式文件系统解决方案,可以帮助用户构建可靠的存储基础设施,满足不断增长的存储需求。

GlusterFS的总体架构如下:

在这里插入图片描述

GlusterFS 比较核心的是存储卷,支持 7 种卷类型,即 分布式卷、条带卷、复制卷、分布式条带卷、分布式复制卷、条带复制卷、分布式条带复制卷,每种卷的特点如下:

分布式卷(Distributed Volume):分布式卷根据hash算法将数据均匀地分布在不同服务器上,每个文件被分割成固定大小的块,然后分别存储在不同的服务器上。这种分布式存储方式可以提高存储容量和性能,因为数据可以并行地从多个服务器上读取和写入。适用于需要大容量和高性能存储的场景,如大规模数据存储、内容交付网络(CDN)等。缺点是文件没有冗余副本,一旦某台服务宕机,其中存储的数据无法读取。

复制卷(Replicated Volume):复制卷在多个服务器之间复制数据,以提高数据的可靠性和容错能力。每个文件会被复制到多个服务器上,当某个服务器发生故障时,数据仍然可用。但是需要注意的是,由于数据被复制,这会增加存储开销。适用于对数据可靠性要求较高的场景,如数据备份、关键业务应用等。

条带化卷(Striped Volume):条带化卷将文件分割成固定大小的块,并将这些块分别存储在不同的服务器上。这样可以提高读写性能,因为数据可以并行地从多个服务器上读取和写入。适用于需要高吞吐量和低延迟的场景,如大规模数据处理、科学计算等。

分布式复制卷(Distributed Replicated Volume):分布式复制卷结合了分布式卷和复制卷的特点,既实现了数据的横向扩展和负载均衡,又提高了数据的可靠性和容错能力。每个文件会被分割成固定大小的块,并复制到多个服务器上。适用于需要兼顾数据容量、性能和可靠性的场景,如大规模数据存储和分析、虚拟化环境等。

分布式条带化卷(Distributed Striped Volume):分布式条带化卷结合了分布式卷和条带化卷的特点,既实现了数据的横向扩展和负载均衡,又提高了读写性能。每个文件会被分割成固定大小的块,并分别存储在多个服务器上。适用于需要高性能和横向扩展的场景,如大规模并行计算、大数据处理等。

分布式复制条带化卷(Distributed Replicated Striped Volume):结合了分布式卷、复制卷和条带化卷的特点,既实现了数据的横向扩展、可靠性和读写性能。每个文件会被分割成固定大小的块,并复制到多个服务器上,然后分别存储在不同的服务器上。适用于需要高性能、高可靠性和横向扩展的场景,如大规模数据处理和存储、分布式文件系统等。

分布式条带化复制卷(Distributed Striped Replicated Volume):结合了分布式卷、条带化卷和复制卷的特点,既实现了数据的横向扩展、读写性能和可靠性。每个文件会被分割成固定大小的块,并分别存储在多个服务器上,然后在每个服务器上进行数据复制。适用于需要高性能、高可靠性和横向扩展的场景,如大规模并行计算、分布式存储系统等。

二、GlusterFS 搭建

部署规划:

ip别名用途
11.0.1.129node1glusterfs-server
11.0.1.130node2glusterfs-server
11.0.1.131node3glusterfs-server
11.0.1.132clientglusterfs-client

在四台机器上配置 hosts 增加映射:

vi /etc/hosts
11.0.1.129   node1
11.0.1.130   node2
11.0.1.131   node3

在这里插入图片描述

1. glusterfs-server 端部署

在三台服务端机器上安装 glusterfs-server :

yum install centos-release-gluster
yum install -y glusterfs glusterfs-server glusterfs-fuseglusterfs-rdma --skip-broken

启动 glusterFS

systemctl start glusterd.service

设置开机自启:

systemctl enable glusterd.service

查看启动状态:

systemctl status glusterd.service

在这里插入图片描述

状态为 running 为正常。

可以在任意一台中,将另两个节点加入集群,下面示例在 node1 节点上操作:

gluster peer probe node2
gluster peer probe node3

然后可以在任意一台中查看集群状态:

gluster peer status

在这里插入图片描述

如果在node2查看就是 node1node3 的信息:

在这里插入图片描述

查看 volume 状态:

gluster volume info

在这里插入图片描述

由于此时没有创建任何 volume ,所以查看为空。

创建分布式卷

在三台机器上分别创建文件存储目录:

mkdir -p /data/gluster/distributed

在其中一个节点下创建分布式卷。

gluster 默认情况下就是分布式卷,所以可以直接创建:

gluster volume create distributedVolume node1:/data/gluster/distributed node2:/data/gluster/distributed node3:/data/gluster/distributed force

其中:

  • distributedVolume 是卷的名称。
  • node1:/data/gluster、node2:/data/gluster 和 node3:/data/gluster 分别指定了每个节点上存储卷数据的路径。
  • force: 强制创建卷,即使存在相同名称的卷也会被覆盖。

在这里插入图片描述

启动该存储卷:

gluster volume start distributedVolume 

在这里插入图片描述

查看 volume 状态:

gluster volume info

在这里插入图片描述

创建复制卷

在三台机器上分别创建文件存储目录:

mkdir -p /data/gluster/replicated

创建复制卷,副本数为 3 ,也就是会在每个节点上存一份:

gluster volume create replicatedVolume replica 3 node1:/data/gluster/replicated node2:/data/gluster/replicated node3:/data/gluster/replicated force

其中:

  • replicatedVolume 是卷的名称。
  • replica 3:指定副本的数量。
  • node1:/data/gluster1、node2:/data/gluster1 和 node3:/data/gluster1 分别指定了每个节点上存储卷数据的路径。
  • force: 强制创建卷,即使存在相同名称的卷也会被覆盖。

在这里插入图片描述

启动该存储卷:

gluster volume start replicatedVolume 

在这里插入图片描述

查看 volume 状态:

gluster volume info

在这里插入图片描述

2. glusterfs-client 端部署

安装依赖:

yum install -y glusterfs glusterfs-fuse

创建挂载目录:

mkdir -p /gluster/distributed
mkdir -p /gluster/replicated

分布式卷挂载:

mount -t glusterfs node1:/distributedVolume /gluster/distributed

在这里插入图片描述

复制卷挂载:

mount -t glusterfs node1:/replicatedVolume /gluster/replicated

在这里插入图片描述

查看磁盘情况:

df -h

在这里插入图片描述

可以看到两个磁盘情况,由于我测试环境,给的磁盘较小,不过可以可出分布式卷式复制券的三倍大小。

三、文件测试

使用客户端机器上在分布式卷目录下创建文件:

cat > /gluster/distributed/test.txt << EOF
00011111222
EOF

分别查看 node1、node2、node3 的分布式卷下的情况:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

可以看出文件 hash 存储到了 node2 节点上。

使用客户端机器上在复制卷目录下创建文件:

cat > /gluster/replicated/test.txt << EOF
00011111222
EOF

分别查看 node1、node2、node3 的分布式卷下的情况:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可以看出文件复制券会根据 replica 的大小,在相关的节点上都存储一份。

四、其它类型卷的使用及操作命令

分布式复制卷,机器数最少需要replica 的整数倍,如果指定 replica 2,则最少也需要 4 台机器:

gluster volume create volumeName replica 2 transport tcp node1:/data node2:/data node3:/data node4:/data 

条带卷,将文件切割成数据块,分别存储到 stripe x 个节点中。

gluster volume create volumeName stripe 2 transport tcp node1:/data node2:/data 

分布式条带卷,机器数最少需要stripe 的整数倍,如果指定 stripe 2 ,则最少需要 4 台机器:

gluster volume create volumeName  stripe 2 transport tcp node1:/data node2:/data  node3:/data node4:/data 

条带复制卷,机器数最少需要stripe+ replica台 ,指定 stripe 2replica 2,则需要 4 台机器:

gluster volume create volumeName   stripe 2 replica 2 transport tcp node1:/data node2:/data  node3:/data node4:/data 

分布式条带复制卷,机器数需要是stripe+ replica 的整数倍,如果指定 stripe 2replica 2,的话,就最少需要 8 台机器:

gluster volume create volumeName stripe 2 replica 2 transport tcp node1:/data node2:/data node3:/data node4:/data node5:/data node6:/data node7:/data node8:/data

查看所有卷:

gluster volume list

停止某个卷:

gluster volume stop volumeName

删除某个卷:

gluster volume delete volumeName

需要同时删除该卷下的 .glusterfs/ .trashcan/ 目录。

移除某个主机节点:

gluster peer detach node3

设置某个卷的 ip 访问限制:

gluster volume set volumeName auth.allow 10.6.0.*,10.7.0.*

为某个已经存在的卷添加节点,如果是复制卷或者条带卷,每次添加的 Brick 数必须是 replica 或者 stripe 的整数倍:

gluster volume add-brick volumeName node4:/data

为某个已经存在的卷移除节点,注意移除后剩余的机器需要能保证大于等于最小机器数:

gluster volume remove-brick volumeName node4:/data

五、参数调优

5.1 定磁盘使用配额

开启配额:

gluster volume quota volumeName enable

限制最大使用 100G:

gluster volume quota volumeName limit-usage / 100GB

5.2 开启异步操作

gluster volume set volumeName performance.flush-behind on

5.3 调整 io 线程的数量

gluster volume set volumeName performance.io-thread-count 32

5.4 使用缓存

# 设置缓存大小
gluster volume set models performance.cache-size 4GB
# 开启回写,先写到缓存,再刷到磁盘
gluster volume set models performance.write-behind on

这篇关于GlusterFS 分布式文件系统 搭建及使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/903618

相关文章

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

在 Spring Boot 中使用 @Autowired和 @Bean注解的示例详解

《在SpringBoot中使用@Autowired和@Bean注解的示例详解》本文通过一个示例演示了如何在SpringBoot中使用@Autowired和@Bean注解进行依赖注入和Bean... 目录在 Spring Boot 中使用 @Autowired 和 @Bean 注解示例背景1. 定义 Stud

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景