首页/新闻资讯/正文详情

Ceph 存储集群 CRUSH 映射变更预演:crushdiff 工具使用指南

发布时间:2026/9/23 21:27:32 来源:云帆数科 栏目:资讯中心
Ceph 存储集群 CRUSH 映射变更预演:crushdiff 工具使用指南
存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载crushdiff 是 Ceph 提供的一站式 CRUSH 映射变更评估工具在真正向集群下发新版 CRUSH 映射之前它可以在本地预演一遍映射变更量化输出会有多少个 PG、多少对象、多少字节发生迁移。本文围绕其 man pagedoc/man/8/crushdiff.rst展开结合 src/tools/crushdiff 的 Python 实现与 qa/workunits/rados/test_crushdiff.sh 测试脚本讲清它的原理、选项、命令与完整实战流程帮助你安全、可控地规划一次 CRUSH 映射调整。一、crushdiff 是什么定位与工作原理crushdiff是一个用于评估 CRUSH 映射crushmap变更影响的工具。在 Ceph 集群中PGPlacement Group放置组到 OSD 的映射关系由 CRUSH 算法根据 crushmap 计算得出因此修改 crushmap例如调整 OSD 权重、调整机架/主机层次结构会直接导致大量 PG 及其中的对象重新分布到新的 OSD 上触发大规模数据迁移。crushdiff 的价值在于在导入新映射之前先告诉你这次变更会让多少 PG、多少对象、多少字节发生移动从而让管理员可以预估迁移开销、评估风险再决定是否执行。从实现上看它并非从零实现一套 CRUSH 模拟器而是围绕osdmaptool的封装wrapper它依赖osdmaptool的--test-map-pgs-dump选项分别用旧 crushmap和新 crushmap对同一份 osdmap 做 PG 映射测试得到变更前后的 PG → OSD 映射表再结合pg statsceph pg dump的统计数据用每个 PG 的对象数、字节数推算objects affected和bytes to move。这一设计在 src/tools/crushdiff 的模块头注释中写得很明确即a wrapper around osdmaptool, hardly relying on its --test-map-pgs-dump option to get the list of changed pgs. Additionally it uses pg stats to calculate the numbers of objects and bytes moved。默认情况下crushdiff 会直接连接集群使用集群当前的 osdmap 和 pg stats通过ceph osd getmap与ceph pg dump --format json获取因此运行它需要能够访问 Ceph 集群。如果希望基于历史数据或离线评估可以借助--osdmap与--pg-dump参数显式指定数据源详见下文离线评估一节。二、命令语法与安装crushdiff 的完整语法为crushdiff [ --osdmap osdmap ] [ --pg-dump pg-dump ] [ --compiled ] [ --verbose ] command crushmap其中command为compare、export、import三者之一详见第四节crushmap是映射文件路径。在打包层面crushdiff 作为 Ceph 公共工具随ceph-common一起安装其安装清单见 debian/ceph-common.install内容包括可执行文件/usr/bin/crushdiff以及手册页/usr/share/man/man8/crushdiff.8。三、选项详解crushdiff 提供四个选项对应源码 src/tools/crushdiff 中argparse的定义均带短选项形式-c、-m、-p、-v选项短选项说明--compiled-c输入/输出的 crushmap 是已编译的二进制格式。不指定时crushdiff 期望的 crushmap 是 txt反编译后的明文格式--pg-dump pg-dump-pceph pg dump的 JSON 输出文件。若不指定crushdiff 会自行执行ceph pg dump --format json获取数据--osdmap osdmap-m集群 osdmap 文件可通过ceph osd getmap命令获得。若不指定crushdiff 会自行执行ceph osd getmap -o ...获取数据--verbose-v输出诊断信息包括逐条列出受影响的 PG 及其新旧 OSD acting set需要说明的是--compiled对三个子命令compare/export/import均生效export配合--compiled时导出的 crushmap 是编译后的二进制文件源码中直接使用osdmaptool --export-crush的结果否则导出的是经过crushtool -d反编译的明文 txtcompare/import配合--compiled时输入的 crushmap 文件直接作为编译后映射使用否则会先经crushtool -c编译成二进制再参与计算或导入。四、三个子命令export / compare / importcrushdiff 的核心工作流由三个子命令构成一个导出—修改—预演—导入闭环分别对应源码中的do_export、do_compare、do_import三个函数。4.1 export导出当前 CRUSH 映射crushdiff export crushmap 文件从集群 osdmap 中导出当前生效的 crushmap写入指定文件。底层调用链为ceph osd getmap -o osdmap→osdmaptool osdmap --export-crush crushmap提取内嵌 CRUSH 映射→未指定--compiled时crushtool -d crushmap -o 输出文件反编译为可读的明文文本。导出的明文格式即 CRUSH map 的文本表示包含设备列表device、bucket 层次host/rack/root等、rule 规则rule replicated_ruleset等以及每个 OSD 的weight行可以直接用编辑器修改。4.2 compare预演映射变更crushdiff compare crushmap 文件将crushmap 文件中的新映射与集群 osdmap 中当前生效的映射做对比输出预期的迁移规模。这是整个工具最核心的命令。其内部执行流程对应源码do_compare为若输入为明文映射先用crushtool -c编译成二进制获取 osdmap未指定--osdmap时执行ceph osd getmap -o ...获取 pg dump未指定--pg-dump时执行ceph pg dump --format json ...用旧映射跑osdmaptool osdmap --test-map-pgs-dump得到当前各 PG 的 OSD 集合将新 crushmap 导入 osdmaposdmaptool osdmap --import-crush crushmap后再跑一次--test-map-pgs-dump得到假设应用新映射后的 PG → OSD 集合解析两次输出的 PG 映射表逐一比对并结合 pg stats 统计迁移规模。4.3 import正式导入新映射crushdiff import crushmap 文件将crushmap 文件中的映射正式写入集群 osdmap。底层调用链为明文输入先经crushtool -c编译随后执行ceph osd setcrushmap -i crushmap未指定--osdmap时或osdmaptool osdmap --import-crush crushmap指定--osdmap时。import 是真正改变集群状态的操作应在 compare 结果令人满意后再执行。五、典型工作流与输出解读以 man page 中的完整示例为例展示一次标准的先评估、后变更流程。第一步导出当前 crushmapcrushdiff export cm.txt第二步编辑映射$EDITOR cm.txt第三步预演变更效果crushdiff compare cm.txt预期输出形如79/416 (18.99%) pgs affected 281/1392 (20.19%) objects affected 80/1248 (6.41%) pg shards to move 281/4176 (6.73%) pg object shards to move 730.52Mi/10.55Gi (6.76%) bytes to move第四步结果满意后正式导入crushdiff import cm.txt5.1 五行输出分别意味着什么compare 输出的五行统计对应源码do_compare后半部分的统计逻辑含义如下输出行含义统计口径pgs affected受影响的 PG 数量及占比新旧映射下 PG → OSD 集合发生变化的 PG 数 / 全部 PG 数objects affected受影响的对象数量及占比受影响 PG 中的对象总数 / 全部 PG 对象总数取每个 PG 的stat_sum.num_objectspg shards to move需要移动的 PG 副本数shard及占比逐 PG 对比新旧 OSD 集合旧集合中不再出现的 OSD 视为一个需要搬移的 shardpg object shards to move需要移动的对象副本数及占比每个待移动 shard 计入该 PG 的完整对象数bytes to move需要迁移的字节量及占比每个待移动 shard 计入该 PG 的字节数num_bytes num_omap_bytes字节与 shard 统计会对纠删码池做特殊折算源码中复制池按k1, msize-1处理即每个对象有size份副本纠删码池按 profile 中的k、m取值每个对象有km个 shard、每个 shard 承载1/k的对象数据这样bytes to move统计的是真实需要搬移的数据量而不是物理总量。字节数的展示使用人类可读格式Ki/Mi/Gi/Ti对应源码中的get_human_readable()函数。5.2 verbose 模式查看逐 PG 明细配合--verbose运行 compare除汇总统计外还会逐行打印受影响的 PG 及其新旧 OSD acting set4.3 [0, 2, 1] - [1, 4, 2] 4.b [0, 1, 3] - [2, 1, 3] 4.c [4, 0, 1] - [4, 1, 2]每行的格式为PG 编号池号.对象号如 4.3→ 旧的 OSD acting set → 新的 OSD acting set。例如4.3 [0, 2, 1] - [1, 4, 2]表示 PG 4.3 原来的主副本位于 OSD 0其余副本在 OSD 2、1应用新映射后变为以 OSD 1 为主副本位于 OSD 4、2。--verbose同时还会把中间产物--test-map-pgs-dump的输出、底层执行的命令打印到标准错误便于排障对应源码中run_cmd(..., True)与cat到 stderr 的行为。此外如果某 PG 在新映射下的 OSD 数量小于池的副本数size源码会向 stderr 输出WARNING: pgid will be undersized (...)警告——这是映射变更导致 PG 降级的重要风险信号务必留意。对复制池而言若新旧 acting set 的元素集合相同仅顺序或主副本变化不会计入 affected源码中的sorted()比较逻辑。六、离线评估基于历史 osdmap 与 pg dumpcrushdiff 默认直连集群获取 osdmap 和 pg stats但在两种场景下你更希望使用--osdmap与--pg-dump指定离线数据集群不可用只想基于之前保存的数据做分析变更前后对照例如先保存当前数据模拟修改后再评估全程不触碰线上集群。离线用法的数据准备ceph osd getmap -o osdmap # 保存 osdmap ceph pg dump --format json pg-dump # 保存 pg 统计JSON 格式然后crushdiff export cm.txt --osdmap osdmap --verbose crushdiff compare cm.txt --osdmap osdmap --pg-dump pg-dump --verbose crushdiff import cm.txt --osdmap osdmap --verbose注意--pg-dump只对compare有意义compare 需要 pg stats 推算对象与字节迁移量而--osdmap对三个子命令均有效——export从指定 osdmap 导出映射import会把新映射导入到指定 osdmap 文件中而不是推送到集群。七、测试验证从零 diff 到非零 diff仓库自带的工作单元测试 qa/workunits/rados/test_crushdiff.sh 完整验证了上述工作流也为我们展示了正确用法与预期结果值得逐段研读基础三命令对未修改的映射依次执行crushdiff export、crushdiff compare、crushdiff import含--verbose编译格式用--compiled走一遍同样的流程验证二进制 crushmap 的读写离线模式先用ceph osd getmap -o ...与ceph pg dump --format json准备数据再以--osdmap/--pg-dump执行 export、compare、import零 diff 断言映射未修改时compare 的输出必须满足0/N (0.00%) pgs affected、0/N (0.00%) objects affected、0/N (0.00%) pg shards to move、0/N (0.00%) pg object shards to move、0.00/... (0.00%) bytes to move——这是对compare 不虚报变更的回归保障非零 diff 断言当集群 OSD 数大于 3 时脚本用awk/sed把cm.txt中item osd.0 weight ...一行的权重放大 3 倍再执行 compare断言五行统计全部变为非零[1-9][0-9]*/... (...%)验证权重调整确实会触发迁移预演。该测试通过 teuthology 套件 qa/suites/rados/singleton-nomsgr/all/crushdiff.yaml 接入 CI单节点上同时运行 mon、mgr 与 4 个 OSD任务为执行rados/test_crushdiff.sh覆盖了复制池与纠删码池OSD 数大于 3 时创建 erasure 池两种场景。八、相关工具与下一步crushdiff 处于 Ceph 存储运维工具链中一个非常实用的位置与之配合使用的工具包括ceph(8)集群管理主命令crushdiff 依赖其中的ceph osd getmap、ceph pg dump、ceph osd setcrushmap等子命令osdmaptool(8)crushdiff 的底层引擎其--test-map-pgs-dump、--export-crush、--import-crush是三个子命令的基石此外 osdmaptool 还提供--upmap等 PG 均衡能力与 crushdiff 的迁移评估视角互补crushtool(8)CRUSH 映射的编译-c、反编译-d工具负责 crushdiff 在明文与二进制格式之间的转换。典型建议工作流是先crushdiff export拿到当前映射 → 编辑调整权重、层次或 rule→crushdiff compare评估迁移规模必要时加--verbose查看逐 PG 明细与 undersized 告警→ 满意后crushdiff import正式生效。整个过程把盲目变更导致的不可控数据搬迁变成了可量化、可预演、可回退依据的受控操作是规划集群扩缩容、故障域调整、权重再平衡时的高性价比前置工具。赞分享存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载相关推荐Ceph 动态集群管理CRUSH 映射、PG 放置与自愈机制深度解析Ceph 动态集群管理CRUSH 映射、PG 放置与自愈机制深度解析 导读 本文基于 Ceph 官方架构文档 doc/architecture/dynamic存储分布式文件系统对象存储后端高可用Ceph 存储集群架构详解RADOS、CRUSH 与四类守护进程的工作机制Ceph 存储集群架构详解RADOS、CRUSH 与四类守护进程的工作机制 本篇技术指南围绕 Ceph 官方架构文档《The Ceph Storage Clu存储分布式文件系统对象存储后端高可用Ceph 架构深度解析RADOS 存储集群、CRUSH 数据分布与客户端服务体系Ceph 架构深度解析RADOS 存储集群、CRUSH 数据分布与客户端服务体系 Ceph 是一款将 对象存储、块存储与文件存储统一于同一系统 的分布式存储平存储分布式文件系统对象存储后端高可用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

