Ceph 擦除编码开销概览
计算 Ceph 中复制池的存储开销很简单。将您拥有的空间量除以存储池的“大小”(副本数量)参数。
我们用一些大致的数字来举例:64 个 OSD,每个 4TB。
原始大小:64 * 4 = 256TB 大小 2:128 / 2 = 128TB 大小 3:128 / 3 = 85.33TB
复制池在开销方面成本高昂:大小 2 提供的弹性和开销与 RAID-1 相同。大小 3 提供的弹性比 RAID-1 更好,但代价是更大的开销。
解释擦除编码的原理会很快变得复杂。
我喜欢将复制池比作 RAID-1,将擦除编码池比作 RAID-5(或 RAID-6),因为它们都有数据块和恢复/奇偶校验/编码块。
擦除编码的吸引力在于,它可以提供与复制池相同(或更好)的弹性,但存储开销更低——代价是它所需的计算能力。
Ceph 已经支持擦除编码一段时间了,并且有有趣的文档可供参考
- https://ceph.net.cn/docs/master/rados/operations/erasure-code/
- https://ceph.net.cn/docs/master/rados/operations/erasure-code-profile/
- https://ceph.net.cn/docs/master/dev/erasure-coded-pool/
然而,擦除编码池需要一个 缓存层 才能在大多数情况下使用。
这为您的擦除编码池提供了较慢/更大/更便宜的驱动器与作为缓存层的更快、更昂贵的驱动器的完美协同效应。
要计算擦除编码池的开销,您需要知道擦除编码配置文件的“k”和“m”值。
chunk
当调用编码函数时,它会返回相同大小的块。数据块可以连接起来重建原始对象,编码块可以用来重建丢失的块。
K
数据块的数量,即原始对象被分割成的块数。例如,如果 K = 2,则 10KB 的对象将被分割成 K 个 5KB 的对象。
M
编码块的数量,即编码函数计算出的额外块数。如果有 2 个编码块,则表示可以在不丢失数据的情况下容忍 2 个 OSD 故障。
计算开销的公式是
nOSD * k / (k+m) * OSD 大小
最后,让我们基于 64 个 4 TB 的 OSD,从 m=1 到 m=4 以及 k=1 到 k=10,查看几个不同的擦除编码配置文件配置
| 1 | 2 | 3 | 4 | |
|---|---|---|---|---|
| 1 | 128.00 | 85.33 | 64.00 | 51.20 |
| 2 | 170.67 | 128.00 | 102.40 | 85.33 |
| 3 | 192.00 | 153.60 | 128.00 | 109.71 |
| 4 | 204.80 | 170.67 | 146.29 | 128.00 |
| 5 | 213.33 | 182.86 | 160.00 | 142.22 |
| 6 | 219.43 | 192.00 | 170.67 | 153.60 |
| 7 | 224.00 | 199.11 | 179.20 | 162.91 |
| 8 | 227.56 | 204.80 | 186.18 | 170.67 |
| 9 | 230.40 | 209.45 | 192.00 | 177.23 |
| 10 | 232.73 | 213.33 | 196.92 | 182.86 |
| 原始 | 256 | 256 | 256 | 256 |