2. Ceph OSD 基础:定义、功能与生命周期
2.1 OSD 的定义与核心功能
OSD(Object Storage Daemon)是 Ceph 存储集群中最核心的守护进程,负责将数据以对象形式存储到物理磁盘上,并提供数据读写、复制、恢复和再平衡能力。每个 OSD 通常对应一块独立的物理磁盘或逻辑卷,是集群中唯一直接与存储介质交互的组件。
| 功能维度 | 具体职责 | 说明 |
|---|---|---|
| 数据存储 | 对象持久化 | 将 PG 内的对象以文件形式写入底层文件系统(BlueStore 或 Filestore) |
| 数据复制 | 副本维护 | 根据 CRUSH 规则将对象副本分发到其他 OSD,保证数据冗余 |
| 数据恢复 | 故障自愈 | 当 OSD 故障或新 OSD 加入时,自动执行 PG 内对象的回填与恢复 |
| 心跳监控 | 集群状态上报 | 定期向 Monitor 上报自身状态(up/down/in/out),参与集群选主 |
| 数据校验 | 完整性保障 | 通过 CRC 校验和 Scrubbing 机制检测并修复静默数据损坏 |
关键认知:OSD 是 Ceph 中唯一“触碰磁盘”的组件。RADOS 层的所有读写请求最终都由 OSD 完成。在 Rook 管理的 Kubernetes 集群中,每个 OSD 运行在一个独立的容器内,容器挂载宿主机磁盘或 PVC。
2.2 OSD 的生命周期
OSD 从创建到退役经历四个主要阶段:启动 → 运行 → 故障 → 替换。理解每个阶段的状态转换是自动化 OSD 替换的基础。
2.3 各阶段详细说明
2.3.1 启动阶段
- 触发条件:OSD 进程首次启动、重启或替换后重新加入集群。
- 关键动作:
- 读取 OSD 元数据(OSD ID、FSID、CRUSH 位置)。
- 挂载数据目录并初始化 BlueStore 实例。
- 向 Monitor 注册并获取集群 Map 最新版本。
- 等待 PG 分配并开始服务。
- 状态标识:
up: true, in: true表示 OSD 已启动并参与集群。
2.3.2 运行阶段
- 核心任务:处理来自客户端的读写请求、执行 PG 内对象复制、参与 Scrubbing。
- 健康指标:
- OSD 心跳间隔默认 6 秒,超时 30 秒判定为 down。
- OSD 负载通过
ceph osd perf查看延迟和 IOPS。
- 常见状态:
up: true, in: true且 PG 状态为active+clean。
2.3.3 故障阶段
- 故障类型:
故障类型 原因 影响 进程崩溃 OSD 守护进程异常退出 OSD 标记为 down,PG 进入 degraded 状态磁盘故障 磁盘 I/O 错误、坏道、SMART 告警 OSD 无法读写,需立即替换 网络分区 OSD 与 Monitor 心跳中断 OSD 被标记为 down,恢复后自动重连慢盘 磁盘延迟超过阈值(默认 30s) OSD 被标记为 down,触发自动恢复 - 自动恢复机制:当 OSD 故障后,Ceph 自动将其标记为
out,并将该 OSD 上的 PG 迁移到其他健康 OSD。
2.3.4 替换阶段
- 触发场景:磁盘物理损坏、性能劣化、容量不足、硬件生命周期结束。
- 替换流程:
- 将故障 OSD 标记为
out(ceph osd out osd.0)。 - 等待 PG 数据迁移完成(
ceph -w监控 backfill 进度)。 - 停止 OSD 进程并卸载磁盘。
- 更换物理磁盘或重新分配 PVC。
- 创建新 OSD 并加入 CRUSH Map。
- 新 OSD 自动接收 PG 并进入
active+clean状态。
- 将故障 OSD 标记为
- Rook 自动化:Rook 通过 OSD 准备 Job 自动检测新磁盘并创建 OSD,无需手动执行
ceph osd create。
⚠ 替换避坑:切勿在 PG 未完成 backfill 时强制移除 OSD,否则可能导致数据丢失。生产环境中建议设置
osd_max_backfills = 2 和 osd_recovery_max_active = 3 控制恢复速度,避免影响正常 I/O。
2.4 OSD 与 PG 的关系
PG(Placement Group)是 Ceph 中数据分布的核心逻辑单元,OSD 是 PG 的物理载体。理解二者关系是掌握数据迁移和 OSD 替换的前提。
2.5 关键映射规则
| 概念 | 映射方式 | 说明 |
|---|---|---|
| 对象 → PG | pg_id = hash(oid) % pg_num |
同一 PG 内的对象共享相同的副本策略和故障域 |
| PG → OSD 集合 | CRUSH 算法计算 | 根据集群拓扑(host/rack/row)选择 N 个 OSD 存储副本 |
| OSD 故障影响 | PG 自动迁移 | 故障 OSD 上的 PG 被标记为 degraded,Ceph 自动在其他 OSD 上重建副本 |
| OSD 替换影响 | PG 重新平衡 | 新 OSD 加入后,CRUSH 重新计算分布,部分 PG 迁移到新 OSD |
💡 运维要点:在 Rook 环境中,OSD 替换通常由
rook-ceph-osd-* 控制器自动完成。当检测到 OSD 对应的 PVC 被删除或磁盘故障时,Rook 会自动创建新的 OSD 并触发 PG 回填。建议在替换前使用 ceph osd safe-to-destroy osd.<id> 确认 PG 已完全迁移。
2.6 本章小结
- OSD 是 Ceph 的存储执行单元,负责数据持久化、复制、恢复和心跳上报。
- OSD 生命周期包括启动、运行、故障、替换四个阶段,每个阶段都有明确的状态标识和恢复策略。
- PG 是对象到 OSD 的中间映射层,OSD 替换本质上是 PG 内对象从故障 OSD 迁移到健康 OSD 的过程。
- 理解 OSD 与 PG 的映射关系是设计自动化替换门禁的基础,后续章节将基于此构建门禁检查点。