OpenEuler24.03下GlusterFS分布式存储实战指南

OpenEuler 24.03 GlusterFS 分布式文件系统超详细教程

一、环境准备(所有节点执行)

1.1 系统要求与节点规划

  • 系统版本:openEuler 24.03 LTS(x86_64/arm64)
  • 最低配置:2 核 4G 内存,每节点至少 1 块独立数据盘
  • 网络要求:节点间网络互通,建议万兆网卡
  • 示例节点规划

表格

主机名 IP 地址 数据盘 挂载点
gluster-node1 192.168.1.101 /dev/sdb /data/brick1
gluster-node2 192.168.1.102 /dev/sdb /data/brick1
gluster-node3 192.168.1.103 /dev/sdb /data/brick1

1.2 系统初始化

设置主机名(对应节点执行)

bash

复制代码
# 节点1
hostnamectl set-hostname gluster-node1

# 节点2
hostnamectl set-hostname gluster-node2

# 节点3
hostnamectl set-hostname gluster-node3

配置 hosts 解析

bash

复制代码
cat >> /etc/hosts << EOF
192.168.1.101 gluster-node1
192.168.1.102 gluster-node2
192.168.1.103 gluster-node3
EOF

配置时间同步

bash

复制代码
dnf install -y chrony
systemctl enable --now chronyd
chronyc sources

1.3 数据盘准备(关键!)

⚠️ 重要提示:GlusterFS 的 brick 必须挂载在独立的文件系统上,不能使用系统盘根目录!

bash

复制代码
# 分区(如果磁盘未分区)
fdisk /dev/sdb
# 按n创建新分区,p主分区,默认回车,w保存

# 格式化为XFS(推荐)
mkfs.xfs /dev/sdb1

# 创建挂载点
mkdir -p /data/brick1

# 配置永久挂载
echo "/dev/sdb1 /data/brick1 xfs defaults 0 0" >> /etc/fstab

# 挂载并验证
mount -a
df -h /data/brick1

1.4 防火墙与 SELinux 配置

方法一:生产环境推荐(开放端口)

bash

复制代码
# 开放GlusterFS所需端口
firewall-cmd --permanent --add-service=glusterfs
firewall-cmd --permanent --add-port=24007-24008/tcp
firewall-cmd --permanent --add-port=49152-49251/tcp
firewall-cmd --reload

# 验证端口
ss -ntlup | grep glusterd

方法二:测试环境(临时关闭)

bash

复制代码
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 临时关闭SELinux
setenforce 0

# 永久关闭SELinux(重启生效)
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

二、安装 GlusterFS(所有节点执行)

openEuler 官方仓库已包含 GlusterFS 软件包,无需额外配置第三方源。

bash

复制代码
# 安装服务端和客户端组件
dnf install -y glusterfs glusterfs-server glusterfs-fuse

# 启动服务并设置开机自启
systemctl enable --now glusterd

# 验证服务状态
systemctl status glusterd

三、配置 GlusterFS 集群(仅在主节点执行)

3.1 添加节点到信任池

bash

复制代码
# 添加节点2和节点3
gluster peer probe gluster-node2
gluster peer probe gluster-node3

# 查看集群节点状态
gluster peer status

预期输出

plaintext

复制代码
Number of Peers: 2

Hostname: gluster-node2
Uuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
State: Peer in Cluster (Connected)

Hostname: gluster-node3
Uuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
State: Peer in Cluster (Connected)

3.2 查看集群信息

bash

复制代码
# 查看集群详细信息
gluster pool list

# 查看所有卷
gluster volume list

四、创建和管理 GlusterFS 卷

4.1 卷类型对比与选择

表格

卷类型 特点 适用场景 磁盘利用率 可靠性
分布式卷 文件随机分布在不同 brick 海量小文件存储,追求容量 100%
复制卷 文件完整复制到多个 brick 高可用数据存储 1 / 副本数
分布式复制卷 先分布式再复制 兼顾容量和可靠性 1 / 副本数
纠删码卷 基于擦除码,空间效率高 冷数据归档

4.2 创建分布式卷(默认类型)

bash

复制代码
# 创建brick目录(所有节点执行)
mkdir -p /data/brick1/gv-dist

