首页/系统与基础设施/存储速查/纠删码配置参数与空间开销计算
分布式与对象存储70 条

纠删码配置参数与空间开销计算

纠删码用 k 个数据块加 m 个校验块换取更低的空间开销,理论倍率约为 (k+m)/k。配置在创建存储池时绑定,块总数决定所需故障域宽度;k 越大越省空间,重建代价也越高。

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​​‌‌‌​‌‌​​‌​‌​​‌​‌‌‌‌​‌‌​​‌​‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌‌​​‌‌​‌‌‌​‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌‌​​​​​‌‌​​​​‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​‌‌​‌​‌‌​​‌​‌​‌‌‌​‌​​​‌‌​​‌​‌​‌‌‌​​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌​‌‌‌‌​‌‌‌​‌‌​​‌‌​​‌​‌​‌‌‌​​‌​​‌‌​‌​​​​‌‌​​‌​‌​‌‌​​​​‌​‌‌​​‌​​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

k 与 m 决定开销

纠删码配置用两个数字描述冗余结构:k 是数据块数量,m 是校验块数量,两者之和是编码块总数。写入时对象被切成 k 份并据此算出 m 份校验,读取时凑齐其中任意 k 份即可还原,因此同时失效的块数不超过 m 时数据依然可用。空间开销倍率约等于 k 与 m 之和除以 k,例如 k 取 8、m 取 3 时约为 1.375 倍,而三副本方案是 3 倍。块数越多越省空间,参与一次读写或重建的节点也越多,延迟与恢复代价同步上升。

基本信息

适用平台分布式存储的纠删码存储池
核心参数k 数据块数、m 校验块数
空间开销约为 k 与 m 之和除以 k
容错能力允许同时丢失 m 个块
插件算法常见 jerasure、isa、lrc、shec,各自带专属参数
绑定时机建池时指定配置,事后修改受限
最小可写数默认 k+1,取值范围从 k+1 到 k+m

典型使用场景

  • 容量紧张的归档与备份池:用较大的 k 值压低空间开销
  • 可用性优先的业务:适当提高 m,允许更多块同时失效
  • 跨机架部署规划:块总数决定所需故障域宽度,先数节点再定组合
  • 容量评估:把节省的倍率换算成实际可写入的容量
  • 核对既有池:确认配置与规划一致,避免被临时改动

配置查看与建池

配置查看与建池
ceph osd erasure-code-profile ls               # 列出已有配置
ceph osd erasure-code-profile get myprofile     # 查看 k、m 与插件参数
ceph osd erasure-code-profile set myprofile k=8 m=3   # 新建或覆盖配置
ceph osd pool create ecpool erasure myprofile   # 建池时绑定该配置
ceph osd pool get ecpool min_size               # 核对最小可写块数
ceph df detail                                  # 对比池的可用与原始占用

开销与容错对照

块组合空间开销可同时失效
2+1约 1.5 倍1 个块
4+2约 1.5 倍2 个块
8+3约 1.375 倍3 个块
8+4约 1.5 倍4 个块
10+4约 1.4 倍4 个块
理论倍率只是下限:归置组切分、未写满一个条带的对象、以及存储引擎自身的额外占用,都会让实际使用量高于计算值。做容量规划时留出余量,并用容量查看命令核对真实占用。
块总数决定故障域宽度:主机级故障域下需要不少于块总数的可用主机,否则选点会回退,同一台主机或同一机架内可能出现多个块,实际容错能力低于理论值。

小对象与覆盖写

纠删码对小对象不友好:不足一个条带的数据也要按整条带填充与计算校验,实际占用被放大,小文件密集的场景可能抵消掉节省的空间。需要频繁原地更新的上层组件还要额外依赖覆盖写支持,并对底层存储引擎有要求,是否可用以及具体限制以官方文档为准。

插件差异值得单独确认:部分算法依赖特定指令集才能发挥性能,本地恢复码一类插件还带有自己的额外参数,用于在机架内局部重建以降低跨域流量。选定组合前先阅读对应插件说明。

易错点

  • 把理论倍率直接当作可用容量:忽略归置组切分与条带填充损耗,规划容量偏乐观
  • 块总数超过故障域宽度:编码块落在同一主机或同一机架,容错能力名不副实
  • 最小可写数设得过低:块缺失时仍接受写入,已丢失的块再也无法重建
  • 建池后才想调整 k 与 m:已绑定的配置难以原地修改,通常要新建池并迁移数据
  • 只看空间开销不看重建代价:k 与 m 越大,单次重建参与的节点越多,恢复期间前后端压力越大

数据来源与参考

  • Ceph 官方文档:Erasure code 与纠删码配置相关章节
  • Ceph 官方文档:存储池创建与参数说明

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/storage/erasure-code-parameters-overhead.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​​‌‌‌​‌‌​​‌​‌​​‌​‌‌‌‌​‌‌​​‌​‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌‌​​‌‌​‌‌‌​‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌‌​​​​​‌‌​​​​‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​‌‌​‌​‌‌​​‌​‌​‌‌‌​‌​​​‌‌​​‌​‌​‌‌‌​​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌​‌‌‌‌​‌‌‌​‌‌​​‌‌​​‌​‌​‌‌‌​​‌​​‌‌​‌​​​​‌‌​​‌​‌​‌‌​​​​‌​‌‌​​‌​​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​