Skip to content

GlusterFS-分布式文件系统

GlusterFS 概述

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

作为Scale-Out(横向扩展)存储解决方案的核心,GlusterFS在存储数据方面具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。它支持借助TCP/IP或InfiniBandRDMA网络将物理分散分布的存储资源汇聚在一起,统一提供存储服务。通过扩展不同的节点可以支持PB级别的存储容量。

与传统分布式文件系统不同,GlusterFS没有元数据服务器组件,这有助于提升整个系统的性能、可靠性和稳定性。传统的分布式文件系统大多通过元服务器来存储元数据,这样的设计在浏览目录时效率高,但是存在单点故障的缺陷。而GlusterFS基于无元服务器的设计,数据横向扩展能力强,具备较高的可靠性及存储效率。

mermaid
graph TD
    A[GlusterFS是什么?]
    style A fill:#F9A825,stroke:#333,stroke-width:2px
    
    classDef feature fill:#fff,stroke:#666,stroke-width:1px,stroke-dasharray:5 5
    
    B[集群NAS]
    C[高性能]
    D[无中心架构]
    E[Cloud Storage]
    F[分布式文件系统]
    G[标准硬件]
    H[POSIX]
    I[自修复]
    J[自动复制]
    K[InfiniBand]
    L[全局统一命名空间]
    M[高可用]
    
    class B,C,D,E,F,G,H,I,J,K,L,M feature

    %% 关键修正:添加虚拟连接点并分组布局
    A--->B
    A--->C
    A--->D
    A--->E
    A--->F
    A--->G
    A--->H
    A--->I
    A--->J
    A--->K
    A--->L
    A--->M

    linkStyle 0,1,2,3,4,5,6,7,8,9,10,11 stroke-width:0px

GlusterFS 特点

可扩展性和高性能

  • 横向扩展:能够通过简单地增加存储节点的方式来提高存储容量和性能(磁盘、计算和I/O资源都可以独立增加),支持10GbE和InfiniBand等高速网络互联
  • 高性能:通过分布式并行处理I/O请求,优化了读写性能,特别是针对大数据集的读取操作,通过条带化、镜像和分布式复制等存储策略,可以大幅提升数据访问效率

高可用性

  • 无单点故障:没有中央元数据服务器,而是通过分布式元数据管理来避免单点故障
  • 冗余和自动恢复:支持多种数据保护模式,包括复制、分布式复制和奇偶校验等,能够在节点故障时迅速恢复数据服务

全局统一命名空间

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

弹性卷管理

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

弹性哈希算法

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

标准协议支持

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

POSIX兼容性

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

用户空间设计

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

GlusterFS 存储架构

Brick(存储块)

  • 定义:GlusterFS 的基本物理存储单元,对应存储节点上的一个本地目录(如 /data/brick1),由底层文件系统(如 XFS、EXT4)管理。
  • 功能
    • 实际存储文件数据分片或完整文件(取决于卷类型)。
    • 通过格式 SERVER:EXPORT(如 192.168.1.4:/data/brick1)标识。
  • 特性
    • 无专用硬件依赖,支持标准磁盘设备。

Volume(逻辑卷)

  • 定义:由多个 Brick 聚合而成的逻辑存储单元,提供统一的命名空间。
  • 功能
    • 定义数据分布策略(如复制、条带、分散)。
    • 支持动态扩展(在线添加/移除 Brick)。
  • 卷类型示例
    • 分布式卷:文件级分布,无冗余(类似 RAID0)。
    • 复制卷:文件全量复制,高可用(类似 RAID1)。
    • 分散卷:纠删码冗余(如 10+3 模式),高效存储。

Client(客户端)

  • 核心模块
    • FUSE(用户空间文件系统):通过内核模块挂载 GlusterFS 卷,提供 POSIX 兼容接口。
    • libgfapi:原生 API 库,支持直接 I/O 操作(绕过 FUSE)。
  • 智能特性
    • 缓存卷配置信息,通过弹性哈希算法直接定位数据所在 Brick,无需元数据服务器。
    • 支持并行读写(如条带卷分块处理)。