# 创建分布式卷(主节点执行)
gluster volume create gv-dist \
gluster-node1:/data/brick1/gv-dist \
gluster-node2:/data/brick1/gv-dist \
gluster-node3:/data/brick1/gv-dist

# 启动卷
gluster volume start gv-dist

# 查看卷信息
gluster volume info gv-dist

4.3 创建复制卷(推荐生产环境)

bash

复制代码
# 创建brick目录(所有节点执行)
mkdir -p /data/brick1/gv-rep

# 创建3副本复制卷(主节点执行)
gluster volume create gv-rep replica 3 \
gluster-node1:/data/brick1/gv-rep \
gluster-node2:/data/brick1/gv-rep \
gluster-node3:/data/brick1/gv-rep force

# 启动卷
gluster volume start gv-rep

# 查看卷信息
gluster volume info gv-rep

4.4 创建分布式复制卷

bash

复制代码
# 创建brick目录(所有节点执行)
mkdir -p /data/brick1/gv-dist-rep

# 创建2副本分布式复制卷(6个brick)
gluster volume create gv-dist-rep replica 2 \
gluster-node1:/data/brick1/gv-dist-rep \
gluster-node2:/data/brick1/gv-dist-rep \
gluster-node3:/data/brick1/gv-dist-rep \
gluster-node1:/data/brick1/gv-dist-rep2 \
gluster-node2:/data/brick1/gv-dist-rep2 \
gluster-node3:/data/brick1/gv-dist-rep2 force

# 启动卷
gluster volume start gv-dist-rep

4.5 创建纠删码卷(EC 卷)

bash

复制代码
# 创建brick目录(所有节点执行)
mkdir -p /data/brick1/gv-ec

# 创建4+2纠删码卷(6个brick,可容忍2个节点故障)
gluster volume create gv-ec disperse 6 redundancy 2 \
gluster-node1:/data/brick1/gv-ec \
gluster-node2:/data/brick1/gv-ec \
gluster-node3:/data/brick1/gv-ec \
gluster-node1:/data/brick1/gv-ec2 \
gluster-node2:/data/brick1/gv-ec2 \
gluster-node3:/data/brick1/gv-ec2 force

# 启动卷
gluster volume start gv-ec

五、客户端挂载 GlusterFS 卷

5.1 安装客户端软件

bash

复制代码
# 在客户端节点执行
dnf install -y glusterfs glusterfs-fuse

5.2 临时挂载

bash

复制代码
# 创建挂载点
mkdir -p /mnt/glusterfs/gv-rep

# 挂载卷(可以使用任意集群节点IP)
mount -t glusterfs gluster-node1:/gv-rep /mnt/glusterfs/gv-rep

# 验证挂载
df -h /mnt/glusterfs/gv-rep

5.3 永久挂载(开机自动挂载)

bash

复制代码
# 编辑fstab文件
echo "gluster-node1:/gv-rep /mnt/glusterfs/gv-rep glusterfs defaults,_netdev 0 0" >> /etc/fstab

# 验证自动挂载
mount -a

⚠️ 重要 :必须添加_netdev选项,表示依赖网络,确保网络就绪后再挂载。

六、测试 GlusterFS 集群

6.1 数据写入测试

bash

复制代码
# 在客户端写入测试文件
cd /mnt/glusterfs/gv-rep
for i in {1..10}; do echo "test file $i" > test$i.txt; done

# 查看文件
ls -l

6.2 数据同步验证

bash

复制代码
# 在节点1查看brick目录
ls /data/brick1/gv-rep

# 在节点2查看brick目录
ls /data/brick1/gv-rep

# 两个节点应该有相同的文件(3副本卷所有节点都有完整文件)

6.3 高可用测试

bash

复制代码
# 停止节点1的glusterd服务
systemctl stop glusterd

# 在客户端继续操作,应该仍然可以正常读写
echo "test after node1 down" > /mnt/glusterfs/gv-rep/test-ha.txt

# 启动节点1的服务
systemctl start glusterd

# 数据会自动同步到节点1
ls /data/brick1/gv-rep/test-ha.txt

七、GlusterFS 集群管理

7.1 卷扩容

bash

复制代码
# 添加新节点到集群
gluster peer probe gluster-node4

