注意

本文档适用于 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 设备类名称将放置限制为特定类的设备(例如,ssdhdd)。

类型:

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

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入