当前位置: 首页 > news >正文

GFS 分布式文件系统

目录

一、GlusterFS 概述

1. GlusterFS 简介

2. GlusterFS 的特点

3. GlusterFS 术语

4. 模块化堆栈式架构

二、 GlusterFS 的工作原理

1. 工作流程

2. 弹性 HASH 算法

三、 GlusterFS 的卷类型

四、 部署 GlusterFS 群集

1. 部署群集环境

2. 创建卷

3. 部署 Gluster 客户端.

4. 测试 Gluster 文件系统

5. 其他维护命令


一、GlusterFS 概述

1. GlusterFS 简介

GlusterFS 是一个开源的分布式文件系统,作为 Scale-Out 存储解决方案 Gluster 的核心,具备强大的横向扩展能力,通过添加节点可支持数 PB 级存储容量。它借助 TCP/IP 或 InfiniBand RDMA 网络汇聚分散的存储资源,提供统一存储服务,并使用单一全局命名空间管理数据。基于可堆叠的用户空间和无元设计,能为不同数据负载提供优异性能。

GlusterFS 主要由存储服务器(Brick Server)、客户端及 NFS/Samba 存储网关(可选)组成。其架构最大特点是无元数据服务器组件,这提升了系统性能、可靠性和稳定性。传统分布式文件系统多依赖元数据服务器存储元数据,存在单点故障风险,而 GlusterFS 基于无元设计,数据横向扩展能力强,可靠性和存储效率高。它支持 TCP/IP 和 InfiniBand RDMA 高速网络互联,客户端可通过原生协议或 NFS/CIFS 等标准协议经存储网关访问数据。

2. GlusterFS 的特点

  • 扩展性和高性能:采用 Scale-Out 架构,通过增加存储节点提高容量和性能,支持 10GbE 和 InfiniBand 等高速网络。弹性 HASH 算法解决了对元数据服务器的依赖,智能定位数据分片,实现并行化数据访问,改善单点故障和性能瓶颈。
  • 高可用性:通过配置复制卷等类型,可自动复制文件(类似 RAID1),节点故障不影响数据访问,数据不一致时自动修复功能以增量方式在后台执行,不占用过多资源。采用标准磁盘文件系统(如 EXT3、XFS)存储文件,数据可通过传统方式访问。
  • 全局统一命名空间:将所有存储资源聚成单一虚拟存储池,屏蔽物理存储信息,可弹性扩展或收缩,多节点场景下可基于不同节点做负载均衡,提高存取效率。
  • 弹性卷管理:数据存储在逻辑卷中,逻辑卷从逻辑存储池独立划分,存储池可在线增减,不中断业务,逻辑卷可在线增长、缩减并实现负载均衡,文件系统配置可实时更改应用。
  • 基于标准协议:支持 NFS、CIFS、HTTP、FTP、SMB 及原生协议,与 POSIX 标准兼容,现有应用无需修改即可访问数据,也可使用专用 API,对公有云部署很有用。

3. GlusterFS 术语

  • Brick(存储块):可信主机池中主机提供的专用存储分区,是基本存储单元,格式为 SERVER:EXPORT。
  • Volume(逻辑卷):一组 Brick 的集合,是数据存储的逻辑设备,类似 LVM 中的逻辑卷,大部分管理操作在卷上进行。
  • FUSE(Filesystem in Userspace):内核模块,允许用户创建自己的文件系统,无需修改内核代码。
  • VFS:内核空间向用户空间提供的访问磁盘接口。
  • Glusterd(后台管理进程):存储群集中每个节点都需运行。

4. 模块化堆栈式架构

GlusterFS 采用模块化、堆栈式架构,可根据需求配置定制化应用环境,如大文件存储、海量小文件存储等。通过模块组合实现复杂功能,如 Replicate 模块实现 RAID1,Stripe 模块实现 RAID0,组合实现 RAID10 和 RAID01。

模块称为 Translator,是 GlusterFS 提供的强大机制,通过良好定义的接口高效扩展文件系统功能。服务端与客户端设计高度模块化且接口兼容,同一个 translator 可在两端加载。所有功能通过 translator 实现,客户端比服务端复杂,功能重点在客户端。

二、 GlusterFS 的工作原理

1. 工作流程

  1. 客户端或应用程序通过 GlusterFS 的挂载点访问数据。
  2. Linux 系统内核通过 VFS API 收到请求并处理。
  3. VFS 将数据递交给 FUSE 内核文件系统,FUSE 文件系统向系统注册后,通过 /dev/fuse 设备文件将数据递交给 GlusterFS 客户端,可将 FUSE 理解为代理。
  4. GlusterFS 客户端收到数据后,根据配置文件处理。
  5. 处理后通过网络将数据传递至远端 GlusterFS Server,写入服务器存储设备。

