万字详解 GlusterFS 分布式文件系统:原理 + 卷类型 + CentOS 7 集群部署

前言

在大数据、云计算与容器化场景高速发展的今天,传统单机存储早已无法应对海量数据存储、高并发读写与高可用保障的需求。GlusterFS(GFS) 作为一款开源、无中心、易扩展的分布式文件系统,凭借优秀的横向扩展能力、灵活卷管理与高可用特性,成为中小型企业搭建分布式存储集群的首选方案。

本文从GlusterFS 核心原理、卷类型、集群部署、客户端挂载、功能测试与维护命令全流程讲解,搭配 CentOS 7 实战环境,手把手带你从零搭建生产级 GlusterFS 分布式存储集群,建议收藏!


一、GlusterFS 核心概述

1.1 什么是 GlusterFS

GlusterFS 是 Scale-Out 存储解决方案 Gluster 的核心,开源分布式文件系统 ,依托 TCP/IP 或 InfiniBand RDMA 网络,将多台物理机存储资源汇聚,用单一全局命名空间统一管理数据,可轻松支撑 PB 级容量与数千客户端并发访问。

1.2 GlusterFS 五大核心特性

  1. 强扩展性与高性能 采用 Scale-Out 架构,磁盘、计算、I/O 资源可独立扩容;弹性哈希算法彻底取消元数据服务器,消除单点故障与性能瓶颈,实现完全并行数据访问。

  2. 高可用保障 支持文件自动复制(镜像 / 多副本),硬件故障不影响数据访问;后台增量自我修复,几乎无性能损耗;兼容 EXT3、XFS、ZFS 等标准文件系统,数据可直接用系统工具访问。

  3. 弹性卷管理 数据存于逻辑卷,存储节点可在线增删,业务无中断;支持在线扩容 / 缩容、容量均衡、配置热更新,适配多变业务负载。

  4. 全局统一命名空间屏蔽底层物理存储细节,对外呈现单一虚拟存储池;多节点自动负载均衡,大幅提升存取效率。

  5. InfiniBand RDMA 高性能网络低延迟、高带宽,绕过内核实现应用直接通信,适配高性能计算与数据中心场景。

1.3 GlusterFS 核心术语(必背)

术语 含义
Brick 存储基本单元,= 节点 + 导出目录(如 node1:/e6)
Node 包含若干 Brick 的存储服务器
Volume 一组 Brick 组成的逻辑卷,对外提供服务
Client 挂载 GFS 卷的客户端主机
FUSE 用户态文件系统模块,无需改内核即可实现自定义文件系统
VFS 内核提供的磁盘访问接口
Metadata 描述文件 / 目录属性的数据
POSIX 可移植操作系统接口

二、GlusterFS 工作原理

2.1 完整读写流程

  1. 客户端通过挂载点发起数据请求;
  2. 内核通过 VFS 接收并转发;
  3. VFS 交给 FUSE,FUSE 通过 /dev/fuse 将请求转发给 GlusterFS Client;
  4. Client 按卷配置处理数据(哈希、分片、复制等);
  5. 经网络发送至对应 GlusterFS Server,写入后端存储。

一句话总结:用户请求→VFS→FUSE→GFS 客户端→网络→GFS 服务端→磁盘存储

2.2 弹性哈希算法(Elastic Hash)

GlusterFS 采用Davies-Meyer 算法 计算文件名哈希值,生成 32 位整数;将哈希空间按 Brick 数量 N 平均划分为 N 段,每段映射一个 Brick;文件按哈希值精准定位存储节点,无中心节点、无元数据瓶颈


三、GlusterFS 卷类型详解(重点)

GlusterFS 卷分为基本卷复合卷,不同卷对应不同业务场景,生产环境按需选择。

3.1 基本卷

  1. 分布式卷(Distribute)
  • 原理:文件按哈希分散到不同 Brick,类似 RAID 0;
  • 优点:容量线性扩展、配置简单;
  • 缺点:无冗余、无容错,单 Brick 损坏对应数据丢失;
  • 适用:临时数据、日志、非核心存储。
  1. 复制卷(Replica)
  • 原理:文件同步复制到多个 Brick,类似 RAID 1;
  • 优点:强容错、读性能提升;
  • 缺点:写性能下降、空间利用率低;
  • 适用:核心业务数据、高可用场景。
  1. 分散卷(Disperse)
  • 原理:基于 ErasureCodes 纠错码,类似 RAID5/6;
  • 优点:兼顾冗余与空间利用率,支持配置冗余级别;
  • 要求:Brick 数 > 2×redundancy,最少 3 块 Brick;
  • 适用:大容量、高可靠、低成本存储。
  1. 条带卷(Stripe)
  • 原理:文件分块轮询写入 Brick,超大文件并发高;
  • 现状:GlusterFS 6.1 + 已废弃,可用性极差,单 Brick 故障整卷不可用。

