Ceph v18 故障排查命令大全:从诊断到修复

Ceph v18 (Reef) 是目前广泛使用的 LTS 版本。在生产环境中,快速定位和解决故障是运维人员的核心技能。本文整理了 Ceph v18 的完整故障排查命令手册,涵盖集群、OSD、MON、MGR、PG、网络等各类故障场景。


一、快速诊断命令

1.1 集群健康状态

# 查看集群整体状态(最常用)
ceph -s

# 查看详细健康信息
ceph health detail

# 查看健康警告原因
ceph health mute ls

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

# 输出示例:
#   cluster:
#     id:     a1b2c3d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx
#     health: HEALTH_WARN
#             1 osds down
#             10 pgs degraded
#   services:
#     mon: 3 daemons, quorum
#     mgr: ceph-node1.active
#     osd: 6 osds: 5 up, 6 in

1.2 服务状态检查

# 查看所有服务进程
ceph orch ps

# 查看主机状态
ceph orch host ls

# 查看服务日志
ceph orch logs mon.ceph-node1 --tail 50

# 查看特定服务
ceph orch ps --daemon_type osd
ceph orch ps --daemon_type mon

1.3 故障定位流程

  1. 运行 ceph -s 查看整体状态
  2. 根据 HEALTH 状态确定故障类型
  3. 使用 ceph health detail 获取详细信息
  4. 针对具体组件使用专用命令排查
  5. 查看相关日志定位根本原因

二、OSD 故障排查

2.1 OSD 状态检查

# 查看 OSD 树状结构
ceph osd tree

# 查看 OSD 详细状态
ceph osd stat

# 查看宕机的 OSD
ceph osd tree | grep down

# 查看 OSD 使用率
ceph osd df

# 查看 OSD 性能
ceph osd perf

# 查看 OSD 延迟
ceph osd dump | grep -i latency

2.2 OSD 宕机排查

步骤 1:确认 OSD 状态

# 查看具体 OSD 状态
ceph osd dump | grep -A 5 "osd.0 "

# 查看 OSD 是否 in/up
ceph osd dump | grep "osd.0" 

步骤 2:查看 OSD 日志

# 使用 cephadm 查看日志
ceph orch logs osd.0 --tail 100

# 查看系统日志
journalctl -u ceph-osd@0 -n 100 --no-pager

# 查看 OSD 数据目录日志
ls -la /var/lib/ceph/osd/ceph-0/

步骤 3:检查磁盘健康

# 查看磁盘 SMART 信息
smartctl -a /dev/sdb

# 查看磁盘错误
smartctl -l error /dev/sdb

# 查看磁盘健康状态
smartctl -H /dev/sdb

# 检查磁盘是否被占用
lsblk
lsof /dev/sdb

步骤 4:尝试恢复 OSD

# 重启 OSD
ceph orch restart osd.0

# 如果重启失败,标记为 out
ceph osd out osd.0

# 检查是否可以重新激活
ceph osd in osd.0

# 如果磁盘故障,需要更换
ceph osd destroy osd.0 --yes-i-really-mean-it

2.3 OSD 使用率过高

# 查看 OSD 使用率分布
ceph osd df

# 自动重新平衡
ceph osd reweight-by-utilization

# 手动调整权重
ceph osd crush reweight osd.0 0.8

# 查看 CRUSH 分布
ceph osd crush dump

2.4 OSD 启动失败

# 检查 OSD 目录权限
ls -la /var/lib/ceph/osd/ceph-0/

# 检查密钥文件
cat /var/lib/ceph/osd/ceph-0/keyring

# 手动测试 OSD 启动
ceph-osd -i 0 --check-all-data

# 查看 Docker 容器日志(cephadm)
docker ps | grep osd.0
docker logs  --tail 50

三、MON 故障排查

3.1 MON 状态检查

# 查看 MON 状态
ceph mon stat

# 查看 MON 详细信息
ceph mon dump

# 查看 MON 仲裁状态
ceph quorum_status

