Skip to content

第 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
TranslatorGlusterFS 的模块化功能单元,实现各种存储策略
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/gv0

Volume

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-threadsIO 线程优化
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 status

Trusted Storage Pool

多个 peer 组成一个 Trusted Storage Pool(受信存储池)。只有在同一个 pool 中的节点才能共同组成 volume。

端口

端口用途
24007glusterd 监听端口
24008glusterd 管理端口
49152+brick 端口,每个卷占用一个

3.7 本章小结

  • GlusterFS 是无中心化元数据服务器的分布式文件系统
  • Brick 是存储基本单元,Volume 是逻辑存储空间
  • Translator 是 GlusterFS 的功能模块
  • 弹性哈希算法实现快速的文件定位
  • 复制卷通过 AFR translator 实现多副本冗余

练习题

  1. 什么是 brick 和 volume?它们之间是什么关系?
  2. GlusterFS 为什么要使用弹性哈希算法?
  3. AFR translator 的作用是什么?
  4. GlusterFS 集群中的 peer 是什么意思?如何查看 peer 状态?