MATLAB虚拟网络仿真代码从零搭建:离散事件内核、链路模型与参数标定避坑指南
MATLAB虚拟网络仿真代码从零搭建:离散事件内核、链路模型与参数标定避坑指南

简介:这份资源是一套基于MATLAB编写的虚拟网络仿真代码,面向网络工程、云计算与分布式系统方向的研究者、开发者及教学学习者,用于搭建可直接运行的虚拟网络映射仿真环境,帮助理解虚拟网络资源到物理网络基础设施的映射过程。压缩… · 2026/9/23 21:27:19

变电站智能化术语标准:Q/CSG 110017.12-2012关键定义与工程实践
变电站智能化术语标准:Q/CSG 110017.12-2012关键定义与工程实践

简介:《南方电网一体化电网运行智能系统技术规范 第1部分 第2篇:术语和定义》(Q/CSG 110017.12-2012)是南方电网发布的智能电网领域企业标准,面向电网规划、二次系统设计、标准编写及系统集成人员,重点解决… · 2026/9/23 21:27:13

Apache DolphinScheduler 飞书(Feishu)告警插件接入指南:Webhook 配置、代理参数与消息发送原理
Apache DolphinScheduler 飞书(Feishu)告警插件接入指南:Webhook 配置、代理参数与消息发送原理

