第 3 章 放置组 (PG)
放置组(PG)不适用于 Ceph 客户端,但它们在 Ceph Storage 集群中发挥重要角色。
Ceph Storage 集群可能需要数以千计的 OSD 才能达到 PB 级的存储容量。Ceph 客户端将对象存储在池中,这是整个集群的逻辑子集。存储在池中的对象数量可能容易在数百万和以后运行。具有数以百万计的对象或更无法现实地跟踪每个对象上的放置的系统,仍然表现良好。Ceph 将对象分配到放置组,并将放置组分配给 OSD,以便重新平衡动态和高效。
计算机科学中的所有问题均可由另一级间接处理,除非有太多间接的问题除外。 | ||
-- David Wheeler |
3.1. 关于放置组
在池内每个对象上跟踪对象放置的计算代价比较高。为便于大规模提高性能,Ceph 将池划分到放置组中,将每个对象分配到放置组,并将放置组分配到 Primary OSD。如果 OSD 失败或集群重新平衡,Ceph 可以移动或复制整个放置组,即,PG 中的所有对象都不需要单独解析各个对象。这样,Ceph 集群就可以有效地重新平衡或恢复。

当 CRUSH 分配放置组到 OSD 时,它会计算一系列 OSD- 是主组。osd_pool_default_size
设置减 1
用于复制池,而用于纠删代码池的编码区块 M
数量决定了存储放置组的 OSD 的数量,而不会永久丢失数据。主 OSD 使用 CRUSH 确定次要 OSD,并将 PG 的内容复制到次要 OSD。例如,如果 CRUSH 将对象分配给放置组,并且放置组分配到 OSD 5 作为 Primary OSD,如果 CRUSH 计算 OSD 1 和 OSD 8 是放置组的次要 OSD,则主要 OSD 5 会将数据复制到 OSD 1 和 8。通过代表客户端复制数据,Ceph 简化了客户端接口并减少客户端工作负载。相同的进程允许 Ceph 集群动态恢复和重新平衡。

当 Primary OSD 出现故障并标记为群集时,libvirt 会将放置组分配到另一个 OSD,后者接收 PG 中的对象副本。Up Set
中的另一个 OSD 将假定主 OSD 的角色。
增加对象副本或编码区块数量时,OSD 将根据需要为每个放置组分配到额外的 OSD。
PG 不拥有 OSD。CRUSH 为每个 OSD 分配多个放置组,以随机方式分配到群集上均匀分布数据。