服务端守护进程

  • glusterd
    • 角色:集群管理进程,运行于每个节点。
    • 功能
      • 节点对等(gluster peer probe)构建可信存储池(Trusted Storage Pool)。
      • 卷生命周期管理(创建/启动/停止/扩容)。
      • 配置同步至所有节点与客户端。
  • glusterfsd
    • 角色:数据服务进程,处理客户端 I/O 请求。
    • 功能
      • 根据卷策略(如复制、条带)操作 Brick 数据。
      • 支持 TCP/RDMA 传输协议优化网络性能。

Translator(转换器)

  • 定位:GlusterFS 的模块化功能引擎,以堆栈形式组合实现复杂逻辑。
  • 核心模块
    • Distribute:实现分布式卷的文件哈希定位。
    • Replicate:实现复制卷的同步写入。
    • Stripe:实现条带卷的分块存储。
    • Self-Heal:自动修复副本数据不一致。
  • 工作流程:I/O 请求按顺序通过 Translator 堆栈处理(如 Client → Replicate → Distribute → Brick)。

弹性哈希算法(Elastic Hash)

  • 核心机制
    • 根据文件名计算 32 位哈希值,映射到 Brick 组成的哈希环,直接定位数据存储位置。
  • 优势
    • 消除元数据服务器瓶颈,避免单点故障。
    • 数据均匀分布,支持动态扩容(新增 Brick 自动重平衡)。

辅助组件

  • 仲裁器(Arbiter)
    • 解决复制卷的脑裂问题(如 3 副本卷中设置仲裁节点)。
  • 地域复制(Geo-Replication)
    • 跨数据中心异步同步数据,支持灾难恢复。

组件协作关系

mermaid
graph LR
  A[Client] -- FUSE/libgfapi --> B(Translator堆栈)
  B -- 弹性哈希定位 --> C[glusterfsd]
  C -- 读写操作 --> D[Brick]
  E[glusterd] <--> F[节点管理]
  E <--> G[卷配置同步]
  F <--> H[可信存储池]

GlusterFS 工作原理

GlusterFS的工作流程如下:

  1. 客户端访问数据:客户端或应用程序通过GlusterFS的挂载点访问数据,就像访问常规的本地文件系统一样
  2. 操作系统内核处理:当客户端操作系统接收到应用程序的I/O请求时,它通过VFS层处理这个请求。如果是Linux系统,客户端通常通过FUSE内核模块或内建的Kernel Module
  3. GlusterFS客户端处理
    • GlusterFS客户端负责将操作系统传递来的I/O请求转换为对GlusterFS服务端的调用
    • 客户端使用GlusterFS的API与集群中的各个节点进行通信,确定数据的位置
    • 根据GlusterFS的卷配置和弹性HASH算法,客户端计算出数据应该存储或读取的brick(存储节点)
  4. 数据传输:客户端通过网络将请求发送到对应的brick节点。brick节点接收到请求后,通过VFS接口,在本地文件系统上执行相应的读写操作
  5. 卷类型影响的处理方式:根据卷的类型(如分布式卷、复制卷、条带卷、分布式复制卷等),请求的处理方式会有所不同
  6. 返回结果:brick完成操作后,将结果通过网络传回给客户端。客户端再将处理结果反馈给操作系统,进而由操作系统通知应用程序
mermaid
graph TD
    A[客户端/应用程序] -->|1. 发起I/O请求<br>(读/写/删除)| B[操作系统内核]
    B -->|2. VFS层处理请求| C[FUSE模块]
    C -->|3. 通过/dev/fuse转发| D[GlusterFS客户端]
    D -->|4.1 解析卷配置| E[弹性哈希算法]
    D -->|4.2 定位目标Brick| F[卷类型策略]
    E -->|4.1.1 计算文件哈希值| F
    F -->|5.1 分布式卷:单节点写入| G[网络传输层]
    F -->|5.2 复制卷:同步多副本| G
    F -->|5.3 条带卷:分块写入| G
    G -->|6. TCP/IP或RDMA协议| H[Brick服务端]
    H -->|7.1 VFS接口处理| I[本地文件系统]
    I -->|7.2 执行磁盘操作| J((存储设备))
    J -->|8. 返回操作结果| H
    H -->|9. 聚合副本响应| G
    G -->|10. 返回数据/状态| D
    D -->|11. 反馈内核| C
    C -->|12. 返回应用| A

    classDef process fill:#e6f7ff,stroke:#3498db,stroke-width:2px;
    classDef storage fill:#e8f5e9,stroke:#4CAF50,stroke-width:2px;
    classDef network fill:#fff8e1,stroke:#FFC107,stroke-width:2px;
    class A,B,C,D,E,F,H,I process;
    class J storage;
    class G network;