3.2 复合卷

  1. 分布式复制卷(Distribute-Replica)
  • 分布式 + 复制,Brick 数为副本数倍数;
  • 兼顾扩容与高可用,生产最常用
  1. 分布式分散卷(Distribute-Disperse)
  • 分布式 + 分散,平衡容量、可靠性、利用率;
  • 适合大规模低成本存储。
  1. 条带复制卷 / 分布式条带复制卷
  • 已逐步淘汰,极少使用。

四、实验环境规划

4.1 节点与 IP 规划

角色 主机名 IP 地址 系统
存储节点 node1 192.168.10.101 CentOS 7.9
存储节点 node2 192.168.10.102 CentOS 7.9
存储节点 node3 192.168.10.103 CentOS 7.9
存储节点 node4 192.168.10.104 CentOS 7.9
存储节点 node5 192.168.10.105 CentOS 7.9
存储节点 node6 192.168.10.106 CentOS 7.9
客户端 client 192.168.10.107 CentOS 7.9

4.2 磁盘与挂载规划

每节点添加 5 块磁盘:/dev/sdb~sdf,分别格式化 XFS 并挂载:

  • /dev/sdb1 → /b3(3G)
  • /dev/sdc1 → /c4(4G)
  • /dev/sdd1 → /d5(5G)
  • /dev/sde1 → /e6(6G)
  • /dev/sdf1 → /f7(7G)

4.3 卷规划

卷名 类型 Brick
dist-volume 分布式 node1:/e6、node2:/e6
rep-volume 复制 node3:/d5、node4:/d5
disp-volume 分散 node1:/b3、node2:/b3、node3:/b3
dist-rep 分布式复制 node1-4:/c4
dist-disp 分布式分散 node1-6:/f7

五、GlusterFS 集群部署(实战步骤)

5.1 基础环境配置(所有节点执行)

  1. 设置主机名

    hostnamectl set-hostname node1
    bash

  2. 磁盘分区 + 格式化 + 挂载

    分区(以sdb为例)

    fdisk /dev/sdb

    格式化XFS

    mkfs.xfs /dev/sdb1
    mkfs.xfs /dev/sdc1
    mkfs.xfs /dev/sdd1
    mkfs.xfs /dev/sde1
    mkfs.xfs /dev/sdf1

    创建挂载目录

    mkdir -p /b3 /c4 /d5 /e6 /f7

    临时挂载

    mount /dev/sdb1 /b3
    mount /dev/sdc1 /c4
    mount /dev/sdd1 /d5
    mount /dev/sde1 /e6
    mount /dev/sdf1 /f7

    永久挂载(/etc/fstab)

    echo "/dev/sdb1 /b3 xfs defaults 0 0" >> /etc/fstab
    echo "/dev/sdc1 /c4 xfs defaults 0 0" >> /etc/fstab
    echo "/dev/sdd1 /d5 xfs defaults 0 0" >> /etc/fstab
    echo "/dev/sde1 /e6 xfs defaults 0 0" >> /etc/fstab
    echo "/dev/sdf1 /f7 xfs defaults 0 0" >> /etc/fstab

  3. 关闭防火墙与 SELinux

    systemctl stop firewalld
    systemctl disable firewalld
    setenforce 0
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

  4. 配置 hosts 解析

    cat <<EOF > /etc/hosts
    192.168.10.101 node1
    192.168.10.102 node2
    192.168.10.103 node3
    192.168.10.104 node4
    192.168.10.105 node5
    192.168.10.106 node6
    EOF

5.2 安装 GlusterFS(所有节点)

复制代码
yum install -y glusterfs glusterfs-server glusterfs-fuse
# 启动并开机自启
systemctl start glusterd
systemctl enable glusterd

5.3 加入集群(仅 node1 执行)

复制代码
gluster peer probe node2
gluster peer probe node3
gluster peer probe node4
gluster peer probe node5
gluster peer probe node6

查看集群状态:

复制代码
gluster peer status

出现Peer in Cluster (Connected) 表示加入成功。


六、创建各类 GlusterFS 卷

6.1 创建分布式卷

复制代码
gluster volume create dist-volume node1:/e6 node2:/e6 force
gluster volume start dist-volume
gluster volume info dist-volume

6.2 创建复制卷(副本数 2)

复制代码
gluster volume create rep-volume replica 2 node3:/d5 node4:/d5 force
gluster volume start rep-volume

6.3 创建分散卷(3 Brick、冗余 1)

复制代码
gluster volume create disp-volume disperse 3 redundancy 1 \
node1:/b3 node2:/b3 node3:/b3 force
gluster volume start disp-volume

6.4 创建分布式复制卷

复制代码
gluster volume create dist-rep replica 2 \
node1:/c4 node2:/c4 node3:/c4 node4:/c4 force
gluster volume start dist-rep

6.5 创建分布式分散卷

复制代码
gluster volume create dist-disp disperse 3 redundancy 1 \
node1:/f7 node2:/f7 node3:/f7 node4:/f7 node5:/f7 node6:/f7 force
gluster volume start dist-disp

查看所有卷:

复制代码
gluster volume list

