GlusterFS 分布式文件系统

GlusterFS 是一款开源分布式文件系统,基于 Scale-Out(横向扩展)架构,通过将多节点存储资源整合为统一命名空间,提高可用性、高性能、可扩展的存储解决方案。它采用无元数据服务器设计,通过弹性哈希算法定位数据,避免了传统分布式存储的性能瓶颈和单点故障问题。

一、核心概念与架构

1.1 核心术语

术语 含义 作用
Brick 最基本的存储单元,服务器上用于 GlusterFS 的目录 (如/data/brick1) 数据实际存储位置,类似 “乐高积木块”
Volume 逻辑卷,由多个 Brick 组合而成,对外提供统一挂载点 应用访问的统一存储接口,类似 “用积木搭建的城堡”
Trusted Storage Pool 受信任的存储池,由多个 GlusterFS 服务器组成的集群 管理和协调所有存储资源
glusterd 管理守护进程,运行在每个服务器节点上 集群管理、卷配置、状态监控
glusterfsd Brick 进程,由 glusterd 管理 导出底层文件系统 (XFS/EXT4),处理客户端请求
Translator 翻译器,模块化组件 实现文件系统功能 (如哈希、复制、条带化、缓存)
DHT 分布式哈希表,核心翻译器 负责文件到 Brick 的映射,无中心元数据
AFR 自动文件复制,高可用翻译器 实现数据副本同步,保证数据一致性

1.2 架构特点

GlusterFS 采用无元数据服务器架构,这是其与传统分布式存储系统的核心区别:

  • 去中心化设计:客户端直接通过哈希算法计算文件位置,无需查询中心服务器,消除单点故障和性能瓶颈
  • 模块化栈式设计:所有功能通过 translator 实现,可灵活组合,支持功能扩展
  • 用户空间实现:基于 FUSE (用户空间文件系统),无需修改内核,易于部署和维护
  • 线性扩展:通过添加节点,存储容量和性能可近乎线性增长
  • 跨协议支持:支持 NFS、SMB、HTTP、FTP 等多种访问协议,兼容 POSIX 标准

二、核心组件与工作原理

2.1 数据访问流程

  1. 客户端请求:应用通过 GlusterFS 挂载点访问数据
  2. 内核处理:Linux 内核通过 VFS 接收请求,转交 FUSE 文件系统
  3. FUSE 代理:通过/dev/fuse设备将请求传递给 GlusterFS 客户端进程
  4. 客户端处理
    • DHT 翻译器:计算文件路径哈希值,确定目标 Brick (公式:hash("/data/file.txt") % N,N 为 Brick 数量)
    • 其他翻译器:根据卷类型 (复制 / 条带化 / 纠删码) 处理数据 (如副本同步、条带分割)
  5. 网络传输:通过 TCP/IP 或 InfiniBand RDMA 将数据发送到目标 Brick
  6. 服务端存储:glusterfsd 进程接收数据,写入底层文件系统 (XFS 推荐)

2.2 数据分布机制

GlusterFS 采用弹性哈希算法实现数据分布,具有以下特点:

  • 文件级分布:以文件为单位进行哈希分布,而非块级,简化管理
  • 动态适应:添加 / 删除节点时,只需重新分布受影响的文件,无需全量数据迁移
  • 负载均衡:客户端缓存 Brick 拓扑,后续请求直接与目标 Brick 通信,避免中心节点瓶颈

三、卷类型详解

GlusterFS 支持多种卷类型,可根据性能、可靠性和容量需求灵活选择:

3.1 四大基本卷类型

卷类型 原理 特点 适用场景 最少节点数
分布式卷 (Distribute) 文件通过哈希算法分布到不同 Brick 纯容量扩展,无容错,类似 RAID 0 非关键数据、海量存储 1 (推荐 2+)
复制卷 (Replica) 文件同步复制到多个 Brick 高可用,强一致性,类似 RAID 1 关键业务、数据库共享 2 (副本数)
条带卷 (Striped) 文件分成条带 (默认 128KB) 分布到多个 Brick 高吞吐量,无容错,类似 RAID 0 大文件 (视频 / 备份) 2 (条带数)
纠删码卷 (Dispersed) 数据分片 + 校验,类似 RAID 5/6 存储效率高 (n/k),容错能力强 大容量归档、低成本冗余 k+m (k 数据分片,m 校验分片)

3.2 复合卷类型

最常用的是分布式复制卷(Distributed Replicated),结合分布式和复制特性,是企业生产环境的首选:

  • 原理:文件先通过哈希分布到多个复制组,每个复制组内实现数据同步
  • 优势:同时具备容量扩展和高可用性,支持节点故障自动切换
  • 示例:4 节点集群,创建 2 副本分布式复制卷,实际是 2 个复制组(每组 2 节点),文件哈希到其中一个组

