GlusterFS分布式文件系统

一、GlusterFS 概述

1.1 简介

GlusterFS 是开源的分布式文件系统,主要由存储服务器(Brick Server)客户端NFS/Samba 存储网关组成。支持数 PB 存储容量和数千客户端,横向扩展能力强。

与传统分布式文件系统的区别

  • 传统分布式文件系统依赖元数据服务器,存在单点故障风险
  • GlusterFS 采用无元服务器设计,通过弹性哈希算法定位数据

1.2 核心特点

特点 说明
扩展性和高性能 Scale-Out 架构,高速网络互联(TCP/IP、InfiniBand RDMA)
高可用性 自动复制、自我修复功能
全局统一命名空间 多节点整合为虚拟存储池
弹性卷管理 在线增加/移除节点、扩缩容
标准协议 支持 NFS、CIFS、HTTP、FTP、SMB、Gluster 原生协议

1.3 核心术语

术语 说明
Brick 基本存储单元,格式为 SERVER:EXPORT(如 192.168.80.10:/data/sdb1
Volume 逻辑卷,一组 Brick 的集合,类似 LVM
FUSE 内核模块,允许用户创建自定义文件系统
VFS 内核空间对用户空间提供的磁盘访问接口
Glusterd 后台管理进程,每个节点必须运行

二、架构与工作原理

2.1 模块化堆栈式架构

  • 模块称为 Translator,通过组合实现复杂功能
  • Replicate 模块 → RAID1
  • Stripe 模块 → RAID0
  • 两者组合 → RAID10

2.2 工作流程

1
2
客户端访问 → VFS API → FUSE 内核文件系统 → GlusterFS Client → 
网络传输 → GlusterFS Server → 存储设备

2.3 弹性 HASH 算法

  • 基于 Davies-Meyer 算法,生成 32 位整数 hash 值
  • 将 hash 空间划分为 N 个子空间,每个对应一个 Brick
  • 优点:数据平均分布、解决元数据服务器依赖、无单点故障

三、卷类型详解

卷类型 说明 冗余性 适用场景
分布式卷 文件级 RAID0,按 HASH 分布到不同 Brick 容量扩展
条带卷 文件分块轮询分布,类似 RAID0 大文件读写
复制卷 文件同步副本,类似 RAID1 高可用
分布式条带卷 分布式 + 条带组合 大文件 + 容量
分布式复制卷 分布式 + 复制组合 高可用 + 容量
条带复制卷 条带 + 复制组合,类似 RAID10 高性能高可用
分布式条带复制卷 三种组合 MapReduce 类应用

创建命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 分布式卷(默认)
gluster volume create dis-volume node1:/data/sdb1 node2:/data/sdb1 force

# 条带卷
gluster volume create stripe-volume stripe 2 node1:/data/sdc1 node2:/data/sdc1 force

# 复制卷
gluster volume create rep-volume replica 2 node3:/data/sdb1 node4:/data/sdb1 force

# 分布式条带卷(需 4 台服务器)
gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force

# 分布式复制卷
gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force

四、部署步骤

4.1 实验环境

节点 IP 磁盘 挂载点
node1 192.168.80.10 /dev/sdb1~sde1 /data/sdb1~sde1
node2 192.168.80.11 /dev/sdb1~sde1 /data/sdb1~sde1
node3 192.168.80.12 /dev/sdb1~sde1 /data/sdb1~sde1
node4 192.168.80.13 /dev/sdb1~sde1 /data/sdb1~sde1
客户端 192.168.80.14 - -

4.2 环境准备(所有 Node)

1
2
3
4
5
6
# 关闭防火墙
systemctl stop firewalld
setenforce 0

# 磁盘分区挂载脚本
vim /opt/fdisk.sh
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
NEWDEV=`ls /dev/sd* | grep -o 'sd[b-z]' | uniq`
for VAR in $NEWDEV
do
echo -e "n\np\n\n\n\nw\n" | fdisk /dev/$VAR &> /dev/null
mkfs.xfs /dev/${VAR}"1" &> /dev/null
mkdir -p /data/${VAR}"1" &> /dev/null
echo "/dev/${VAR}1 /data/${VAR}1 xfs defaults 0 0" >> /etc/fstab
done
mount -a &> /dev/null
1
2
3
4
5
# 配置 hosts
echo "192.168.80.10 node1" >> /etc/hosts
echo "192.168.80.11 node2" >> /etc/hosts
echo "192.168.80.12 node3" >> /etc/hosts
echo "192.168.80.13 node4" >> /etc/hosts

4.3 安装 GlusterFS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 配置本地 repo
mkdir repo.bak && mv *.repo repo.bak

cat > /etc/yum.repos.d/glfs.repo <<EOF
[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
EOF

yum clean all && yum makecache
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma

systemctl start glusterd.service
systemctl enable glusterd.service

4.4 构建信任池

1
2
3
4
5
6
7
8
# 仅需在 node1 执行
gluster peer probe node1
gluster peer probe node2
gluster peer probe node3
gluster peer probe node4

# 查看状态
gluster peer status

4.5 创建并启动卷

1
2
3
4
5
6
7
8
9
10
11
12
13
gluster volume create dis-volume node1:/data/sdb1 node2:/data/sdb1 force
gluster volume create stripe-volume stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
gluster volume create rep-volume replica 2 node3:/data/sdb1 node4:/data/sdb1 force
gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force
gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force

gluster volume start dis-volume
gluster volume start stripe-volume
gluster volume start rep-volume
gluster volume start dis-stripe
gluster volume start dis-rep

gluster volume list

4.6 客户端部署

1
2
3
4
5
6
7
8
9
10
11
12
# 安装客户端
yum -y install glusterfs glusterfs-fuse

# 创建挂载点
mkdir -p /test/{dis,stripe,rep,dis_stripe,dis_rep}

# 挂载
mount.glusterfs node1:dis-volume /test/dis
mount.glusterfs node1:stripe-volume /test/stripe
mount.glusterfs node1:rep-volume /test/rep
mount.glusterfs node1:dis-stripe /test/dis_stripe
mount.glusterfs node1:dis-rep /test/dis_rep

五、破坏性测试结果

卷类型 故障节点 结果
分布式卷 node2 demo5.log 丢失(数据不安全)
条带卷 node2 无法访问(无冗余)
复制卷 node2 + node4 正常访问(数据安全)
分布式条带卷 node2 无法访问(无冗余)
分布式复制卷 node2 正常访问(数据安全)

结论:带复制功能的卷具备高可用性,数据更安全。


六、维护命令

1
2
3
4
5
6
gluster volume list              # 查看所有卷
gluster volume info # 查看卷详情
gluster volume status # 查看卷状态
gluster volume stop <volname> # 停止卷
gluster volume delete <volname> # 删除卷(需先停止)
gluster volume set <volname> auth.allow 192.168.80.* # 访问控制

待补充

  • 与 Kubernetes PV/PVC 集成
  • 性能调优参数
  • 故障恢复流程