# 查看 MON 映射
ceph mon getmap -o /tmp/monmap

3.2 MON 宕机排查

步骤 1:确认 MON 状态

# 查看哪些 MON 在仲裁中
ceph quorum_status | jq .quorum_names

# 查看 MON 服务
ceph orch ps | grep mon

步骤 2:查看 MON 日志

# 查看 MON 日志
ceph orch logs mon.ceph-node1 --tail 100

# 查看系统日志
journalctl -u ceph-mon@ceph-node1 -n 100

步骤 3:恢复 MON

# 重启 MON
ceph orch restart mon.ceph-node1

# 如果无法恢复,移除并重新添加
ceph mon remove ceph-node1
ceph orch apply mon ceph-node1

# 从备份恢复 monmap
ceph-mon -i ceph-node1 --extract-monmap /backup/monmap
ceph-mon -i ceph-node1 --inject-monmap /backup/monmap

3.3 仲裁丢失

场景:多数 MON 宕机,无法形成仲裁

# 1. 在存活的 MON 上强制恢复
systemctl stop ceph-mon@*
ceph-mon -i ceph-node1 --force-sync-to ceph-node2

# 2. 重置 monmap
monmaptool --create --add ceph-node1 192.168.1.101:6789 /tmp/monmap
ceph-mon -i ceph-node1 --inject-monmap /tmp/monmap

# 3. 启动 MON
systemctl start ceph-mon@ceph-node1

四、PG 故障排查

4.1 PG 状态检查

# 查看 PG 整体状态
ceph pg stat

# 查看 PG 详情
ceph pg dump

# 查看异常 PG
ceph pg dump_stuck

# 查看特定 PG
ceph pg 1.2f query

# 按状态查看 PG
ceph pg ls-by-pool rbd_pool

4.2 PG 状态说明

状态 说明 处理建议
active+clean 正常 无需处理
degraded 副本数不足 检查 OSD 状态
incomplete 数据不完整 恢复 OSD
peering 正在协商 等待或检查网络
down PG 不可用 检查 OSD 和网络
stuck 卡住 手动修复

4.3 PG 卡住修复

# 1. 查看卡住的 PG
ceph pg dump_stuck

# 2. 查看 PG 详情
ceph pg 1.2f query

# 3. 尝试修复
ceph pg repair 1.2f

# 4. 强制创建干净 PG(谨慎使用)
ceph pg force_create_clean 1.2f

# 5. 查看修复进度
ceph -w

4.4 PG 分布不均

# 查看 PG 分布
ceph pg ls-by-osd osd.0

# 查看 PG 分布统计
ceph pg dump | grep -i "pgs_per_osd"

# 重新平衡 PG
ceph osd reweight-by-utilization

# 调整 PG 数量
ceph osd pool set rbd_pool pg_num 128
ceph osd pool set rbd_pool pgp_num 128

五、MGR 故障排查

5.1 MGR 状态检查

# 查看 MGR 状态
ceph mgr stat

# 查看 MGR 模块
ceph mgr module ls

# 查看启用的模块
ceph mgr module dump

# 查看 MGR 性能
ceph mgr dump

5.2 MGR 故障处理

# 重启 MGR
ceph orch restart mgr.ceph-node1

# 查看 MGR 日志
ceph orch logs mgr.ceph-node1 --tail 100

# 切换活跃 MGR
ceph mgr fail mgr.ceph-node1

# 重新部署 MGR
ceph orch apply mgr --placement="1 ceph-node2

5.3 Dashboard 故障

# 查看 Dashboard 状态
ceph dashboard config-dashboard

# 检查 Dashboard 服务
ceph orch ps | grep dashboard

# 重置 Dashboard 密码
ceph dashboard ac-user-set-password admin

# 重新配置 Dashboard 端口
ceph dashboard config-dashboard-port 8443

六、网络故障排查

6.1 网络连通性检查

# 测试节点间连通性
ping ceph-node1 ceph-node2 ceph-node3