任务调度大数据后端前端 【免费下载链接】dolphinscheduler Apache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code 项目地址: https://gitcode.com/gh_mirrors/do/dolphinscheduler 点击查… · 2026/9/23 21:27:00

比特币多因子LSTM交易策略工程实践
比特币多因子LSTM交易策略工程实践

简介:本资源是一份基于LSTM的比特币多因子量化交易策略完整实现,面向计算机、人工智能、金融工程等专业的学生与初学者,解决加密资产预测建模与策略回测落地难题,适用于课程设计、毕设开发及算法进阶学习。压缩包共12个文件&#… · 2026/9/23 22:02:44

Langflow低代码AI工作流:从部署到生产级实践指南
Langflow低代码AI工作流:从部署到生产级实践指南

1. 这不是“画流程图”,而是重构AI应用开发的底层工作流Langflow这个名字刚出现在我视野里时,我下意识把它归类为“又一个前端拖拽工具”——毕竟市面上叫XXFlow、XXStudio的可视化平台太多了,大多停留在把API调用包装成节点、连几条线就号称… · 2026/9/23 22:02:44

Tyk API Gateway 开源网关完全指南:从 Docker 快速部署到源码编译与核心能力解析
Tyk API Gateway 开源网关完全指南:从 Docker 快速部署到源码编译与核心能力解析

