第 1/20 天|GlusterFS 入门到精通系列开篇
一、引言:为什么需要分布式存储
在云原生与容器化时代,单机存储早已无法满足业务对容量、性能、可用性的三重诉求。当一台服务器的硬盘塞满、当某块磁盘损坏导致业务中断、当跨机房容灾成为合规要求——分布式存储便成为绕不开的基础设施。
GlusterFS(Gluster File System)是一款开源、横向可扩展、无元数据服务器(No Metadata Server)的分布式文件系统,由 Red Hat 维护。它把多台普通 x86 服务器上的磁盘通过弹性哈希算法(Elastic Hash)组织成一个统一命名空间,既能像本地目录一样 mount,又能提供 PB 级容量与多副本高可用。本系列 20 篇将从架构、安装、卷类型、客户端、灾备、监控、调优到生产全栈部署,带你从入门到精通。本文是开篇,聚焦架构与基础概念。

二、GlusterFS 设计架构
2.1 整体拓扑:无中心化设计
传统分布式存储(如 MooseFS、HDFS NameNode)多采用「元数据服务器 + 数据节点」的主从架构,元数据节点是瓶颈与单点。GlusterFS 走了一条截然不同的路——无元数据服务器架构,所有节点对等,数据访问通过客户端侧的弹性哈希算法直接定位到目标 Brick,消除中心节点瓶颈。
核心组件拓扑:
┌─────────────────────────────────────────────────────────────┐
│ GlusterFS Trusted Storage Pool │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ node1 │ │ node2 │ │ node3 │ │
│ │ /data/b1 │ │ /data/b2 │ │ /data/b3 │ ← Bricks │
│ │ glusterd │◄──►│ glusterd │◄──►│ glusterd │ ← 守护进程 │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │
│ └───────────────┴───────────────┘ │
│ TCP/RPC 互信通道 (24007) │
└─────────────────────────────────────────────────────────────┘
▲
│ FUSE mount / NFS / SMB
┌───────────┴──────────┐
│ Client (Ubuntu) │
│ mount -t glusterfs │
└───────────────────────┘
2.2 数据流向
- 客户端执行
mount -t glusterfs node1:/gv0 /mnt/gv0,通过 RPC 与glusterd握手,获取 Volume 拓扑与 Brick 列表。 - 客户端加载
glusterfsFUSE 内核模块,挂载点/mnt/gv0上的所有 VFS 调用被转发到用户态glusterfs进程。 - 用户态进程内置 Translator(翻译器)栈,依次经过:
mount → fuse → client → protocol/client → cluster(distribute/replicate/stripe)→ storage/posix。 cluster类型 Translator(如DHT弹性哈希、AFR自动复制)决定数据写入哪些 Brick。- 通过 TCP 长连接把数据直接写入目标节点的
posix存储(即真实磁盘目录),全程不经过任何元数据服务器。
2.3 高可用机制
GlusterFS 的高可用分三层:
- 节点级:Trusted Pool 内任意节点宕机,卷仍可访问(前提是卷类型有冗余,如 Replicated/Dispersed)。
- 数据级:通过 AFR(Automatic File Replication)或 Erasure Code 提供副本/纠删冗余,单 Brick 损坏不丢数据。
- 客户端级:挂载时可指定
backupvolfile-server=node2:node3,当 node1 的glusterd不可达时自动切换。
2.4 存储规划建议(3 节点起步)
| 角色 | 主机名 | IP | 磁盘 | Brick 目录 |
|---|---|---|---|---|
| Server+Client | node1 | 192.168.1.11 | /dev/sdb 100G | /data/brick1 |
| Server+Client | node2 | 192.168.1.12 | /dev/sdb 100G | /data/brick2 |
| Server+Client | node3 | 192.168.1.13 | /dev/sdb 100G | /data/brick3 |
3 节点是起步最小集:可做 3 副本(最强冗余)、2+1 Arbiter(省容量防脑裂)、2+1 Dispersed(容量与冗余平衡)。
三、核心概念速览
本节建立全局认知,后续章节会逐一深入实战。
3.1 Brick
Brick 是 GlusterFS 的基本存储单元,本质上是节点上的一个导出目录,通常对应一块独立磁盘。一个 Brick = 节点:/目录,例如 node1:/data/brick1。Volume 由一个或多个 Brick 组成。
3.2 Trusted Storage Pool
受信存储池是一组互相信任的 GlusterFS 节点集合。通过 gluster peer probe 把节点加入池,池内节点共享卷配置。只有同一池的节点才能组成 Volume。
3.3 Volume
Volume 是对客户端暴露的逻辑卷,是 Brick 的逻辑组合。客户端挂载的 node1:/gv0 中的 gv0 即 Volume 名。GlusterFS 提供六大卷类型:Distributed(分布式)、Replicated(复制)、Striped(条带)、Distributed Replicated、Dispersed(纠删)、Distributed Dispersed。本系列第 4–8 天逐一实战。
3.4 glusterd
glusterd 是每个节点上的管理守护进程,监听 TCP 24007,负责 peer 管理、volume 创建/启停、客户端握手、快照协调。它是控制面,不参与数据面。
四、部署实战:搭建 3 节点受信存储池
本节在 Ubuntu 22.04 LTS 上从零搭建 3 节点 GlusterFS 集群。这是后续所有卷类型实战的基础环境,请务必完成。
4.1 环境准备(三节点均执行)
# 1. 设置主机名与 hosts 解析(在三台机器分别执行)
hostnamectl set-hostname node1 # node2、node3 同理
# 2. 三台机器写入统一的 hosts
cat >> /etc/hosts << 'EOF'
192.168.1.11 node1
192.168.1.12 node2
192.168.1.13 node3
EOF
# 3. 关闭防火墙(生产环境应开放 24007、24008、49152-49664 端口)
ufw disable
# 4. 时间同步(脑裂预防必备)
apt update && apt install -y chrony ntpdate
systemctl enable –now chrony
4.2 安装 GlusterFS(apt 官方仓库)
Ubuntu 22.04 官方源里的 glusterfs-server 版本通常较旧,推荐使用 Launchpad PPA 安装较新稳定版(如 10.x 或 11.x)。
# 添加 GlusterFS 官方 PPA(Ubuntu 22.04 jammy)
apt install -y software-properties-common
add-apt-repository -y ppa:gluster/glusterfs-11
# 安装服务端与客户端
apt update
apt install -y glusterfs-server glusterfs-client
# 验证版本
glusterfs –version
# 期望输出:glusterfs 11.x
systemctl enable –now glusterd
systemctl status glusterd –no-pager
若 PPA 不可用,也可直接用 Ubuntu 自带版本(约 7.x),命令一致,功能足够本系列学习:
apt install -y glusterfs-server glusterfs-client
4.3 源码编译安装(备选方案)
当需要特定版本或定制特性时,使用源码编译。以 GlusterFS 11.1 为例:
# 安装编译依赖
apt install -y build-essential autoconf automake libtool
pkg-config libtirpc-dev liburing-dev libuuid-dev
libacl1-dev libattr1-dev flex bison libsqlite3-dev
# 下载并编译
cd /usr/local/src
wget https://download.gluster.org/pub/gluster/glusterfs/11/11.1/glusterfs-11.1.tar.gz
tar xzf glusterfs-11.1.tar.gz && cd glusterfs-11.1
./configure –prefix=/usr/local/glusterfs –disable-linux-io_uring
make -j$(nproc) && make install
# 加入 PATH 与 systemd
export PATH=/usr/local/glusterfs/sbin:$PATH
echo 'export PATH=/usr/local/glusterfs/sbin:$PATH' >> /etc/profile.d/gluster.sh
# 启动(源码版需手动起 glusterd)
/usr/local/glusterfs/sbin/glusterd
glusterfs –version
4.4 准备 Brick 目录(三节点均执行)
生产环境建议 Brick 使用独立磁盘(LVM/xfs),便于后续快照。本例用 /dev/sdb:
# 格式化独立磁盘为 xfs
mkfs.xfs -f /dev/sdb
mkdir -p /data/brick1 # node1; node2 用 brick2,node3 用 brick3
echo '/dev/sdb /data/brick1 xfs defaults 0 0' >> /etc/fstab
mount -a && df -h /data/brick1
4.5 组建 Trusted Storage Pool
在 node1 上执行,把 node2、node3 加入受信池:
# 在 node1 上探测 node2、node3
gluster peer probe node2
gluster peer probe node3
# 预期输出:
# peer probe: success
# 查看池状态
gluster peer status
预期输出(在 node1 上看到两个 peer,State 为 Peer in Cluster):
Number of Peers: 2
Hostname: node2
Uuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
State: Peer in Cluster (Connected)
Hostname: node3
Uuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
State: Peer in Cluster (Connected)
4.6 创建第一个分布式复制卷
为验证环境可用,先创建一个 2x3 的分布式复制卷(2 个复制组,每组 3 副本,跨 6 Brick——本例 3 节点各出 2 Brick):
# 各节点再建第二个 Brick 目录
mkdir -p /data/brick1b # node1; 对应 node2:/data/brick2b、node3:/data/brick3b
# 创建卷
gluster volume create gv0
replica 3
node1:/data/brick1/gv0 node2:/data/brick2/gv0 node3:/data/brick3/gv0
node1:/data/brick1b/gv0 node2:/data/brick2b/gv0 node3:/data/brick3b/gv0
# 启动卷
gluster volume start gv0
# 查看卷信息
gluster volume info gv0
4.7 客户端挂载验证
任一节点或独立客户端均可挂载:
# 安装客户端
apt install -y glusterfs-client
# 挂载
mkdir -p /mnt/gv0
mount -t glusterfs node1:/gv0 /mnt/gv0
# 写入测试
echo "hello glusterfs day1" > /mnt/gv0/test.txt
cat /mnt/gv0/test.txt
ls -l /mnt/gv0/
五、登录验证命令
部署完成后,按以下顺序验证集群健康:
# 1. 验证 glusterd 服务
systemctl is-active glusterd
# active
# 2. 验证 peer 池
gluster peer status
# Number of Peers: 2,全部 Connected
# 3. 验证卷
gluster volume info
# Volume Name: gv0, Type: Distributed-Replicate, Status: Started
# 4. 验证卷状态(含 Brick 在线情况)
gluster volume status gv0
# N Bricks online,无 N/A
# 5. 验证挂载与读写
mount | grep gv0
df -h /mnt/gv0
cat /mnt/gv0/test.txt
六、日常巡检基础命令
作为开篇,先建立日常巡检命令清单,后续每篇会按主题扩展:
# A. 集群健康
gluster peer status # peer 连接状态
gluster volume status # 所有卷 Brick 在线状态
gluster volume info # 卷配置
# B. 容量巡检
df -h /data/brick1 # 各节点 Brick 容量
gluster volume top gv0 read/write # IO 热点
# C. 服务与日志
systemctl status glusterd # 守护进程
journalctl -u glusterd –since "1 hour ago" # 服务日志
tail -f /var/log/glusterfs/glusterd.log # 详细日志
# D. 性能快照
gluster volume profile gv0 start
gluster volume profile gv0 info # 查看 IO profile
gluster volume profile gv0 stop
七、常见问题 FAQ
Q1:peer probe: failed: Probe returned with Transport endpoint is not connected
A:对方 glusterd 未启动或防火墙拦截 24007。检查 systemctl status glusterd 与 ufw status,确保 hosts 解析正确。
Q2:mount 报 Transport endpoint is not connected 但卷已 Started
A:客户端 glusterfs 版本与服务端差异过大。统一两端版本;或检查 /var/log/glusterfs/mnt-gv0.log 定位。
Q3:3 节点能否做 3 副本?
A:可以,且是推荐的入门高可用配置。每个 Brick 在不同节点,任一节点宕机数据仍完整可用。
八、总结
本文从「为什么需要分布式存储」出发,讲解了 GlusterFS 无元数据服务器的对等架构、数据在 Translator 栈中的流转、三层高可用机制,以及 Brick/Peer/Volume/glusterd 四个核心概念。随后在 Ubuntu 22.04 上从零搭建了 3 节点 Trusted Storage Pool,创建了第一个分布式复制卷并完成客户端挂载验证,最后给出日常巡检命令清单。
核心要点:
– GlusterFS 靠弹性哈希定位数据,无中心元数据瓶颈
– Trusted Pool 是卷的前提,peer probe 建立互信
– Brick 是物理存储单元,Volume 是逻辑呈现
– 3 节点是生产最小集,可灵活组合各类卷类型
掌握了架构与基础环境后,下一篇将正式进入安装专题的深度实践。
九、下期预告
第 2 天:Ubuntu 22.04 安装 GlusterFS(apt 仓库与源码编译)
将深入对比 apt PPA 与源码编译两种安装方式的差异,覆盖依赖管理、systemd 服务配置、版本升级与回滚、多版本共存等生产场景,让你掌握可复现的安装流水线。
十、系列目录
- 📌 第 1 天:GlusterFS 分布式存储概述与架构基础 ← 本文















暂无评论内容