注意
本文档适用于 Ceph 的开发版本。
SHEC 擦除码插件
shec 插件封装了 多个 SHEC 库。它允许 ceph 比 Reed Solomon 码更高效地恢复数据。
创建 SHEC 配置文件
要创建新的 shec 擦除码配置文件
ceph osd erasure-code-profile set {name} \
plugin=shec \
[k={data-chunks}] \
[m={coding-chunks}] \
[c={durability-estimator}] \
[crush-root={root}] \
[crush-failure-domain={bucket-type}] \
[crush-device-class={device-class}] \
[directory={directory}] \
[--force]
其中
k={数据块数}
- 描述:
每个对象被分成 data-chunks 份,每份存储在一个不同的 OSD 上。
- 类型:
整数
- 必需:
否。
- 默认值:
4
m={coding-chunks}
- 描述:
计算每个对象的编码块并将其存储在不同的 OSD 上。编码块的数量不一定等于在不丢失数据的情况下可以宕机的 OSD 数量。
- 类型:
整数
- 必需:
否。
- 默认值:
3
c={耐久性估算器}
- 描述:
奇偶校验块的数量,每个奇偶校验块的计算范围都包括每个数据块。该数量用作耐久性估算器。例如,如果 c=2,则在不丢失数据的情况下可以宕机 2 个 OSD。
- 类型:
整数
- 必需:
否。
- 默认值:
2
crush-root={root}
- 描述:
用于 CRUSH 规则第一步的 crush 桶的名称。例如 step take default。
- 类型:
String
- 必需:
否。
- 默认值:
default
crush-failure-domain={bucket-type}
- 描述:
确保没有两个块位于具有相同故障域的桶中。例如,如果故障域是 host,则不会有两个块存储在同一主机上。它用于创建 CRUSH 规则步骤,例如 step chooseleaf host。
- 类型:
String
- 必需:
否。
- 默认值:
host
crush-device-class={device-class}
- 描述:
使用 CRUSH 映射中的 crush 设备类名称将放置限制为特定类的设备(例如,
ssd或hdd)。- 类型:
String
- 必需:
否。
- 默认值:
directory={directory}
- 描述:
设置从中加载纠删码插件的 directory 名称。
- 类型:
String
- 必需:
否。
- 默认值:
/usr/lib/ceph/erasure-code
--force
- 描述:
覆盖具有相同名称的现有配置文件。
- 类型:
String
- 必需:
否。
SHEC 布局简述
空间效率
空间效率是数据块与对象中所有块的比率,表示为 k/(k+m)。为了提高空间效率,您应该增加 k 或减小 m
SHEC(4,3,2) 的空间效率 = \(\frac{4}{4+3}\) = 0.57 SHEC(5,3,2) 或 SHEC(4,2,2) 提高了 SHEC(4,3,2) 的空间效率
耐久性
SHEC 的第三个参数 (=c) 是一个耐久性估算器,它近似于在不丢失数据的情况下可以宕机的 OSD 数量。
SHEC(4,3,2) 的耐久性 估算器 = 2
恢复效率
描述恢复效率的计算超出了本文档的范围,但至少在不增加 c 的情况下增加 m 可以提高恢复效率。(但是,在这种情况下,我们必须注意牺牲了空间效率。)
SHEC(4,2,2) -> SHEC(4,3,2) : 提高了恢复效率
擦除码配置文件示例
ceph osd erasure-code-profile set SHECprofile \
plugin=shec \
k=8 m=4 c=3 \
crush-failure-domain=host
ceph osd pool create shecpool erasure SHECprofile