在 Ceph 集群中,"数据恢复"(Data Recovery)是指 当部分存储设备(如 OSD)发生故障或数据损坏时,集群通过冗余副本或纠删码机制自动修复和重建丢失数据的过程。以下是详细的解释:
一、数据恢复的典型场景
| 场景 |
触发原因 |
恢复机制 |
| OSD 宕机 |
物理磁盘损坏、服务器断电、网络中断等 |
其他 OSD 上的副本数据自动重建到新 OSD |
| 数据静默损坏 |
磁盘位翻转、软件 Bug 导致数据不一致 |
通过副本校验或 Scrubbing 检测并修复损坏数据 |
| 扩容/缩容 OSD |
集群扩容添加新 OSD,或缩容移除旧 OSD |
数据重新平衡(Rebalance)到新 OSD |
二、数据恢复的核心流程
以 OSD 宕机为例:
- 检测故障
- Ceph Monitor 检测到 OSD 下线(默认 30 秒超时)。
- 标记 PG 为降级状态
- 受影响的所有 PG 进入
degraded 状态(副本数不足)。
- 触发恢复任务
- 集群选择其他健康 OSD 上的副本数据,开始向新 OSD 迁移数据。
- 完成恢复
- 所有 PG 恢复为
active+clean 状态,副本数达标。
三、为什么 PG 数量影响恢复速度?
关键逻辑
- PG 是数据分布的最小单元:每个 PG 包含多个对象(Object),恢复以 PG 为单位并行执行。
- PG 数量越多,并行度越高:
- 若 PG 数量少(如 64),单个 PG 需要迁移大量数据,成为瓶颈。
- 若 PG 数量多(如 512),任务被拆分为更小的单元,多个 PG 可同时恢复。
示例对比
| PG 数量 |
总数据量 |
单个 PG 数据量 |
并行恢复速度(假设单 PG 10 MB/s) |
| 64 |
500 TB |
~7.8 TB |
64 PG × 10 MB/s = 640 MB/s → 总耗时 ~9 天 |
| 512 |
500 TB |
~0.98 TB |
512 PG × 10 MB/s = 5.12 GB/s → 总耗时 ~1.1 天 |
四、数据恢复的监控与调优
1. 监控命令
# 查看集群恢复状态
ceph -s | grep recovery
# 输出示例:recovery io 220 MB/s, recovering 15/512 PGs
# 查看具体 PG 恢复进度
ceph pg dump | grep recovering
2. 调优参数
| 参数 |
作用 |
调整命令示例 |
osd_max_backfills |
单个 OSD 允许的最大并行恢复任务数 |
ceph tell osd.* injectargs '--osd_max_backfills 8' |
osd_recovery_max_active |
全局最大并行恢复任务数 |
ceph config set osd osd_recovery_max_active 16 |
osd_recovery_sleep |
恢复任务间的延迟(降低 OSD 负载) |
ceph config set osd osd_recovery_sleep 0.1 |
五、数据恢复与数据备份的区别
| 特性 |
数据恢复(Recovery) |
数据备份(Backup) |
| 目的 |
修复因硬件故障导致的数据丢失 |
防止人为误删、逻辑错误或灾难性事件 |
| 机制 |
依赖 Ceph 内部的冗余副本或纠删码 |
需要外部工具(如 RBD 快照、Cephfs 快照) |
| 粒度 |
自动修复整个 PG 或对象 |
通常按文件、目录或卷备份 |
| 速度 |
依赖 PG 数量和集群负载 |
受备份存储带宽限制 |
六、总结
- 数据恢复是 Ceph 自愈能力的核心:通过冗余设计和 PG 并行机制保障数据高可用。
- PG 数量是关键杠杆:合理增加 PG 数可显著提升恢复速度,但需平衡 OSD 负载。
- 监控与调优必不可少:通过
ceph -s 和 osd_recovery_* 参数优化恢复效率。