适用:Replica 复制卷(2副本/3副本);分布式卷无副本,故障直接丢数据,下面方案不适用 术语快速回顾
- glusterd:管理进程(24007),集群peer、卷元数据管理
- glusterfsd:brick数据进程,真正读写业务数据
- AFR:自动文件复制自愈(heal),副本间数据同步
- split-brain:脑裂,多副本同一文件内容/元数据冲突,无法自动修复
一、节点掉线 / Brick 离线
现象:gluster volume status 显示 brick Transport endpoint not connected / Offline
# 查看状态
gluster peer status
gluster volume status oldqiang01
gluster volume heal oldqiang01 info
情况1:节点只是网络/服务挂了,磁盘brick数据完好(可恢复上线)
- 登录故障节点,检查并启动glusterd
systemctl status glusterd
systemctl enable --now glusterd
- 排查:主机名解析 /etc/hosts、防火墙24007、brick端口、磁盘是否挂载(brick目录所在分区不能umount)
- 等待peer重连,brick自动上线
- 查看待修复条目,后台自动heal;大量差异手动触发
gluster volume heal oldqiang01 full
watch gluster volume heal oldqiang01 info
目标:所有brick Number of entries = 0
情况2:节点硬盘损坏、机器报废,brick数据不可读(永久下线)
❌ 不能用 replace-brick(replace需要旧brick可读) 操作顺序:
#1 强制移除故障brick
gluster volume remove-brick oldqiang01 glusterfs01:/data1 force
#2 确认brick已从卷列表删除
gluster volume info oldqiang01
#3 故障节点退出集群
gluster peer detach glusterfs01 force
#4 新服务器:安装gluster,peer probe加入集群
gluster peer probe glusterfs04
#5 新节点准备好空brick目录,添加新brick
gluster volume add-brick oldqiang01 glusterfs04:/data1
#6 触发自愈,从正常副本同步全部数据
gluster volume heal oldqiang01 full
#7 监控heal进度直到条目为0
gluster volume heal oldqiang01 info summary
二、Split-Brain 脑裂故障(高危!多副本文件冲突)
现象:heal info 出现split-brain标记,文件无法读写,AFR无法自动自愈
# 查看脑裂文件
gluster volume heal oldqiang01 info split-brain
修复方式:指定源brick作为正确版本覆盖其他副本
# 语法:选定源brick修复单个文件
gluster volume heal oldqiang01 split-brain source-brick glusterfs02:/data1 /wp/test.jpg
批量处理(谨慎!生产业务低峰,确认源数据正确)
# 将所有脑裂文件,以 glusterfs02 brick 的版本为准修复
gluster volume heal oldqiang01 split-brain source-brick glusterfs02:/data1
预防:2副本极易脑裂;推荐3副本,或2副本+arbiter仲裁节点。
三、节点丢失卷元数据(节点重启后看不到volume)
现象:peer状态connected,但gluster volume info在该节点看不到卷;/var/lib/glusterd/vols丢失/损坏
只修复卷配置元数据,不同步业务文件数据 在故障节点执行,从正常peer拉取卷元数据:
gluster volume sync glusterfs02
⚠️ 不要在正常节点自己sync自己,会报
sync from localhost not allowed
四、peer probe 失败:Connection failed
Connection failed. Please check if gluster daemon is operational.
排查顺序:
- 两端
systemctl status glusterd确认running - 双向ping主机名,/etc/hosts配置正确(gluster依赖hostname)
- 防火墙放行glusterfs服务(24007/tcp)
firewall-cmd --add-service=glusterfs --permanent
firewall-cmd --reload
- nc测试端口连通
nc -zv glusterfs02 24007
- 检查SELinux,临时setenforce 0测试
五、客户端挂载失败 / 挂载后卡住
高可用挂载写法
mount -t glusterfs glusterfs01,glusterfs02,glusterfs03:/oldqiang01 /mnt/gluster
/etc/fstab(必须加_netdev)
glusterfs01,glusterfs02,glusterfs03:/oldqiang01 /mnt/gluster glusterfs defaults,_netdev 0 0
故障排查:
- 客户端能解析所有集群节点hostname
- 客户端能访问集群24007端口
- 检查卷状态,确认至少一个brick组在线满足quorum
- 挂载卡住:检查网络、防火墙,
dmesg看gluster客户端日志
六、brick目录磁盘满故障
现象:写入报错,heal卡住
- 清理brick所在磁盘空间
- 不要直接删除brick目录内文件!不要手动操作brick底层文件,会直接损坏副本一致性
- 空间释放后,heal会继续自动修复
- 扩容方案:add-brick新增brick,三副本自动均衡
七、replace-brick 在线替换brick(旧盘可读取场景)
适用:硬盘健康,只是想更换更大磁盘,旧brick可读
# 启动迁移
gluster volume replace-brick oldqiang01 glusterfs01:/data1 glusterfs01:/data2 start
# 查看进度
gluster volume replace-brick oldqiang01 glusterfs01:/data1 glusterfs01:/data2 status
# 迁移100%后提交
gluster volume replace-brick oldqiang01 glusterfs01:/data1 glusterfs01:/data2 commit
# 异常终止(未commit前)
gluster volume replace-brick oldqiang01 glusterfs01:/data1 glusterfs01:/data2 abort
❌ brick离线不可读时禁止使用replace-brick
八、常用排查命令汇总(故障排查三板斧)
#1 集群节点peer状态
gluster peer status
#2 卷整体信息,查看brick列表和副本数
gluster volume info oldqiang01
#3 brick进程在线状态(最重要)
gluster volume status oldqiang01
#4 查看自愈任务,待同步文件
gluster volume heal oldqiang01 info
#5 查看脑裂文件
gluster volume heal oldqiang01 info split-brain
#6 查看卷日志
tail -f /var/log/glusterfs/glusterd.log
tail -f /var/log/glusterfs/bricks/data1-glusterfs01.log
⚠️ 生产禁忌(非常重要)
- 禁止手动直接修改brick底层目录里的文件(/data1/wp/xxx),极易脑裂、破坏AFR元数据;所有读写走gluster挂载点
- brick磁盘不要随便umount,先下线卷/移除brick
- 业务高峰不执行heal full、replace-brick、add-brick(大量小文件会拖慢业务)
- 不要随意重启多台节点,防止quorum不满足,卷不可读写
快速故障判断流程(思维导图式)
- gluster peer status → 判断集群节点通信是否正常
- gluster volume status → 判断brick是否在线
- heal info → 判断是否存在待同步文件
- heal info split-brain → 判断脑裂
- 日志/网络/防火墙 → 定位通信问题