Ceph 集群故障排除完全指南(2026 最新版)

前言

Ceph 作为开源分布式存储的事实标准,在生产环境中扮演着越来越重要的角色。本文整理了 Ceph 集群最常见的故障场景和排错方法,适用于 Ceph Reef (18.x) 和 Squid (19.x) 版本。

一、集群健康检查

1.1 基础健康检查命令

# 查看集群整体健康状态
ceph health

# 查看详细警告和错误
ceph health detail

# 查看集群状态摘要
ceph -s

# 实时监视集群状态
ceph -w

1.2 常见健康状态

  • HEALTH_OK - 集群正常
  • HEALTH_WARN - 有警告但不影响服务
  • HEALTH_ERR - 有错误,需要立即处理

二、OSD 故障排除

2.1 OSD Down/Out

# 查看 OSD 树状图
ceph osd tree

# 查看特定 OSD 状态
ceph osd dump | grep osd.X

# 查看 OSD 日志
ceph daemon osd.X log dump

解决方案:

# 如果 OSD 是 down 状态,尝试重启
systemctl restart ceph-osd@X

# 如果是 cephadm 管理
ceph orch restart osd.X

# 标记 OSD in
ceph osd in X

# 如果磁盘故障,需要替换
ceph osd out X
ceph osd down X

2.2 OSD 已删除但 cephadm 仍报告失败

# 强制删除 daemon 记录
ceph orch daemon rm osd.X --force

# 刷新主机信息
ceph orch host refresh <hostname>

三、Monitor 故障排除

3.1 Monitor 无法启动

# 查看 monitor 状态
ceph mon dump

# 查看 quorum 状态
ceph quorum_status

# 检查 monitor 日志
journalctl -u ceph-mon@<hostname>

解决方案:

# 重启 monitor
systemctl restart ceph-mon@<hostname>

# 如果是 cephadm 管理
ceph orch restart mon.<hostname>

# 如果 quorum 丢失,可能需要重新加入
ceph-mon -i <hostname> --mkfs --monmap <path>

3.2 Monitor 时钟不同步

# 检查时间同步
timedatectl status

# 启用 NTP
systemctl enable --now chronyd

# 强制同步
chronyc -a makestep

四、Placement Group (PG) 故障

4.1 PG 状态异常

# 查看 PG 状态
ceph pg stat

# 查看异常 PG 列表
ceph pg dump_stuck stale
ceph pg dump_stuck inactive
ceph pg dump_stuck unclean

# 查看特定 PG 详情
ceph pg <pg_id> query

4.2 常见 PG 状态及处理

stale - PG 状态未知

# 通常等待 OSD 恢复后自动修复
# 如果长时间不恢复,尝试
ceph pg repair <pg_id>

inactive - PG 无法服务 IO

# 检查是否有足够的 OSD up
ceph osd tree

# 尝试修复
ceph pg repair <pg_id>

unclean - 数据未完全恢复

# 等待恢复完成
ceph -w

# 查看恢复进度
ceph pg dump | grep recovering

degraded - 数据有副本丢失

# 检查 OSD 状态
ceph osd tree

# 恢复丢失的 OSD 或等待 rebalance

五、网络故障排除

5.1 OSD 网络分区

# 检查网络连接
ping <peer_host>

# 检查防火墙
iptables -L -n
firewall-cmd --list-all

# 检查 Ceph 端口(默认 6789, 6800-7300)
netstat -tlnp | grep ceph
ss -tlnp | grep ceph

5.2 心跳超时

# 调整 OSD 心跳参数(临时)
ceph config set osd osd_heartbeat_grace 30
ceph config set osd osd_heartbeat_interval 10

# 检查网络延迟
ping -c 10 <peer_host>

六、cephadm 故障排除

6.1 Daemon 启动失败

# 查看 daemon 状态
ceph orch ps

# 查看 daemon 日志
ceph orch daemon ls <hostname>

# 重新部署 daemon
ceph orch daemon redeploy <daemon_name>

6.2 主机管理问题

# 查看主机列表
ceph orch host ls

# 刷新主机信息
ceph orch host refresh <hostname>

# 查看主机标签
ceph orch host ls --export

七、性能问题排查

7.1 慢请求

# 查看慢请求
ceph health detail

# 调整慢请求阈值
ceph config set mon mon_slow_request_warn 15
ceph config set osd osd_op_complaint_time 30

# 查看 OSD 性能
ceph osd perf

7.2 磁盘性能问题

# 检查磁盘 IO
iostat -x 1

# 检查磁盘健康
smartctl -a /dev/sdX

# 检查磁盘使用率
df -h
ceph df

八、数据恢复

8.1 恢复删除的 Pool

# 如果 pool 被标记为删除但未完全清除
ceph osd pool create <pool_name> <pg_num> <pgp_num>

# 注意:已删除的数据无法恢复,除非有快照

8.2 从快照恢复

# 列出快照
ceph osd pool ls detail

# 回滚到快照
rbd snap rollback <pool>/<image>@<snap>

九、常用诊断命令汇总

# 集群状态
ceph -s
ceph health detail

# OSD 相关
ceph osd tree
ceph osd stat
ceph osd dump

# PG 相关
ceph pg stat
ceph pg dump

# Monitor 相关
ceph mon dump
ceph quorum_status

# 数据分布
ceph df
ceph pg map <pg_id>

# 实时监视
ceph -w
ceph -W

十、预防性维护建议

  1. 定期健康检查 - 每天运行 ceph health
  2. 监控告警 - 配置 Prometheus + Grafana 监控
  3. 日志收集 - 集中收集 Ceph 日志便于排查
  4. 定期备份 - 备份 monmap、crushmap、配置文件
  5. 硬件巡检 - 定期检查磁盘 SMART 信息
  6. 版本更新 - 保持 Ceph 版本更新,修复已知 bug

总结

Ceph 故障排除的关键是:

  1. 先查看 ceph health detail 了解问题
  2. 根据错误信息定位具体组件(OSD/MON/PG)
  3. 查看相关日志获取详细信息
  4. 按照标准流程逐步排查

记住:大多数 Ceph 问题都是自愈的,给集群一些时间恢复。只有在确定问题不会自动修复时,才需要手动干预。

发表回复

后才能评论