下面给你一个面向 RBD 块存储生产环境 、按"可用性 / 易维护性 / 监控与遥测 / 数据一致性 / 集群可靠性"归纳的 Ceph16(Pacific)→Ceph18(Reef)期间 最重要、且有明确官方依据的改进点(同时标注发生在哪个版本段:多数关键能力是在 Ceph17(Quincy)引入,你从 16 升到 18 会一并获得)。
1) 可用性(Availability)------直接影响业务不中断与恢复能力
1.1 rbd-nbd 支持"安全重挂载/重连"(降低升级与进程重启带来的中断风险)
-
变化 :新增
rbd device attach/rbd device detach,用于在rbd-nbd进程重启后安全地重新关联 NBD 设备(要求 Linux 内核 5.14+)。(Ceph Documentation) -
为什么重要(RBD 场景) :在使用 rbd-nbd 做块设备映射时,进程重启/异常是典型可用性风险源;这项改进降低了"进程重启导致设备瞬断"的概率(前提是满足内核条件)。(Ceph Documentation)
-
依据链接:
1.2 rbd-nbd 新增 notrim 映射选项(避免 TRIM 行为差异引发的不可预期)
-
变化 :
rbd-nbd增加notrim映射选项,用于模拟"厚置备/不下发 discard"的行为,使其与 krbd 在某些场景下更一致。(Ceph Documentation) -
为什么重要(RBD 场景) :减少不同客户端路径(krbd vs rbd-nbd)在 discard/trim 上的差异导致的空间回收/性能波动不确定性。(Ceph Documentation)
-
依据链接:
2) 易维护性(Maintainability)------减少历史包袱、降低运维复杂度
2.1 LevelDB 支持在 Ceph17 被移除(统一 RocksDB,降低维护与升级风险)
-
变化 :Quincy 明确移除 LevelDB 支持,并提示升级前应迁移 MON/OSD 到 RocksDB。(Ceph)
-
为什么重要 :减少后端 KVStore 组合与兼容路径,降低长期维护成本;同时这也是 16→18 升级的硬前置条件之一 (未迁移会直接踩坑)。(Ceph)
-
依据链接:
2.2 FileStore 在 Ceph18(Reef)"弃用且不再支持"(OSD 后端收敛为 BlueStore)
-
变化 :Reef 文档明确:FileStore 在 Reef 已弃用且不再支持,要求迁移到 BlueStore。(Ceph Documentation)
-
为什么重要 :消除"同一套运维/调优要兼容两种后端"的负担,测试矩阵与边缘问题显著减少。(Ceph Documentation)
-
依据链接:
2.3 cephadm:OSD 移除支持 --zap(把"移除+清盘"固化到同一运维路径)
-
变化 :Reef 的 cephadm 文档明确
ceph orch osd rm <id> ... --zap,一条命令完成"移除 OSD 并清理设备元数据(LVM/BlueStore 等)"。(Ceph Documentation) -
为什么重要 :降低"OSD 移除后磁盘残留导致二次部署失败"的概率,更适合自动化与批量操作。(Ceph Documentation)
-
依据链接:
3) 监控与遥测(Monitoring & Telemetry)------更快发现问题、更易定位
3.1 新增 43 个默认告警 + 支持 SNMP Trap 外发(监控"开箱即用"能力提升)
-
变化 :Quincy 发布说明明确:新增 43 个告警(总计 68) ;并支持通过 SNMP gateway 将告警外发为 SNMP traps(提供 MIB)。(Ceph)
-
为什么重要(生产) :减少自建 PromQL 告警体系的工作量;同时 SNMP 外发使 Ceph 更易纳入传统 NMS(企业常见)。(Ceph)
-
依据链接:
3.2 慢操作日志"聚合化/简化"(减少刷屏,提升排障效率)
-
变化 :Quincy 引入慢操作日志的简洁聚合输出;如需回到旧的详细行为,可通过
osd_aggregated_slow_ops_logging=false。(Ceph Documentation) -
为什么重要 :大规模或异常场景下避免日志风暴,提高"真正可用的信息密度",更利于一线定位。(Ceph Documentation)
-
依据链接:
4) 数据一致性(Data Consistency)------防止"悄悄错"、提升运维回退能力
4.1 修复 fast-diff/whole-object 路径下的 diff 计算问题(极端情况下可导致错误的 rbd export)
-
变化 :Quincy release notes 明确:修复 fast-diff + whole object(inexact)模式下的 diff 计算 bug;在少数情况下这些长期问题可能导致 不正确的
rbd export。(Ceph Documentation) -
为什么重要(RBD 场景) :备份/迁移链路中
rbd export的正确性属于高优先级一致性要求。(Ceph Documentation) -
依据链接:
4.2 ceph osd rm-pg-upmap-primary-all("一键回到 CRUSH 默认"的运维回退能力)
-
变化 :Reef 18.2.5 引入命令
ceph osd rm-pg-upmap-primary-all,可清理所有pg-upmap-primary映射。(Ceph Documentation) -
为什么重要 :当你在调优/干预主 OSD 分布后需要"撤销干预、回归 CRUSH 默认"时,这是非常明确的回退工具,降低长期残留配置造成的隐性风险。(Ceph Documentation)
-
依据链接:
- https://docs.ceph.com/en/latest/releases/reef/ (v18.2.5 Notable Changes)
5) 集群可靠性(Reliability)------减少不稳定特性与"无法启动"级故障风险
5.1 Cache Tiering 在 Reef 被弃用(官方明确不建议新部署,并建议迁移存量)
-
变化 :官方文档明确:Cache tiering 在 Reef 被 deprecated,并说明缺少维护者,社区强烈建议不要新部署并建议迁移存量。(Ceph Documentation)
-
为什么重要(RBD 块存储) :cache tiering 历史上运维复杂且稳定性收益不确定;弃用信号意味着应避免在生产继续押注该路径,改用更可控的硬件分层/CRUSH 规则等方案。(Ceph Documentation)
-
依据链接:
5.2 ceph-objectstore-tool trim-pg-log-dups 离线急救能力(解决"OSD 无法启动"的特定故障类)
-
变化 :Quincy 17.2.4 发布说明:PGLog dups 膨胀问题修复,并新增离线机制:
ceph-objectstore-tool增加trim-pg-log-dups,用于 OSD 因 inflated dups 无法启动 的场景。(Ceph) -
为什么重要 :这是典型"救命工具"级别能力,直接影响严重故障下的恢复可行性与恢复时间。(Ceph)
-
依据链接:
建议你在"Ceph16→Ceph18(RBD生产)改进清单"里优先写入的 8 个点
- rbd-nbd 安全重挂载(attach/detach)(Ceph Documentation)
- rbd-nbd
notrim选项(Ceph Documentation) - fast-diff 相关 diff/export 正确性修复(Ceph Documentation)
- LevelDB 移除、统一 RocksDB(升级前置)(Ceph)
- FileStore 在 Reef 不再支持(后端收敛)(Ceph Documentation)
- 43 个新增告警 + SNMP Trap 外发(Ceph)
- 慢操作日志聚合化(降低日志风暴)(Ceph Documentation)
- trim-pg-log-dups 离线修复(OSD 无法启动类故障)(Ceph)
如果你希望我进一步把这 8 点扩写成"可以直接进你文档的一章"(每点含:背景、变更、收益、风险边界、落地检查清单/命令示例),我可以按你之前的固定模板输出。
不是让你"在崩溃前手动输入 detach"。你这个疑问非常关键------安全重连这件事,解决的是"崩溃发生后"的失效形态。
1) rbd-nbd 崩溃时,/dev/nbdX 能不能"不掉盘"?
更准确的说法是:
- 不能保证"完全不受影响";
- 但在 Linux 内核 ≥ 5.14 且使用了对应机制时,内核可以在一段时间内保留 /dev/nbdX,并让 I/O 进入等待窗口 ,给你机会把新的 rbd-nbd 进程拉起来并"重新 attach 回来"。这就是所谓 "safe reattach after rbd-nbd daemon is restarted"。(Ceph)
这时业务侧看到的往往是:
- I/O 短暂卡住(stall),而不是立刻报 "设备没了/I/O error"。
是否能达到这个效果,关键取决于 NBD 的 reattach 等待机制,以及你设置的等待时间。
2) 你说的"我怎么在崩溃前输入 detach?"------不需要,也做不到
崩溃是不可预期事件,你当然不可能提前 detach。
这里的逻辑是:
- detach 是计划内操作:比如你要维护、升级、主动停止映射时才用。
- 崩溃属于计划外事件:你不执行 detach,内核会发现"用户态 rbd-nbd 进程没了",然后根据机制进入"等待新进程接管"的窗口。
Ceph 的 rbd-nbd manpage 直接给出了这个"等待窗口"参数:
--reattach-timeout seconds:指定内核等待新的 rbd-nbd 进程重新附着(attached)的超时时间,默认 30 秒 。(Ceph Documentation)
这句话本质上就在回答你的问题:不是让你提前 detach,而是让内核在旧进程消失后"等一等"新进程回来。 (Ceph Documentation)
3) 那 attach/detach 到底在里面扮演什么角色?
Quincy 引入的改进点是:新增 rbd device attach / rbd device detach,用于支持 rbd-nbd daemon 重启后的安全重连 (Linux 5.14+)。(Ceph)
你可以把它理解为两类场景:
场景 A:计划内维护(你知道要重启/升级 rbd-nbd)
- 你可以用 "detach → 做维护 → attach" 的方式,让映射生命周期更可控、可脚本化。
场景 B:计划外崩溃(你没法提前做任何事)
- 你做的动作是:尽快把 rbd-nbd 重新拉起,并执行 attach;
- 只要在
reattach-timeout之内完成,内核有机会把原来的/dev/nbdX继续接上,让影响从"掉盘"变成"短暂 I/O 挂起"。(Ceph Documentation)
4) 这个改进对什么场景"最有影响"?
只对你真的在生产用 rbd-nbd 映射出 /dev/nbdX 来跑业务的场景有意义,例如:
/dev/nbd0上有文件系统并挂载到/data- 数据库/应用直接在
/data上做读写
在这种场景里,过去 rbd-nbd 的痛点是:进程一挂,块设备立刻不可靠 。这次改进让你可以把故障形态尽量变成"短暂卡住,能重连回来"。(Ceph)
5) 需要你记住的两个现实边界
- 它不是"零影响" :I/O 很可能会在等待窗口内卡住;应用能否容忍取决于你的超时设置与业务特性。(Ceph Documentation)
- 窗口是有限的 :默认 30 秒(
--reattach-timeout),超时之后仍可能演变为 I/O error / 文件系统只读等更严重后果。(Ceph Documentation)
如果你告诉我两件事,我可以把"是否值得写成你现网的 Top 改进点"下结论,并给出更贴近生产的建议(但不需要你再补概念):
- 你现网 RBD 客户端到底是不是 rbd-nbd (是否存在
/dev/nbdX承载业务) - 你的内核版本是否 ≥ 5.14 (这是该改进成立的硬前提)(Ceph)
Cache tiering 在 Ceph 里指的是一种"两层存储池分层"机制:把一个业务池(base tier)和一个更快的缓存池(cache tier,通常是 SSD/NVMe)叠在一起,通过策略把"热数据"临时放到缓存池,从而加速访问。官方文档把它称为 Cache Tiering,并在 Reef 标记为弃用。
1) Cache tiering 的作用到底是什么?
它主要想解决的就是:同一份数据里有冷热分布,如果能把热数据放到更快介质,就能提升读写性能。
典型做法是:
- base pool:大容量、慢介质(HDD)
- cache pool:小容量、快介质(SSD/NVMe)
- 系统按策略把部分对象复制/迁移到 cache pool,让后续访问命中更快介质。
这是一种"在 Ceph 内部做缓存/分层"的尝试,属于系统层面的自动化。
2) 不做 cache tiering,性能会不会下降?
**不一定,甚至在很多生产场景里不会下降,可能更稳定。**原因分三类:
2.1 cache tiering 并不是"必然增益",而是"强依赖数据访问模式"
只有在满足以下条件时,它才可能带来明显收益:
- 热点明显、热数据能被 cache 容量装下
- 热点持续时间足够长(否则会频繁搬运)
- 策略参数调得合适
如果访问模式是随机、热点变化快、或者工作集远大于 cache 容量,就会出现频繁搬运(thrashing),导致后台迁移 I/O 抢资源,性能反而抖动甚至下降。
2.2 现代 Ceph 的主流性能来源已转向"硬件分层 + 明确策略"
对 RBD 块存储来说,你获得性能通常靠:
- 直接用更快介质的 pool(NVMe/SSD)承载高性能业务;
- 用 CRUSH 规则把不同 pool 映射到不同设备类/故障域;
- 对 HDD 场景,优化 BlueStore 的 DB/WAL 放置(在更快盘上)等。
这些方式的好处是:性能边界清晰、可预测、易排障,而不是把性能交给复杂的自动搬运策略。
2.3 官方弃用信号本身意味着:继续依赖它的长期收益不确定
官方明确写了:该功能在 Reef 弃用、缺少维护者、强烈建议不要新部署并建议迁移存量。
这通常意味着:即使它在少数场景能加速,但综合工程质量与可运维性,社区认为不值得继续作为主推路径。
3) 对"用户感觉的性能"更真实的结论(RBD 块存储)
-
如果你的 RBD 业务本来就在 SSD/NVMe pool 上:不做 cache tiering 基本不会影响性能,因为你已经在快介质上跑了。
-
如果你的 RBD 在 HDD pool 上且希望"用一点 SSD 给热数据加速":
cache tiering 理论上能做到,但在现实里经常带来复杂度与抖动。更主流、可控的做法是:
- 把真正需要性能的卷/租户放到 SSD/NVMe pool;
- 其余留在 HDD pool;
- 用业务级策略(QoS、分级存储策略、卷迁移)实现"谁用快盘"。
这类方式对用户体验通常是"更稳定"的性能,而不是偶尔很快、偶尔很慢。
4) 你可以怎么在文档里写"不会降低性能"的解释
建议用这种口径(更容易被评审接受):
- Cache tiering 的目标是用快速缓存池加速冷热混合工作负载;
- 但其收益强依赖访问模式与参数,且引入额外后台迁移 I/O,可能导致性能抖动;
- 因此社区在 Reef 将其弃用并不建议新部署,建议用更可控的硬件分层/CRUSH 规则/按业务拆分 pool 的方式获得稳定性能。
如果你告诉我你当前 RBD pool 主要落在 HDD 还是 SSD/NVMe,以及是否做了 DB/WAL 分离(BlueStore),我可以把"替代 cache tiering 的分层方案"用更贴近你现网的方式归纳成一段可直接写进升级文档的建议(仍然只引用官方口径,不给危险操作指令)。