SHEC 纠删码插件
优质
小牛编辑
151浏览
2023-12-01
shec 插件封装了 multiple SHEC 库。与 Reed Solomon 编码相比,它能使 Ceph 更高效地恢复数据。
创建 SHEC 配置
要新建 shec 纠删码配置:
ceph osd erasure-code-profile set {name} \ plugin=shec \ [k={data-chunks}] \ [m={coding-chunks}] \ [c={durability-estimator}] \ [ruleset-root={root}] \ [ruleset-failure-domain={bucket-type}] \ [directory={directory}] \ [--force]
其中:
k={data-chunks}
描述: | 各对象都被分割为 data-chunks 块,分别存储到不同的 OSD 上。 |
---|---|
类型: | Integer |
是否必需: | No. |
默认值: | 4 |
m={coding-chunks}
描述: | 为各对象计算出 coding-chunks 个编码块,并存储到不同 OSD 上。 coding-chunks 数值不一定等于宕机不丢数据所需的 OSD 数量。 |
---|---|
类型: | Integer |
是否必需: | No. |
默认值: | 3 |
c={durability-estimator}
描述: | 奇偶校验块数量,它们在各自的计算范围内包含了各数据块。此数值被用作 durability estimator (持久性估值)。例如,假设 c=2 ,就是说不丟数据的情况下可损失 2 个 OSD 。 |
---|---|
类型: | Integer |
是否必需: | No. |
默认值: | 2 |
ruleset-root={root}
描述: | 规则集第一步所用的 crush 桶名字。例如 step take default 。 |
---|---|
类型: | String |
是否必需: | No. |
默认值: | default |
ruleset-failure-domain={bucket-type}
描述: | 要确保同一故障域内不能把任意两个块放进一个桶内。例如,如果故障域是 host ,那就不能把任意两个块放到同一主机。它被用于创建规则集的一步,像 step chooseleaf host 。 |
---|---|
类型: | String |
是否必需: | No. |
默认值: | host |
directory={directory}
描述: | 设置纠删码插件所在目录( directory )。 |
---|---|
类型: | String |
是否必需: | No. |
默认值: | /usr/lib/ceph/erasure-code |
--force
描述: | 覆盖已存在的同名配置。 |
---|---|
类型: | String |
是否必需: | No. |
SHEC 布局概述
空间效率
空间效率是数据块在所有对象内占的比率,并表示为 k/(k+m) 。为提升空间效率,你可以增加 k 值或降低 m 值。
space efficiency of SHEC(4,3,2) = 4/(4+3) = 0.57 SHEC(5,3,2) or SHEC(4,2,2) improves SHEC(4,3,2)'s space efficiency
持久性
SHEC 的第三个参数( =c )是一个持久性估值,它大致等于在不丢数据的前提下允许损失的 OSD 数量。
durability estimator of SHEC(4,3,2) = 2
恢复效率
描述恢复效率的计算超出了本文档范畴,但是,提高 m 而不提高 c 确实能提高恢复效率。(然而,在这种情况下必须注意空间效率的牺牲)
SHEC(4,2,2) -> SHEC(4,3,2) : 实现了恢复效率的提升
纠删码配置实例
$ ceph osd erasure-code-profile set SHECprofile \ plugin=shec \ k=8 m=4 c=3 \ ruleset-failure-domain=host $ ceph osd pool create shecpool 256 256 erasure SHECprofile