# 测试端口连通性
nc -zv ceph-node1 6789  # MON
nc -zv ceph-node1 6800  # OSD
nc -zv ceph-node1 8443  # Dashboard

# 查看网络连接
netstat -tlnp | grep ceph
ss -tlnp | grep ceph

6.2 网络性能检查

# 测试网络带宽
iperf3 -c ceph-node1 -t 30

# 查看网络错误
ip -s link show eth0

# 查看网络丢包
cat /proc/net/dev

6.3 心跳超时

# 查看 OSD 心跳
ceph osd dump | grep -i heartbeat

# 调整心跳参数
ceph config set osd osd_heartbeat_grace 20
ceph config set osd osd_heartbeat_interval 5

# 查看网络延迟
ceph osd perf

七、存储池故障排查

7.1 存储池状态

# 查看存储池列表
ceph osd pool ls detail

# 查看存储池使用
ceph df

# 查看特定存储池
ceph df pool rbd_pool

# 查看存储池统计
ceph osd pool stats rbd_pool

7.2 存储池空间不足

# 查看使用率
ceph df

# 查看对象数量
rados -p rbd_pool ls

# 清理不需要的对象
rados -p rbd_pool rm 

# 扩容:添加 OSD
ceph orch apply osd --all-available-devices

八、日志分析

8.1 查看日志

# 查看集群日志
ceph log latest
ceph log last 100

# 查看审计日志
cat /var/log/ceph/ceph.audit.log

# 使用 journalctl 查看
journalctl -u ceph-* --since "1 hour ago"

# 实时查看日志
journalctl -u ceph-osd@0 -f

8.2 日志级别调整

# 调整日志级别
ceph config set global log_to_stderr true
ceph config set global err_to_stderr true
ceph config set global debug_ms 1

# 调试模式(谨慎使用)
ceph config set global debug_osd 20
ceph config set global debug_mon 20

九、常用修复命令

9.1 数据恢复

# 恢复 PG
ceph pg repair 1.2f

# 恢复 OSD 数据
ceph osd repair osd.0

# 强制恢复(危险)
ceph pg force_create_clean 1.2f

9.2 重新平衡

# 重新平衡 OSD 权重
ceph osd reweight-by-utilization

# 重新平衡 PG
ceph osd reweight-crush-compatibility

# 查看重平衡进度
ceph -w

9.3 紧急处理

# 暂停 PG 自动恢复(维护时)
ceph osd set norecover
ceph osd set nobackfill
ceph osd set norebalance

# 恢复自动恢复
ceph osd unset norecover
ceph osd unset nobackfill
ceph osd unset norebalance

# 查看标志
ceph osd dump | grep -i "flag" 

十、故障排查流程图

10.1 快速诊断流程

  1. ceph -s → 查看整体状态
  2. ceph health detail → 获取详细警告
  3. 根据组件选择专用命令
  4. ceph orch logs → 查看日志
  5. 执行修复命令
  6. ceph -w → 监控恢复进度

10.2 故障分级

级别 HEALTH 状态 响应时间 示例
紧急 HEALTH_ERR 立即 多 OSD 宕机、仲裁丢失
警告 HEALTH_WARN 1 小时内 单 OSD 宕机、PG degraded
注意 HEALTH_OK 计划内 容量预警、性能优化

总结

本文整理了 Ceph v18 的完整故障排查命令:

  • ✅ 快速诊断命令(ceph -s、health detail)
  • ✅ OSD 故障排查(状态、日志、磁盘)
  • ✅ MON 故障排查(仲裁、日志、恢复)
  • ✅ PG 故障排查(状态、修复、分布)
  • ✅ MGR 和 Dashboard 故障
  • ✅ 网络和存储池故障
  • ✅ 日志分析和修复命令

运维建议:

  1. 熟悉常用命令,快速定位问题
  2. 配置完善的监控告警
  3. 定期备份配置和 monmap
  4. 建立故障处理 SOP
  5. 在生产环境变更前充分测试

🔗 相关链接

建议收藏本文,故障排查时快速查阅!有问题欢迎留言讨论!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注