API网关后端云原生 【免费下载链接】tyk Open Source API and AI Gateway supporting REST, GraphQL, TCP, gRPC and MCP (Model Context Protocol) 项目地址: https://gitcode.com/gh_mirrors/ty/tyk 点击查看 免费下载 Tyk Gateway 是 Tyk 项目(tyk 仓… · 2026/9/23 22:02:44

Python医疗知识图谱问答系统:毕业设计源码与实现
Python医疗知识图谱问答系统:毕业设计源码与实现

简介:这是一套面向计算机相关专业学生与Python开发者的医疗知识图谱问答系统完整源码,可直接用于毕业设计、期末大作业或课程设计场景。项目以知识图谱构建与自然语言问答为核心,涵盖意图识别、命名实体识别、知识抽取与图谱搭建等模块&#… · 2026/9/23 22:02:44

PHPStan 错误标识 paramOut.unusedType 全解析:@param-out 联合类型成员从未赋值怎么办
PHPStan 错误标识 paramOut.unusedType 全解析:@param-out 联合类型成员从未赋值怎么办

开发工具代码质量静态分析 【免费下载链接】phpstan PHP Static Analysis Tool - discover bugs in your code without running it! 项目地址: https://gitcode.com/gh_mirrors/ph/phpstan 点击查看 免费下载 paramOut.unusedType 是 PHPStan 在检查 param-out 注解… · 2026/9/23 22:02:37

MIDI转简谱全攻略:调性判断、时值量化与MuseScore/Python实操
MIDI转简谱全攻略:调性判断、时值量化与MuseScore/Python实操

作为一个常年跟乐谱打交道的人,MIDI转简谱这件事我做过太多次了。搜“MIDI转简谱”能找到的答案,大多是把MIDI文件拖进某个打谱软件再手动收拾,真正能把流程讲透、把原理说清,顺带把五线谱和简谱之间那层窗户纸捅破的文章&#xf… · 2026/9/23 22:02:37

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码