弹性HASH算法

弹性HASH算法是Davies-Meyer算法的具体实现,通过HASH算法可以得到一个32位的整数范围的hash值。假设逻辑卷中有N个存储单位Brick,则32位的整数范围将被划分为N个连续的子空间,每个空间对应一个Brick。当用户或应用程序访问某一个命名空间时,通过对该命名空间计算HASH值,根据该HASH值所对应的32位整数空间定位数据所在的Brick。

弹性HASH算法的优点:

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

GlusterFS 卷的类型

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

分布式卷

  • 特点:文件通过HASH算法分布到所有Brick Server上,是GlusterFS的默认卷类型
  • 优点:更容易和廉价地扩展卷的大小
  • 缺点:不具备冗余性,单点故障会造成数据丢失
  • 创建命令
    bash
    gluster volume create dis-volume server1:/dir1 server2:/dir2 server3:/dir3
  • 适用场景:当不需要数据冗余时,可以用于存储大量的非关键数据

条带卷

  • 特点:类似RAID0,文件被分成数据块并以轮询的方式分布到多个BrickServer上
  • 优点:支持大文件存储,文件越大,读取效率越高
  • 缺点:不具备冗余性
  • 创建命令
    bash
    gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2
  • 适用场景:需要高带宽和并行读写性能的场景,如流媒体服务、大数据分析等

复制卷

  • 特点:将文件同步到多个Brick上,使其具备多个文件副本,属于文件级RAID1
  • 优点:具有容错能力,即使一个节点损坏,也不影响数据的正常使用
  • 缺点:磁盘利用率较低
  • 创建命令
    bash
    gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2
  • 适用场景:需要高可用性和数据安全性的场景,如数据库和关键业务系统

分布式条带卷

  • 特点:BrickServer数量是条带数的倍数,兼具分布式卷和条带卷的特点
  • 优点:可以获得更好的性能和一定的扩展性
  • 缺点:不自带冗余
  • 创建命令
    bash
    gluster volume create dis-stripe stripe 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
  • 适用场景:分布式条带卷通常适用于对性能要求很高,同时可以接受较低冗余度的应用环境

分布式复制卷

  • 特点:Brick Server数量是镜像数的倍数,兼具分布式卷和复制卷的特点
  • 优点:提供分布式存储的同时还保证数据的冗余
  • 创建命令
    bash
    gluster volume create dis-rep replica 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
  • 适用场景:既要扩展存储容量又要保证数据冗余的复杂环境

条带复制卷

  • 特点:类似RAID10,同时具有条带卷和复制卷的特点
  • 优点:既能实现数据条带化以提高性能,又能做到数据的冗余备份

分布式条带复制卷

  • 特点:三种基本卷的复合卷
  • 适用场景:通常用于类MapReduce应用

Gluster 部署

环境准备

系统类型配置磁盘IP地址主机名所需软件
openEuler 24.03(LTS)2C4G500GB192.168.148.120gfs-data01glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
openEuler 24.03(LTS)2C4G500GB192.168.148.121gfs-data02glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
openEuler 24.03(LTS)2C4G500GB192.168.148.122gfs-data03glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
openEuler 24.03(LTS)1C2G-192.168.148.123gfs-clientglusterfs glusterfs-fuse

部署步骤

  1. 配置主机之间的解析(在此所有主机配置相同,在此只列举data1节点的配置);
  2. 在所有data节点上安装GlusterFS(在此所有主机配置相同,在此只列举data1节点的配置);
  3. 在data1节点上进行创建集群,其他节点会同步配置;
  4. 在多个data节点创建数据存储的位置;
  5. 在data1节点创建数据存储的卷(复制卷),其他节点会同步配置;
  6. 在client客户端节点上安装gluster客户端工具并测试挂载;
  7. client客户端节点测试存放文件;
  8. 扩展:Gluster的管理命令;