2. 弹性 HASH 算法

弹性 HASH 算法是 Davies-Meyer 算法的实现,通过 HASH 算法得到 32 位整数范围的 hash 值。假设逻辑卷中有 N 个 Brick,32 位整数范围划分为 N 个连续子空间,每个空间对应一个 Brick。访问命名空间时,计算其 HASH 值,根据值对应的空间定位数据所在 Brick。

优点:保证数据平均分布在每个 Brick 中,解决对元数据服务器的依赖,进而解决单点故障及访问瓶颈。

例如,创建包含四个 Brick 节点的卷,服务端 Brick 挂载目录会给四个 Brick 平均分配 2^32 的区间范围空间,HASH 分布区间保存在目录扩展属性上。访问文件时,通过快速 Hash 函数计算 HASH 值,根据值对应的子空间散列到服务器的 Brick 上。

三、 GlusterFS 的卷类型

GlusterFS 支持七种卷,可满足不同应用对高性能、高可用的需求。

(1) 分布式卷(Distribute volume)

  • 原理:文件通过 HASH 算法分布到所有 Brick Server 上,是 GlusterFS 的基础。以文件为单位根据 HASH 算法散列到不同 Brick,扩大磁盘空间,类似文件级 RAID 0,不具容错能力。
  • 特点:文件分布在不同服务器,无冗余性;易扩展卷大小;存在单点故障导致数据丢失;依赖底层数据保护。

创建命令

 gluster volume create dis-volume server1:/dir1 server2:/dir2 server3:/dir3 forcegluster volume start dis-volume

(2) 条带卷(Stripe volume)

  • 原理:类似 RAID0,文件分成数据块以轮询方式分布到多个 Brick Server,以数据块为单位存储,支持大文件,文件越大读取效率越高。
  • 特点:数据分割成小块分布到不同条带区;减少负载,加速小文件存取;无数据冗余。

创建命令

 gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2 forcegluster volume start stripe-volume

(3) 复制卷(Replica volume)

  • 原理:将文件同步到多个 Brick,具备多个副本,类似文件级 RAID 1,具容错能力。读性能提升,写性能下降。
  • 特点:所有服务器保存完整副本;副本数量创建时决定;至少两个块服务器;具备冗余性。

创建命令

 gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2 forcegluster volume start rep-volume

(4) 分布式条带卷(Distribute Stripe volume)

  • 原理:兼顾分布式卷和条带卷功能,用于大文件访问处理,创建至少需要 4 台服务器。
  • 特点:Brick 数量是条带数的倍数;结合两者优势,处理大文件效率高。

创建命令:

 gluster volume create dis-stripe stripe 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4 forcegluster volume start dis-stripe

(5) 分布式复制卷(Distribute Replica volume)

  • 原理:兼顾分布式卷和复制卷功能,用于需要冗余的情况。
  • 特点:Brick 数量是镜像数的倍数;结合分布式和复制的优势,提供冗余和扩展。

创建命令

 gluster volume create dis-rep replica 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4 forcegluster volume start dis-rep

(6) 条带复制卷(Stripe Replica volume)

  • 原理:类似 RAID 10,同时具有条带卷和复制卷的特点。
  • 特点:兼具条带的高性能和复制的高可用;适合对性能和可靠性要求高的场景。

(7) 分布式条带复制卷(Distribute Stripe Replicavolume)

  • 原理:三种基本卷的复合卷,通常用于类 Map Reduce 应用。
  • 特点:综合多种卷的优势,满足复杂应用需求。

四、 部署 GlusterFS 群集

