Ceph怎么排查PG处于degraded降级或undersized未完全复制状态

胖涛酱_5003

胖涛酱_5003

2026-10-18

473人浏览

原创

pg出现degraded或undersized本质是副本数未达标:非数据丢失,而是ceph暂无法按配置将对象复制到足够osd;需依次检查osd状态、pool size/min_size配置及crush映射是否匹配。

ceph怎么排查pg处于degraded降级或undersized未完全复制状态

PG 出现 degraded 或 undersized,本质是副本数没达标——不是数据丢了,而是 Ceph 暂时无法按配置要求把对象复制到足够多的 OSD 上。直接查 ceph health detail 和 ceph pg dump 就能定位根因,不用猜。

先确认 OSD 是否全量 in 且 up

这两个状态是 PG 达到 active+clean 的前提。哪怕只有一台 OSD 是 out 或 down,PG 就可能卡在 undersized+degraded。

  • 运行 ceph osd tree,检查所有 OSD 的状态列是否都是 up 和 in;down 表示进程挂了或网络不通,out 表示被手动踢出服务范围
  • 若存在 out OSD,用 ceph osd in <osd.id></osd.id> 拉回;若为 down,先查对应 OSD 日志(/var/log/ceph/ceph-osd.<id>.log</id>),常见原因是磁盘满、权限错、或 systemd 启动失败
  • 单节点实验环境必须确认 osd_crush_chooseleaf_type = 0 已写入配置并生效,否则 CRUSH 规则会拒绝把多个副本放在同一 host,导致永远 undersized

检查 pool 的 size / min_size 是否合理

这是最常被忽略的配置项。如果 size=3 但集群只有 2 个 OSD,PG 必然长期 undersized;如果 min_size=1,即使只有一个副本在线,PG 也会标记为 active,但数据已无冗余。

文心快码
文心快码

文心快码 是一款百度基于文心大模型打造的 AI 编程辅助工具。

下载
  • 用 ceph osd pool get <poolname> size</poolname> 和 min_size 查当前值
  • 对比 ceph osd stat 输出的 OSD 总数:若 size > OSD 数量,必须调小 size 或加 OSD,否则 PG 永远无法 clean
  • 修改已有 pool 需显式执行:ceph osd pool set <poolname> size <n></n></poolname>(注意:不重启 OSD 即生效,但只影响后续写入)
  • min_size 决定写入容忍下限,设为 1 虽可绕过 degraded,但等于放弃数据保护,生产环境禁用

用 pg dump 定位具体卡在哪一步

ceph pg dump 输出里,state 列显示完整状态组合(如 active+undersized+degraded),而 up 和 acting 两列才是关键线索。

  • up 列是当前 CRUSH 计算出的“应有”OSD 列表;acting 是实际参与服务的 OSD 列表。两者不一致,说明部分 OSD 不可用或未完成 peering
  • 例如某 PG 的 up = [0,1,2] 但 acting = [0,1],即第 2 个 OSD 缺失——查 ceph osd status 看 OSD.2 是否 down/out
  • 若 acting 为空或含 -1,说明 peering 失败,需进一步看 ceph -w 实时日志中是否有 peering failed 或 unfound 关键字
  • 对 stuck 的 PG(如 pg4.7 is stuck undersized for 782s),优先用 ceph pg repair <pgid></pgid> 触发一致性检查,它比等自动恢复更可靠

别跳过 CRUSH map 和 pool 类型验证

纠删码(EC)池和复制池对 undersized 的解释完全不同:EC 池的 undersized 往往意味着 CRUSH 映射无法满足 k+m 要求,而非 OSD 数量不足。

  • 运行 ceph osd pool get <poolname> type</poolname>,确认是 replicated 还是 erasure
  • 若是 EC 池,用 ceph osd pool get <poolname> crush_rule</poolname> 查规则名,再用 ceph osd crush rule dump <rule_name></rule_name> 看其 steps 是否与当前 OSD 树结构冲突(比如要求跨 rack,但所有 OSD 都在 default bucket 下)
  • CRUSH map 错误通常表现为大量 PG 同时 stuck,而非零星几个;用 ceph osd crush dump | grep -A5 'rules' 快速扫一眼规则定义是否合理
  • 修改 CRUSH map 后必须执行 ceph osd setcrushmap -i <file></file> 才生效,且需等待 PG 自动 remap,期间会短暂出现 remapped 状态

真正卡住的 degraded 或 undersized,90% 都落在 OSD 状态、pool size 配置、CRUSH 映射这三层。别一上来就跑 ceph pg repair,先确保 ceph osd tree 里没有灰色节点,再核对 size 和实际 OSD 数——很多“故障”只是配置和现实不匹配而已。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

2026.10.16

20

10

OpenJDK怎么配置Java开发环境
OpenJDK怎么配置Java开发环境

怎样用OpenJDK搭建开发环境?本专题介绍版本选择、下载安装、环境变量配置和编译运行验证,帮助你理清JDK的作用及基本配置流程,并通过简单程序检查环境是否可用,为后续项目开发做好准备。

2026.10.16

20

10

OpenJDK怎么部署Java应用
OpenJDK怎么部署Java应用

Java项目开发完成后,怎样部署到目标环境并正常运行?本专题介绍OpenJDK应用部署流程,涵盖运行环境准备、版本兼容检查、应用打包、启动参数配置和日志查看,帮助你理清部署前后的操作顺序,减少环境差异造成的运行问题。

2026.10.16

0

10

Revel框架模板渲染与表单验证
Revel框架模板渲染与表单验证

本专题围绕Revel框架视图层开发,介绍模板语法、变量输出、布局复用、表单提交、参数绑定与验证规则,帮助开发者完成安全规范的页面交互。

2026.10.16

0

15

Revel框架MVC路由与控制器
Revel框架MVC路由与控制器

本专题聚焦Revel框架MVC核心机制,讲解路由定义、控制器Action、参数绑定、请求响应和反向路由,并结合常见场景梳理接口请求处理流程。

2026.10.16

0

15

Revel框架入门与安装配置
Revel框架入门与安装配置

本专题从Revel框架环境搭建讲起,系统介绍命令行工具安装、项目创建、目录结构、配置文件及热代码重载,帮助开发者快速完成首个Go Web应用。

2026.10.16

20

15

Linux 新手先学哪些命令
Linux 新手先学哪些命令

Linux新手命令专题汇集终端基础、文件目录操作、文本查看、软件安装和权限管理等入门文章,帮助按实际任务练习常用命令并建立命令行操作习惯。

2026.10.15

20

20

MySQL 忘记密码怎么办
MySQL 忘记密码怎么办

MySQL忘记密码专题汇集不同版本与系统下的root密码重置方法,覆盖MySQL 5.7、8.0、Mac、Linux及本地集成环境,并提示恢复权限与重新登录的检查步骤。

2026.10.15

20

18

Vue.js 中 ref 和 reactive 的区别
Vue.js 中 ref 和 reactive 的区别

Vue.js中ref和reactive的区别专题汇集两种响应式API的定义、访问方式、对象解构、侦听与性能取舍等文章,帮助结合实际状态类型选择合适写法。

2026.10.15

20

20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.7万人学习