主题
第 3 章 GlusterFS 核心概念
3.1 GlusterFS 是什么
GlusterFS(Gluster File System)是一个开源的分布式文件系统,具有强大的横向扩展能力。它可以将多台普通服务器的本地存储资源整合为一个统一的分布式存储池。
GlusterFS 的设计哲学是:无中心化元数据服务器,通过弹性哈希算法(Elastic Hash Algorithm, EHA)定位文件位置,避免了单点瓶颈。
3.2 GlusterFS 架构组件
核心组件
┌─────────────────────────────────────────────┐
│ Client / Mount Point │
└─────────────────────┬───────────────────────┘
│ FUSE / NFS / SMB /原生协议
┌─────────────────────▼───────────────────────┐
│ GlusterFS Volume │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Brick │ │ Brick │ │ Brick │ │
│ │ Node1 │ │ Node2 │ │ Node3 │ │
│ └─────────┘ └─────────┘ └─────────┘ │
└─────────────────────────────────────────────┘| 组件 | 说明 |
|---|---|
| Brick | 存储的基本单元,对应节点上的一个目录 |
| Volume | 多个 brick 组成的逻辑卷,客户端看到的是 volume |
| Translator | GlusterFS 的模块化功能单元,实现各种存储策略 |
| Glusterd | 管理守护进程,负责集群管理和卷操作 |
| FUSE | 用户态文件系统接口,用于 native client 挂载 |
3.3 Brick、Volume、Translator 概念
Brick
Brick 是 GlusterFS 中最基础的存储单元。一个 brick 就是服务器上的一个目录,通常挂载在独立磁盘上。
bash
# 例如
node1:/data/brick1/gv0
node2:/data/brick1/gv0
node3:/data/brick1/gv0Volume
Volume 是 GlusterFS 对外暴露的逻辑存储空间。客户端挂载的是 volume,而不是具体 brick。
创建 volume 时需要指定:
- 卷名(如
gv0) - 卷类型(如 replica 3)
- 组成该卷的 brick 列表
Translator
Translator 是 GlusterFS 的"功能模块",每个 translator 负责一种特定功能:
| Translator | 功能 |
|---|---|
| DHT(Distributed Hash Translator) | 分布式哈希,决定文件放在哪个 brick |
| AFR(Automatic File Replicator) | 自动文件复制,实现副本冗余 |
| EC(Erasure Code) | 纠删码 |
| IO-threads | IO 线程优化 |
| Write-behind | 写合并优化 |
| Read-ahead | 预读优化 |
这些 translator 以"栈"的方式组合,数据访问时依次经过各个 translator 处理。
3.4 GlusterFS 卷类型总览
| 卷类型 | 英文名 | 特点 |
|---|---|---|
| 分布式卷 | Distributed | 文件分布到不同 brick,无冗余 |
| 复制卷 | Replicated | 每个文件保存多份副本 |
| 条带卷 | Striped | 大文件分块存储到多个 brick |
| 分布式复制卷 | Distributed-Replicated | 分布式 + 复制的组合 |
| 纠删码卷 | Dispersed | 高效冗余,利用纠删码 |
本书使用 复制卷(Replica 3),每个文件同时保存在 3 个 brick 上。
3.5 GlusterFS 数据分布与定位算法
弹性哈希算法(EHA)
GlusterFS 使用弹性哈希算法确定文件应该存放在哪个 brick 上。
文件路径 ──► 哈希计算 ──► 32 位哈希值 ──► 映射到 brick优点:
- 无需中央元数据服务器
- 文件定位速度快
- 添加新节点时数据迁移量小
复制卷中的文件存放
在 replica 3 卷中,每个文件会同时写入 3 个 brick:
客户端写入 file.txt
│
├──► Node1:/data/brick1/gv0/file.txt
├──► Node2:/data/brick1/gv0/file.txt
└──► Node3:/data/brick1/gv0/file.txt读取时,客户端可以从任意一个健康副本读取。
3.6 GlusterFS 集群通信机制
Peer
GlusterFS 集群中的每个节点称为一个 peer。节点之间通过 glusterd 守护进程通信。
bash
# 查看 peer 状态
gluster peer statusTrusted Storage Pool
多个 peer 组成一个 Trusted Storage Pool(受信存储池)。只有在同一个 pool 中的节点才能共同组成 volume。
端口
| 端口 | 用途 |
|---|---|
| 24007 | glusterd 监听端口 |
| 24008 | glusterd 管理端口 |
| 49152+ | brick 端口,每个卷占用一个 |
3.7 本章小结
- GlusterFS 是无中心化元数据服务器的分布式文件系统
- Brick 是存储基本单元,Volume 是逻辑存储空间
- Translator 是 GlusterFS 的功能模块
- 弹性哈希算法实现快速的文件定位
- 复制卷通过 AFR translator 实现多副本冗余
练习题
- 什么是 brick 和 volume?它们之间是什么关系?
- GlusterFS 为什么要使用弹性哈希算法?
- AFR translator 的作用是什么?
- GlusterFS 集群中的 peer 是什么意思?如何查看 peer 状态?