GlusterFS 分布式文件系统
·
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 数据访问流程
- 客户端请求:应用通过 GlusterFS 挂载点访问数据
- 内核处理:Linux 内核通过 VFS 接收请求,转交 FUSE 文件系统
- FUSE 代理:通过
/dev/fuse设备将请求传递给 GlusterFS 客户端进程 - 客户端处理:
-
- DHT 翻译器:计算文件路径哈希值,确定目标 Brick (公式:
hash("/data/file.txt") % N,N 为 Brick 数量) - 其他翻译器:根据卷类型 (复制 / 条带化 / 纠删码) 处理数据 (如副本同步、条带分割)
- DHT 翻译器:计算文件路径哈希值,确定目标 Brick (公式:
- 网络传输:通过 TCP/IP 或 InfiniBand RDMA 将数据发送到目标 Brick
- 服务端存储: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 环境准备
-
阶段规划(推荐至少 3 节点):
node1: 192.168.1.101
node2: 192.168.1.102
node3: 192.168.1.103
-
基础配置(所有节点):
# 关闭防火墙和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 创建存储池与卷
-
创建存储池(在 node1 执行):
# 发现节点 gluster peer probe node2 gluster peer probe node3 # 查看集群状态 gluster peer status -
准备 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 -
创建分布式复制卷(在 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 高可用机制
- 数据冗余:
- 复制卷:文件同步复制到多个 Brick,节点故障时自动切换到副本
- 纠删码卷:通过校验分片恢复数据,存储效率高于复制卷 (如 3+1 配置,存储效率 75%)
- 自动故障转移:
- AFR 翻译器实时监控 Brick 状态,检测到故障时自动切换到可用副本
- 客户端透明切换,应用无感知
- 数据自愈:
- 故障节点恢复后,自动同步缺失数据,无需人工干预
- 执行
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 扩展与维护
-
添加节点与 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 -
删除节点与 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
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)