配置主机之间的解析(所有主机)

bash
cat >> /etc/hosts << EOF
192.168.148.120 gfs-data01
192.168.148.121 gfs-data02
192.168.148.122 gfs-data03
192.168.148.123 gfs-client
EOF

# 测试
ping gfs-data01 -c 2

磁盘格式化

所有data节点执行

bash
# XFS格式化
parted

# 为每个节点添加存储磁盘(如 /dev/sda、/dev/sdb),分区并格式化为 XFS 文件系统:
mkfs.xfs /dev/sdb1

# 创建挂载目录并配置永久挂载(编辑 /etc/fstab)
mkdir -p /data
echo "/dev/sdb1 /data xfs defaults 0 0" >> /etc/fstab
mount -a

安装GlusterFS

所有data节点执行

bash
dnf -y install glusterfs glusterfs-server glusterfs-fuse

# 启动服务
systemctl start glusterd

# 开机自启
systemctl enable glusterd

# 检测进程
ps -aux | grep glusterd

创建集群

在data1节点上进行创建集群

bash
# 添加节点1
gluster peer probe gfs-data01
# 添加节点2
gluster peer probe gfs-data02
# 添加节点3
gluster peer probe gfs-data03

# 查看集群状态
gluster peer status

存储卷配置

bash
# 所有data节点执行
mkdir -p /data/gfs-volume

# 查看存储卷信息
gluster volume info

# 创建存储卷(任意data节点执行)
gluster volume create gfs-volume replica 3 \
    gfs-data01:/data/gfs-volume \
    gfs-data02:/data/gfs-volume \
    gfs-data03:/data/gfs-volume \
force

# 启动卷
gluster volume start gfs-volume

客户端测试

安装软件

bash
dnf install glusterfs-client -y

挂载gfs

bash
mkdir /data
echo 'gfs-data01:/rep-volume  /data  glusterfs  defaults,_netdev  0 0' >> /etc/fstab
mount -a

验证挂载

bash
df -Th
touch /data/{1..10}.txt
# 到data节点查看是否生成

gluster 常用命令

集群管理命令

命令功能示例
gluster peer probe添加节点到集群gluster peer probe node02
gluster peer detach从集群移除节点gluster peer detach node03
gluster peer status查看集群节点状态gluster peer status
gluster pool list显示存储池信息gluster pool list

卷管理命令

命令功能示例
gluster volume create创建新卷gluster volume create vol1 replica 2 node1:/brick1 node2:/brick2
gluster volume start启动卷gluster volume start vol1
gluster volume stop停止卷gluster volume stop vol1 --mode=script
gluster volume delete删除卷gluster volume delete vol1
gluster volume info查看卷信息gluster volume info vol1
gluster volume status查看卷状态gluster volume status vol1 detail
gluster volume list列出所有卷gluster volume list
gluster volume add-brick添加存储块gluster volume add-brick vol1 node3:/brick3
gluster volume remove-brick移除存储块gluster volume remove-brick vol1 node3:/brick3 start
gluster volume replace-brick更换存储块gluster volume replace-brick vol1 node1:/old node1:/new commit

卷配置命令

命令功能示例
gluster volume set配置卷参数gluster volume set vol1 performance.cache-size 2GB
gluster volume reset重置卷配置gluster volume reset vol1
gluster volume get查看卷参数gluster volume get vol1 all
gluster volume heal数据自愈管理gluster volume heal vol1 info
gluster volume rebalance数据重平衡gluster volume rebalance vol1 start

监控与诊断命令

命令功能示例
gluster volume profile性能分析gluster volume profile vol1 start
gluster volume topI/O操作监控gluster volume top vol1 open
gluster volume statedump状态转储gluster volume statedump vol1
gluster volume sync同步卷配置gluster volume sync all
gluster volume log日志位置查询grep vol1 /var/log/glusterfs/*.log

高级管理命令

命令功能示例
gluster snapshot create创建快照gluster snapshot create snap1 vol1
gluster snapshot list列出快照gluster snapshot list
gluster system:: execute执行系统命令gluster system:: execute "df -h" all
gluster quota list配额管理gluster quota vol1 list /dir
gluster geo-replication异地复制gluster geo-replication vol1 remote_host::vol2 start