站内 Ceph 与 CRUSH 已讲清去中心化放置与 RADOS 工程概览;存储工程 覆盖 EC、对象网关与云块选型;SPDK 用户态存储栈 闭合本机用户态 NVMe 路径。中间仍缺一层:一次写如何经 Messenger → PG → BlueStore,peering/recovery 各自保证什么,RBD / CephFS / RGW 如何把语义切成对象,以及相对 MinIO / 云块 / SPDK 何时不该上 Ceph。
本系列回答:RADOS 内核里延迟与失败落在哪一层,何时分布式对象栈的税不值得付。
写:
- MON/MGR map 传播、OSD Messenger、CRUSH→PG→PrimaryLogPG。
- BlueStore 架构与读写路径、recovery/backfill/scrub、ECBackend。
- RBD / CephFS / RGW 接入边界、排障与选型。
不写:cephadm 安装全书、Rook/CSI 编排全书、未实测延迟排行、完整 POSIX/S3 教程、Crimson 全量重写。对照概览见 distributed/38;本机用户态块见 SPDK。
系列状态:01–18 已全部发布(2026-08-14)。 规划见 PLAN.md。无真实多节点 / vstart 集群则不粘贴伪造
ceph -s或 fio 输出。
版本锚定:Ceph Squid v19.2.5(
docs.ceph.com/en/squid/;源码 tag v19.2.5)。Tentacle(20.x)特性须显式标注。
适合谁看
- 分布式存储 / 超融合 / 私有云存储数据面工程师,要把「集群能起」推进到「能归因」。
- 读过 distributed/38,需要内核路径与失败模式的读者。
- 在自建 Ceph、MinIO、云块、本机 SPDK 之间做路径选型的架构师。
与 distributed/38 的分工
| 维度 | distributed/38 | 本系列 |
|---|---|---|
| 定位 | CRUSH/RADOS 工程概览与运维经验 | 18 篇内核机制 |
| 深度 | 算法直觉、架构图、调参要点 | 官方开发者文档路径、源码目录、失败模式、开放问题 |
| 对照 | 略述 BlueStore / 三接口 | 显式外链 38 / storage / SPDK / RocksDB;不重写科普全书 |
读法:只要「Ceph 为什么没有 NameNode、CRUSH 大概怎么放」→ 38 足够;要「写卡在 PG 还是 BlueStore、恢复为何拖死前台」→ 本系列 01 → 05 → 06 → 08 → 10 → 16。
一、这个领域最值得关注的 5 个问题
- 一次客户端写的延迟与失败点落在哪一层? → 第 1–9、16 篇。
- PG peering 与 recovery/backfill 各自保证什么、如何限速? → 第 5、10–11 篇。
- BlueStore 相对 FileStore 消除了什么;小写如何落到 WAL? → 第 7–9 篇。
- RBD / CephFS / RGW 如何切成 RADOS 对象,各自多付什么税? → 第 12–14 篇。
- 何时选 Ceph 而非 MinIO / 云块 / 本机 SPDK? → 第 17–18 篇。
二、篇目依赖关系与推荐阅读路径
flowchart TD
overview["01 Overview"] --> maps["02 MON MGR Maps"]
maps --> osd["03 OSD Messenger"]
osd --> crush["04 CRUSH Deep"]
crush --> pg["05 PG Peering"]
pg --> client["06 Client Op Path"]
client --> bsArch["07 BlueStore Arch"]
bsArch --> bsWrite["08 BlueStore Write"]
bsWrite --> bsRead["09 BlueStore Read"]
pg --> recover["10 Recovery Backfill Scrub"]
recover --> ec["11 EC Path"]
client --> rbd["12 RBD"]
client --> cephfs["13 CephFS MDS"]
client --> rgw["14 RGW"]
bsRead --> obs["15 Observability"]
recover --> obs
obs --> trouble["16 Troubleshoot"]
trouble --> vs["17 vs Alternatives"]
vs --> select["18 Selection"]
overview --> select
| 路径 | 篇目 | 适合 |
|---|---|---|
| 必读核心 | 1 → 2 → 5 → 6 → 8 → 10 → 16 | 快速建立坐标系 |
| 本地落盘 | 7 → 8 → 9 | BlueStore |
| 接入层 | 12 → 13 → 14 | RBD / CephFS / RGW |
| 对照选型 | 1 → 17 → 18 | 路径选型 |
| 完整通读 | 1 → … → 18 | 系统掌握 |
三、目录与每篇价值点
第一部分:集群与请求路径(01–06)
- RADOS
全景
- 相对 38 / storage / SPDK 的缺口;坐标系与 18 篇路线。
- MON / MGR 与
Map
- quorum、OSDMap/PGMap、epoch 传播。
- OSD 与
Messenger
- daemon 角色、msgr2、Op 进入 OSD。
- CRUSH
加深
- rule / bucket / weight;相对 38 的机制钉。
- PG
与 Peering
- PrimaryLogPG、PG
log、
last_epoch_started。
- PrimaryLogPG、PG
log、
- 客户端写路径
- librados → Primary → 副本;stale read 边界。
第二部分:BlueStore 与恢复(07–11)
- BlueStore
架构
- BlockDevice / BlueFS / RocksDB / Allocator。
- BlueStore
写路径
min_alloc_size、deferred/WAL、checksum、压缩。
- BlueStore
读路径
- onode、blob、checksum 失败模式。
- Recovery
/ Backfill / Scrub
- reservation、async recovery、mClock 边界。
- EC
路径
- ECBackend、整条带 vs RMW;外链 storage/49。
第三部分:接入层、观测与收束(12–18)
- RBD
- image→对象、krbd vs librbd、快照/克隆边界。
- CephFS /
MDS
- 可恢复 MDS(journal 在 RADOS)、caps、subtree thrashing、POSIX 代价。
- RGW
- 索引/数据池、S3→RADOS 映射边界。
- 可观测
ceph status/pg dump/ OSD perf 口径。
- 排障坐标系
- slow ops、peering、满盘、恢复拖死、checksum。
- 对照替代路径
- MinIO / 云块 / 本机 NVMe+SPDK。
- 选型收束与开放问题
- 排除树;Crimson、Tentacle、Rook/CSI 续作。
四、延伸阅读
- Ceph 与 CRUSH(distributed/38)
- 纠删码(storage/49)
- MinIO(storage/48)
- 云块存储(storage/70)
- SPDK / 用户态存储栈
- RocksDB 内核
- 全部系列索引
读完这篇,下一步读什么
优先读同系列或同问题的下一篇,把单篇消费变成主题集群。
【Ceph RADOS】RADOS 内核全景:五轴坐标系与 18 篇路线
补齐站内 distributed/38 之上的 RADOS 内核层缺口;定义 Map 传播、通信、一致性、本地存储、接入代价五条坐标系,给出 18 篇阅读路线与系列边界。
【Ceph RADOS】PG 与 Peering:PrimaryLogPG、PG log 与状态机
拆解 PG 命名与生命周期、PrimaryLogPG 的日志式复制设计、pg_log_entry_t 格式、last_epoch_started 与 last_epoch_clean 的语义差异,以及 peering 状态机从 Reset 到 Active 的完整路径。
【Ceph RADOS】RBD:image 到对象的映射、krbd 与 librbd、快照与克隆边界
拆解 RBD image 在 RADOS 上的对象命名、striping 规则、krbd 与 librbd 的驱动差异、以及快照 COW 与克隆父子依赖的边界——不写安装手册,只写机制与失败模式。
【Ceph RADOS】RGW:索引池与数据池、S3 到 RADOS 的映射边界
拆解 RADOS Gateway 把 S3/Swift 操作转化为 RADOS op 的完整路径:bucket index 分片、对象 head/tail 布局、multipart 组装、版本链与多站点同步——不写 S3 API 教程,只写 RADOS 层实现与失败模式。