1. 部署群集环境

  • 准备五台虚拟机:Node1 到 Node4 节点分配 4GB 内存,客户端节点分配 4GB 内存,通过 VMware 虚拟网络 Vmnet8 连接。
  • 配置分区:各节点按规划添加磁盘,用 fdisk 创建分区,mkfs 格式化,创建挂载目录并挂载,修改 /etc/fstab 使其永久生效。
  • 关闭防火墙和 Selinux:所有节点执行相关命令关闭。
  • 配置 hosts 文件:所有节点修改 /etc/hosts 文件,添加各节点解析。
  • 安装软件:采用官方 YUM 源安装,在所有节点执行:
 dnf -y install centos-release-glusterdnf -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma

    启动 GlusterFS:所有节点执行:

     systemctl start glusterd.servicesystemctl enable glusterd.service

    添加节点:在 node1 上执行添加 node1~node4 节点:

     gluster peer probe node1gluster peer probe node2gluster peer probe node3gluster peer probe node4

    2. 创建卷

    (1) 创建分布式卷

     gluster volume create dis-volume node1:/e6 node2:/e6 forcegluster volume start dis-volume

    (2) 创建条带卷

     gluster volume create stripe-volume stripe 2 node1:/d5 node2:/d5 forcegluster volume start stripe-volume

    (3) 创建复制卷

     gluster volume create rep-volume replica 2 node3:/d5 node4:/d5 forcegluster volume start rep-volume

    (4) 创建分布式条带卷

     gluster volume create dis-stripe stripe 2 node1:/b3 node2:/b3 node3:/b3 node4:/b3 forcegluster volume start dis-stripe

    (5) 创建分布式复制卷

     gluster volume create dis-rep replica 2 node1:/c4 node2:/c4 node3:/c4 node4:/c4 forcegluster volume start dis-rep

    3. 部署 Gluster 客户端.

    (1)安装客户端软件

    dnf -y install glusterfs glusterfs-fuse

    (2)创建挂载目录

     mkdir -p /test/{dis,stripe,rep,dis_and_stripe,dis_and_rep}

    修改 hosts 文件:添加各节点解析。

    挂载 Gluster 文件系统

     mount -t glusterfs node1:dis-volume /test/dismount -t glusterfs node1:stripe-volume /test/stripemount -t glusterfs node1:rep-volume /test/repmount -t glusterfs node1:dis-stripe /test/dis_and_stripemount -t glusterfs node1:dis-rep /test/dis_and_rep

    4. 测试 Gluster 文件系统

    • 卷中写入文件:复制测试文件到各卷。
    • 查看文件分布:检查各节点上文件的分布和分片情况。
    • 破坏性测试:挂起节点,测试不同卷的数据访问情况,验证容错能力。如挂起 node2 节点,分布式卷中分布在 node2 的文件无法访问,条带卷数据全部丢失,分布式复制卷数据不丢失等。

    5. 其他维护命令

    (1) 查看 GlusterFS 卷:

     gluster volume list  //查看卷列表gluster volume info  //查看所有卷信息gluster volume status  //查看卷状态

    (2) 停止 / 删除卷

     gluster volume stop dis-stripe  //停止卷gluster volume delete dis-stripe  //删除卷

    (3) 设置卷的访问控制

     gluster volume set dis-rep auth.allow 192.168.1.*,10.1.1.*  //允许指定网段访问
    http://www.xdnf.cn/news/986491.html

    相关文章:

  1. UE_Event Any Damage和OnTake Any Damage
  2. JAVA CAS 详解
  3. Docker完整教程 - 从入门到SpringBoot实战
  4. JSON5 模块的作用与区别
  5. 图标异常问题
  6. 【Linux】进程控制(下)---程序替换宝藏岛
  7. 如何排查PHP-FPM进程CPU占用100%的间歇性问题 (2025)
  8. Unity 服务器交互开发指南
  9. 基于RocketMQ源码理解顺序写、刷盘机制与零拷贝
  10. 海康对接摄像头
  11. Chromium 136 编译指南 Windows篇:获取源代码(五)
  12. 基于贝叶斯学习方法的块稀疏信号压缩感知算法
  13. Spring核心框架完全指南 - 基础知识全解析
  14. 关于界面存在AB测试后UI刷新空白的问题
  15. 计算机网络 : 传输层协议UDP与TCP
  16. 设计原则——KISS原则
  17. 过拟合和欠拟合
  18. RAG技术全解析:从概念到实践,构建高效语义检索系统——嵌入模型与向量数据库搭建指南
  19. java每日精进 6.11【消息队列】
  20. C++11的特性上
  21. Cursor 编程实践 — 开发环境部署
  22. 案例8 模型量化
  23. 使用MyBatis-Plus实现数据权限功能
  24. 【Unity3D优化】优化多语言字体包大小
  25. swagger通过配置将enum自动添加到字段说明中
  26. PHP如何检查一个字符串是否是email格式
  27. 【微信小程序】| 在线咖啡点餐平台设计与实现
  28. 华为云Flexus+DeepSeek征文 | 基于华为云ModelArts Studio打造AingDesk AI聊天助手
  29. list类型
  30. SCADA|测试KingSCADA4.0信创版采集汇川PLC AC810数据