四、部署与配置步骤(以 CentOS 为例)

4.1 环境准备

  1. 阶段规划(推荐至少 3 节点):

    node1: 192.168.1.101

    node2: 192.168.1.102

    node3: 192.168.1.103

  2. 基础配置(所有节点):

    # 关闭防火墙和SELinux
    systemctl stop firewalld && systemctl disable firewalld
    setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
    
    # 配置主机名解析
    echo "192.168.1.101 node1" >> /etc/hosts
    echo "192.168.1.102 node2" >> /etc/hosts
    echo "192.168.1.103 node3" >> /etc/hosts
    
    # 安装依赖
    yum install -y epel-release
    

4.2 安装 GlusterFS

# 添加GlusterFS仓库
yum install -y centos-release-gluster
yum clean all && yum makecache

# 安装GlusterFS服务端和客户端
yum install -y glusterfs-server glusterfs-client

# 启动服务并设置开机自启
systemctl start glusterd && systemctl enable glusterd

4.3 创建存储池与卷

  1. 创建存储池(在 node1 执行):

    # 发现节点
    gluster peer probe node2
    gluster peer probe node3
    
    # 查看集群状态
    gluster peer status
    
  2. 准备 Brick 目录(所有节点):

    mkdir -p /data/brick1
    # 推荐使用XFS文件系统挂载磁盘到/data/brick1
    mkfs.xfs /dev/sdb1
    echo "/dev/sdb1 /data/brick1 xfs defaults 0 0" >> /etc/fstab
    mount -a
    
  3. 创建分布式复制卷(在 node1 执行):

    # 创建2副本分布式复制卷(卷名: myvolume)
    gluster volume create myvolume replica 2 \
    node1:/data/brick1/volume1 \
    node2:/data/brick1/volume1 \
    node3:/data/brick1/volume1 \
    node4:/data/brick1/volume1  # 若有4节点
    
    # 启动卷
    gluster volume start myvolume
    
    # 查看卷信息
    gluster volume info myvolume
    

4.4 客户端挂载

# 安装客户端
yum install -y glusterfs-client

# 创建挂载点
mkdir -p /mnt/glusterfs

# 挂载卷(临时)
mount -t glusterfs node1:myvolume /mnt/glusterfs

# 永久挂载(添加到/etc/fstab)
echo "node1:myvolume /mnt/glusterfs glusterfs defaults,_netdev 0 0" >> /etc/fstab
mount -a

五、高可用与性能优化

5.1 高可用机制

  1. 数据冗余
    • 复制卷:文件同步复制到多个 Brick,节点故障时自动切换到副本
    • 纠删码卷:通过校验分片恢复数据,存储效率高于复制卷 (如 3+1 配置,存储效率 75%)
  2. 自动故障转移
    • AFR 翻译器实时监控 Brick 状态,检测到故障时自动切换到可用副本
    • 客户端透明切换,应用无感知
  3. 数据自愈
    • 故障节点恢复后,自动同步缺失数据,无需人工干预
    • 执行gluster volume heal myvolume手动触发自愈

5.2 性能优化参数

参数 作用 推荐值 默认值
performance.write-behind-window-size 写缓冲区大小,提升写性能 16MB~64MB 1MB
performance.io-thread-count IO 线程数,提升并行读写 32~64 16
performance.cache-size 读缓存大小 1GB~4GB 128MB
performance.cache-max-file-size 缓存最大文件大小 128MB~1GB 256MB
network.ping-timeout 网络超时时间 10~30 秒 42 秒
cluster.lookup-optimize 启用查找优化 on on

优化命令示例

gluster volume set myvolume performance.write-behind-window-size 16MB
gluster volume set myvolume performance.io-thread-count 32

5.3 扩展与维护

  1. 添加节点与 Brick

    # 添加新节点到集群
    gluster peer probe node4
    
    # 扩展卷(添加新Brick)
    gluster volume add-brick myvolume node4:/data/brick1/volume1
    
    # 触发数据再平衡
    gluster volume rebalance myvolume start
    
    # 监控再平衡进度
    gluster volume rebalance myvolume status
    
  2. 删除节点与 Brick

    # 移除Brick(先确保数据已迁移)
    gluster volume remove-brick myvolume node4:/data/brick1/volume1 start
    
    # 等待移除完成后提交
    gluster volume remove-brick myvolume node4:/data/brick1/volume1 commit
    
    # 移除节点
    gluster peer detach node4
    
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