# 为复制卷添加brick(必须成对添加,保持副本数)
gluster volume add-brick gv-rep replica 3 \
gluster-node4:/data/brick1/gv-rep force

# 重新平衡数据(必须执行!)
gluster volume rebalance gv-rep start

# 查看重平衡状态
gluster volume rebalance gv-rep status

7.2 卷缩容

bash

复制代码
# 移除brick(必须成对移除)
gluster volume remove-brick gv-rep replica 2 \
gluster-node3:/data/brick1/gv-rep start

# 查看移除状态
gluster volume remove-brick gv-rep replica 2 \
gluster-node3:/data/brick1/gv-rep status

# 确认移除完成后提交
gluster volume remove-brick gv-rep replica 2 \
gluster-node3:/data/brick1/gv-rep commit

7.3 快照管理

bash

复制代码
# 启用卷的快照功能
gluster volume set gv-rep features.snapshots on

# 创建快照
gluster snapshot create snap1 gv-rep

# 查看快照列表
gluster snapshot list

# 恢复快照
gluster snapshot restore snap1

# 删除快照
gluster snapshot delete snap1

7.4 常用管理命令

bash

复制代码
# 查看所有卷状态
gluster volume status

# 查看卷详细信息
gluster volume info gv-rep

# 停止卷
gluster volume stop gv-rep

# 删除卷(必须先停止)
gluster volume delete gv-rep

# 设置卷访问控制(只允许指定IP访问)
gluster volume set gv-rep auth.allow 192.168.1.*

# 查看卷性能统计
gluster volume profile gv-rep start
gluster volume profile gv-rep info
gluster volume profile gv-rep stop

八、常见问题排查

8.1 节点无法加入集群

  • 检查网络是否互通:ping gluster-node2
  • 检查防火墙端口是否开放:telnet gluster-node2 24007
  • 检查时间是否同步:date
  • 检查 hosts 解析是否正确:cat /etc/hosts

8.2 客户端挂载失败

  • 检查卷是否已启动:gluster volume status gv-rep
  • 检查客户端是否能访问集群节点
  • 检查卷的访问控制设置:gluster volume info gv-rep | grep auth.allow
  • 查看客户端日志:tail -f /var/log/glusterfs/mnt-glusterfs-gv-rep.log

8.3 数据不同步

  • 检查所有节点的 glusterd 服务是否正常运行
  • 查看卷状态:gluster volume status gv-rep
  • 执行自修复:gluster volume heal gv-rep full
  • 查看自修复状态:gluster volume heal gv-rep info

8.4 性能优化

bash

复制代码
# 启用性能优化
gluster volume set gv-rep performance.cache-size 256MB
gluster volume set gv-rep performance.write-behind on
gluster volume set gv-rep performance.read-ahead on
gluster volume set gv-rep performance.io-thread-count 16

# 针对小文件优化
gluster volume set gv-rep features.cache-invalidation on
gluster volume set gv-rep features.cache-invalidation-timeout 600

九、生产环境最佳实践

  1. 使用独立的存储网络:分离数据流量和管理流量
  2. 使用 XFS 文件系统:GlusterFS 官方推荐
  3. 至少 3 节点集群:避免脑裂问题
  4. 定期创建快照:防止数据误删除
  5. 监控集群状态:使用 Prometheus+Grafana 监控
  6. 定期备份数据:分布式存储不是备份
  7. 避免使用系统盘作为 brick:防止系统故障导致数据丢失
相关推荐
人间打气筒(Ada)2 个月前
GlusterFS实现KVM高可用及热迁移
分布式·虚拟化·kvm·高可用·glusterfs·热迁移
无泪无花月隐星沉4 个月前
uos server 1070e 部署glusterfs
uos·glusterfs·国产化os
云雾J视界6 个月前
Linux企业级解决方案架构:字节跳动短视频推荐系统全链路实践
linux·云原生·架构·kubernetes·音视频·glusterfs·elk stack
斯普信专业组1 年前
GlusterFS卷管理实战指南:从扩展卷到自我修复,全面掌握高效运维技巧
glusterfs
pokemon..2 年前
GlusterFS 分布式文件系统
glusterfs
西风未眠2 年前
GlusterFS性能调优
性能优化·集群优化·调优参数·gfs·glusterfs