第 3 章 放置组(PG)
放置组(PG)对 Ceph 客户端不可见,但它们在 Ceph 存储群集中扮演着重要的角色。
Ceph 存储集群可能需要数以千计的 OSD 才能达到字节级别的存储容量。Ceph 客户端将对象存储在池中,这是整个集群的逻辑子集。存储在池中的对象数量可能会轻松地进入数百万个和以后。拥有数百万对象或更多对象的系统无法实际地逐个对象地跟踪放置,并且仍然运行良好。Ceph 将对象分配到 PG,并将 PG 分配给 OSD,从而实现动态和效率的重新平衡。
计算机科学中的所有问题都可通过另一种级别的间接寻址来解决,当然,对于太多间接子问题除外。 | ||
-- David Wheeler |
3.1. 关于 PG
以每个对象为基础在池中跟踪对象放置在大规模计算成本上比较昂贵。为了提高大规模性能,Ceph 将池细分为放置组,将每个对象分配到放置组,再将 PG 分配到 Primary OSD。如果 OSD 出现故障或集群重新平衡,Ceph 可以移动或复制整个放置组,即放置组中的所有对象 - 不需要单独处理每个对象。这使得 Ceph 集群能够有效地重新平衡或恢复。

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

当Primary OSD 出现故障并签出集群时,CRUSH 会将 PG 分配给另一个 OSD,后者接收 PG 中的对象副本。就绪 集合中
的另一个 OSD 将承担Primary OSD 的角色。
根据需要,当增加对象副本或编码区块的数量时,CRUSH 会将每个 PG 分配到额外的 OSD。
PG 不拥有 OSD。CRUSH 将许多 PG 分配给每个 OSD 伪随机,以确保数据在集群中均匀分布。