注意
本文档适用于 Ceph 的开发版本。
Erasure Coded Placement Groups
词汇表
- chunk
当调用编码函数时,它会返回大小相等的块。有两种类型的块:(1) 数据块,可以连接起来以重建原始对象;(2) 编码块,可用于重建丢失的块。
- chunk rank
由编码函数确定的块的索引。第一个块的秩是 0,第二个块的秩是 1,依此类推。
- K
对象被划分成的数据块的数量。例如,如果 K = 2,则一个 10KB 的对象被分成两个 5KB 的对象。
- M
由编码函数计算的编码块的数量。M 等于集群中可以丢失的 OSD 的数量,而不会导致集群数据丢失。例如,如果有两个编码块,则可以丢失两个 OSD 而不会丢失数据。
- N
数据块的数量加上编码块的数量:即 K + M。
- rate
包含有用信息的总块的比例:即 K 除以 N。例如,假设 K = 9 且 M = 3。这意味着 N = 12(因为 K + M = 9 + 3)。因此,速率(K / N)为 9 / 12 = 0.75。换句话说,75% 的块将包含有用信息。
- shard (也称为 strip)
来自同一对象的相同秩的块的有序序列。对于给定的放置组,每个 OSD 包含相同秩的分片。在对象仅使用一次编码函数调用进行编码的特殊情况下,可以使用术语 chunk 而不是 shard,因为分片由单个块组成。分片中的块根据它们所属的条带(参见下面的 stripe)的秩进行排序。
- stripe
如果对象非常大,以至于编码它需要多次调用编码函数,那么每次调用都会创建一个称为条带的块集。
定义如下所示(PG 表示放置组)
OSD 40 OSD 33
+-------------------------+ +-------------------------+
| shard 0 - PG 10 | | shard 1 - PG 10 |
|+------ object O -------+| |+------ object O -------+|
||+---------------------+|| ||+---------------------+||
stripe||| chunk 0 ||| ||| chunk 1 ||| ...
0 ||| stripe 0 ||| ||| stripe 0 |||
||+---------------------+|| ||+---------------------+||
||+---------------------+|| ||+---------------------+||
stripe||| chunk 0 ||| ||| chunk 1 ||| ...
1 ||| stripe 1 ||| ||| stripe 1 |||
||+---------------------+|| ||+---------------------+||
||+---------------------+|| ||+---------------------+||
stripe||| chunk 0 ||| ||| chunk 1 ||| ...
2 ||| stripe 2 ||| ||| stripe 2 |||
||+---------------------+|| ||+---------------------+||
|+-----------------------+| |+-----------------------+|
| ... | | ... |
+-------------------------+ +-------------------------+