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
十、预防性维护建议
- 定期健康检查 - 每天运行
ceph health - 监控告警 - 配置 Prometheus + Grafana 监控
- 日志收集 - 集中收集 Ceph 日志便于排查
- 定期备份 - 备份 monmap、crushmap、配置文件
- 硬件巡检 - 定期检查磁盘 SMART 信息
- 版本更新 - 保持 Ceph 版本更新,修复已知 bug
总结
Ceph 故障排除的关键是:
- 先查看
ceph health detail了解问题 - 根据错误信息定位具体组件(OSD/MON/PG)
- 查看相关日志获取详细信息
- 按照标准流程逐步排查
记住:大多数 Ceph 问题都是自愈的,给集群一些时间恢复。只有在确定问题不会自动修复时,才需要手动干预。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。