七、客户端挂载与使用

7.1 客户端配置

复制代码
# 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
setenforce 0

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

# 配置hosts
cat <<EOF > /etc/hosts
192.168.10.101 node1
192.168.10.102 node2
192.168.10.103 node3
192.168.10.104 node4
192.168.10.105 node5
192.168.10.106 node6
EOF

# 创建挂载目录
mkdir -p /test/{dist,rep,disp,dist_and_rep,dist_and_disp}

7.2 挂载所有卷

复制代码
mount -t glusterfs node1:dist-volume /test/dist
mount -t glusterfs node1:rep-volume /test/rep
mount -t glusterfs node1:disp-volume /test/disp
mount -t glusterfs node1:dist-rep /test/dist_and_rep
mount -t glusterfs node1:dist-disp /test/dist_and_disp

查看挂载:

复制代码
df -h

7.3 永久挂载(/etc/fstab)

复制代码
node1:dist-volume /test/dist glusterfs defaults,_netdev 0 0
node1:rep-volume /test/rep glusterfs defaults,_netdev 0 0
node1:disp-volume /test/disp glusterfs defaults,_netdev 0 0
node1:dist-rep /test/dist_and_rep glusterfs defaults,_netdev 0 0
node1:dist-disp /test/dist_and_disp glusterfs defaults,_netdev 0 0

八、功能测试与验证

8.1 写入测试文件

复制代码
# 生成5个43M测试文件
dd if=/dev/zero of=/root/demo1.log bs=1M count=43
dd if=/dev/zero of=/root/demo2.log bs=1M count=43
dd if=/dev/zero of=/root/demo3.log bs=1M count=43
dd if=/dev/zero of=/root/demo4.log bs=1M count=43
dd if=/dev/zero of=/root/demo5.log bs=1M count=43

# 拷贝到各卷
cp demo* /test/dist/
cp demo* /test/rep/
cp demo* /test/dist_and_rep/

8.2 查看文件分布

  • 分布式卷:文件分散在 node1:/e6、node2:/e6,无冗余;
  • 复制卷:node3:/d5、node4:/d5 文件完全一致;
  • 分布式复制卷:先分布式分发,再复制,兼具扩容与高可用。

8.3 高可用破坏性测试

  1. 挂起 node2,客户端访问 dist-volume、dist-rep 仍可用;
  2. 挂起 node4,复制卷 rep-volume 依然正常读写;验证复制卷与分布式复制卷的容错能力

九、GlusterFS 常用维护命令

9.1 集群与卷查看

复制代码
# 查看节点状态
gluster peer status
# 查看所有卷
gluster volume list
# 查看卷详情
gluster volume info 卷名
# 查看卷运行状态
gluster volume status 卷名

9.2 卷启停与删除

复制代码
# 停止卷
gluster volume stop 卷名
# 删除卷(先停止)
gluster volume delete 卷名

9.3 访问控制

复制代码
# 允许IP段访问
gluster volume set 卷名 auth.allow 192.168.10.*

9.4 集群重置

复制代码
systemctl stop glusterd
rm -rf /var/lib/glusterd/*
systemctl start glusterd

十、总结与生产建议

  1. 卷选型 :核心业务用分布式复制卷 ;大容量低成本用分布式分散卷;禁止使用条带卷;
  2. 可靠性:副本数至少 2,分散卷冗余≥1,避免单点故障;
  3. 性能:搭配万兆网卡、SSD,开启 RDMA 提升性能;
  4. 运维:定期检查 peer 状态、卷状态,配置监控告警。

GlusterFS 无中心架构、易部署、强扩展的特性,使其成为中小型分布式存储最佳实践。本文覆盖理论 + 部署 + 测试全流程,可直接用于学习与生产环境落地

相关推荐
程序员大辉2 小时前
开源客户端SSH Netcatty:免费替代Termius,带AI的现代化运维工具
运维·开源·ssh
Elivs.Xiang2 小时前
ubuntu20中安装Jenkins
linux·运维·ubuntu·jenkins
说再见再也见不到2 小时前
Ubuntu 将阿里云 OSS 对象存储挂载为本地硬盘(含开机自启)
linux·运维·服务器·ubuntu·阿里云·云计算
凤年徐2 小时前
自动化构建工具:make 与 Makefile
android·java·linux·自动化
坚持就完事了2 小时前
Linux的重定向符
运维·服务器·前端
拄杖忙学轻声码2 小时前
Linux平台 CentOS、Ubuntu、Debian 系统安装 docker compose
ubuntu·docker·centos
小樱花的樱花2 小时前
Linux Shell命令入门
linux·服务器·开发语言
艾莉丝努力练剑2 小时前
【Linux网络】计算机网络入门:从背景到协议,理解网络通信基础
linux·运维·服务器·c++·学习·计算机网络
艾莉丝努力练剑2 小时前
【Linux线程】Linux系统多线程(十):线程安全和重入、死锁相关话题
java·linux·运维·服务器·c++·学习·安全