CEPH集群的健康指标
CEPH集群的健康状态分为 HEALTH_OK(正常)、HEALTH_WARN(警告)和 HEALTH_ERR(严重错误)三类。当集群出现以下情况时,会触发 HEALTH_ERR 状态:
一、集群整体健康状态直接报错
集群整体状态异常
当 ceph -s 命令输出为 HEALTH_ERR 时,表明集群存在严重问题,需立即处理。例如:
慢请求过多或持续时间过长:若集群中慢请求(如 REQUEST_SLOW)超过 100 个,或单个慢请求持续时间超过 60 秒,会直接触发 HEALTH_ERR。
历史慢请求记录异常:通过分析 MON 节点日志(ceph.log),若历史慢请求满足上述条件,也会触发告警。
MON节点时间不同步
MON节点之间的时钟偏移超过默认阈值(0.05 秒),且未配置 NTP 同步,会导致 HEALTH_ERR。
二、PG(归置组)状态异常
PG不一致(Inconsistent)
PG副本间数据不一致(如对象大小不匹配或恢复失败),需手动修复(例如 ceph pg repair <pg_id>)。
PG长时间未scrub
若未开启 mon Warn Not De 配置,长期未执行scrub的 PG 可能导致数据不一致,触发 HEALTH_ERR。
PG恢复失败或数据丢失
对象丢失(UNFOUND):如 67/12247509 objects unfound 表示部分数据无法找到,需检查硬盘或网络。
恢复过程中错误:如 14 pgs recovery_unfound 或 39 pgs inconsistent,需排查数据迁移或硬件问题。
三、OSD(对象存储守护进程)故障
OSD Down
心跳超时:OSD 未在 mon_osd_report_timeout(默认 900 秒)内向 MON 发送心跳,或对等 OSD 报告其失效。
进程崩溃或启动失败:如密钥(keyring)丢失、文件系统损坏(如 XFS 报错 error -5)或磁盘坏道。
OSD内部错误
自杀超时:OSD 内部操作线程因 I/O 卡死超过 osd_op_thread_suicide_timeout(默认 150 秒),进程主动退出。
慢请求堆积:单个 OSD 慢请求超过 10 个或持续时间超过 60 秒,导致数据阻塞。
四、其他关键组件异常
MON 节点故障
MON 失去法定数量:若 MON 节点数不足法定数量(如 3 节点中 2 个宕机),集群进入 HEALTH_ERR。
MON 数据库损坏:如 leveldb/RocksDB 未正确压缩,导致元数据存储异常。
网络问题
网络抖动或丢包:如 ethtool -S 显示大量 rx_crc_errors 或 tx_aborted_errors,可能导致数据传输失败。
端口连接问题:MON 或 OSD 间通信端口(如 6789)被防火墙拦截。
五、数据冗余与容量问题
副本数不足(Degraded)
若 PG 的副本数低于配置值(如三副本降为 1 副本),且无法恢复,会触发 HEALTH_ERR。
OSD 容量超限
OSD 近满(NearFull)或满(Full):当 mon_osd_full_ratio(默认 95%)或 mon_osd_nearfull_ratio(默认 85%)被突破时,集群停止写入并报错。
处理建议
快速定位:通过 ceph health detail 或 ceph -s -f json 获取具体告警原因。
修复 PG:使用 ceph pg repair 或 ceph pg deep-scrub 修复不一致。
检查硬件:排查磁盘坏道(如 megacli 工具)或网络连通性。
调整配置:优化慢请求阈值或扩容集群以缓解容量压力。