3. 容量规划基础:存储容量模型

在 Rook Ceph 集群的容量规划中,存储容量模型是构建版本漂移校准基线的第一块基石。只有精确理解总容量、可用容量、预留容量与副本因子之间的数学关系,才能准确评估集群的健康水位,并为后续的版本升级与漂移检测提供可靠的量化基准。

3.1 核心容量概念

Ceph 的容量模型并非简单的磁盘加法,而是由物理资源、数据冗余策略与系统开销共同决定的四层结构。下表列出了四个核心维度的定义与计算公式:

容量维度 英文术语 定义 计算公式(简化)
总容量 Total Capacity 集群中所有 OSD 所挂载物理磁盘的原始裸容量之和。 ∑(每块磁盘标称容量)
可用容量 Usable Capacity 在考虑副本因子与预留后,用户数据实际可写入的净容量。 (总容量 - 预留容量) / 副本因子
预留容量 Reserved Capacity 为保障 OSD 性能、故障切换与数据重平衡而保留的不可用空间。 总容量 × 预留比例(通常 5%–15%)
副本因子 Replication Factor 数据在集群中保存的副本份数(含主副本)。 通常为 2 或 3
关键认知: 在 Rook 环境中,ceph df 命令输出的 RAW USED 与 RAW TOTAL 对应的是“总容量”视角;而 USED 与 AVAIL 则反映“可用容量”视角。两者之间的差距主要由副本因子与预留决定。

3.2 容量模型分层架构

为了直观展示从物理磁盘到用户可见容量的转换链路,下图以 Rook Ceph 集群为例,绘制了容量模型的四层架构:

Rook Ceph 存储容量模型分层架构 第1层:物理磁盘层(总容量) OSD 挂载的 NVMe / SSD / HDD 裸容量之和 第2层:预留扣除层 OSD 预留(bluestore_block_db/wal) + 集群预留(mon/mgr/crash) 第3层:副本因子层 数据冗余开销:RF=3 时,每 1GB 用户数据占用 3GB 物理空间 第4层:可用容量层(用户可见) RBD / CephFS / RGW 实际可写入的净容量 公式 可用容量 = (总容量 - 预留) / 副本因子 RF=3 预留10%

3.3 副本因子对容量的影响

副本因子是容量模型中影响最大的单一参数。在 Rook Ceph 中,默认的 pool 副本因子通常为 3(生产环境)或 2(开发/测试环境)。下表对比了不同副本因子下的容量效率:

副本因子 物理开销倍数 可用容量占比(预留10%) 典型场景 风险提示
RF=2 2x 45% 非关键业务、临时存储 单 OSD 故障可能导致数据不可用
RF=3 3x 30% 生产核心业务、数据库 容量利用率低,但数据安全高
EC 4+2 1.5x 60% 冷数据、备份归档 CPU 开销大,不适合小 IO 场景
版本漂移校准警示: 在 Rook 版本升级过程中,如果 pool 的 size(副本因子)被意外修改(例如从 3 降为 2),可用容量会瞬间膨胀约 50%,导致容量监控基线失效。必须在版本漂移校准基线中锁定 pool size 的期望值。

3.4 预留容量的构成与计算

预留容量并非单一数值,而是由多个子系统开销叠加而成。在 Rook Ceph 中,预留容量主要包含以下三部分:

  1. OSD 预留(Bluestore 内部开销): 包括 BlueStore 的 block.db(WAL/RocksDB)、block.wal 以及内部元数据。通常占 OSD 容量的 3%–5%。
  2. 集群预留(Monitor / Manager / Crash): Rook 部署的 monitor、mgr、crashcollector 等控制面 Pod 占用的磁盘空间。通常每个节点预留 10–20 GB。
  3. 运维安全预留(Watermark): 为防止 OSD 写满导致集群卡死,Ceph 默认设置 mon_osd_full_ratio = 0.95,即预留 5% 的紧急空间。

综合预留比例的计算公式如下:

预留比例 = 1 - (1 - bluestore_overhead) × (1 - cluster_reserve_ratio) × (1 - full_ratio)

示例(生产环境典型值):
bluestore_overhead = 0.04
cluster_reserve_ratio = 0.02
full_ratio = 0.05

预留比例 = 1 - (0.96 × 0.98 × 0.95) ≈ 1 - 0.893 ≈ 0.107 → 10.7%

3.5 容量模型在版本漂移校准中的角色

在《容量规划驱动 Rook Ceph 存储版本漂移校准的基线构建》课程中,本节容量模型将作为后续所有校准计算的输入。下图展示了容量模型如何与版本漂移检测流程衔接:

容量模型在版本漂移校准中的位置 容量模型 总/可用/预留/RF 基线构建 期望容量 vs 实际容量 漂移检测 版本升级后容量偏差 校准动作 调整 pool / OSD / 预留

3.6 实践检查清单

在开始版本漂移校准基线构建之前,请确认以下容量模型参数已记录:

  • 总容量: 通过 ceph osd df tree 获取所有 OSD 的 RAW USED + RAW AVAIL 之和。
  • 副本因子: 通过 ceph osd pool ls detail 确认每个 pool 的 size 与 min_size。
  • 预留比例: 检查 ceph osd pool get <pool_name> target_size_ratio 以及 mon_osd_full_ratio。
  • 可用容量: 使用 ceph df 的 AVAIL 列与上述公式交叉验证。
基线记录模板: 建议将上述四个参数记录为 YAML 格式的基线文件,作为后续版本漂移检测的参考锚点。
# capacity_baseline.yaml
cluster_name: prod-rook-ceph
total_capacity_tb: 120.5
reserved_ratio: 0.107
replication_factor: 3
usable_capacity_tb: 35.9
pool_default_size: 3
pool_default_min_size: 2
mon_osd_full_ratio: 0.95