一、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
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
| 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
| 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
| 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.*
|
待补充