第 3 章 放置组
放置组(PG)不适用于 Ceph 客户端,但它们在 Ceph Storage 集群中发挥重要角色。
Ceph Storage 集群可能需要数以千计的 OSD 才能访问 exabyte 的存储容量。Ceph 客户端将对象存储在池中,它们是整个集群的逻辑子集。存储在池中的对象数量可能容易在数百万和以后运行。具有数以百万计的对象或更无法现实地跟踪每个对象上的放置的系统,仍然表现良好。Ceph 将对象分配到放置组,并将放置组分配到 OSD,以便重新平衡动态和高效性。
计算机科学中的所有问题均可由另一级间接处理,除非有太多间接的问题除外。 | ||
-- David Wheeler |
3.1. 关于放置组 复制链接链接已复制到粘贴板!
在池中按对象跟踪对象放置会大规模计算成本。为便于大规模实现高性能,Ceph 将池分配到放置组,将每个对象分配到放置组,并将放置组分配到 Primary OSD。如果 OSD 失败或集群重新平衡,Ceph 可以移动或复制整个放置组,即,PG 中的所有对象都不需要单独解析各个对象。这允许 Ceph 集群有效地重新平衡或恢复。
当 CRUSH 为 OSD 分配放置组时,它会计算一系列 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 失败并标记为 out 集群时,CRUSH 会将 PG 分配给另一个 OSD,后者接收放置组中的对象副本。Up Set
中的另一个 OSD 将假定主 OSD 的角色。
当您增加对象副本或编码区块的数量时,CRUSH 会将每个放置组分配给额外的 OSD。
PG 不拥有 OSD。CRUSH 将多个放置组分配给每个 OSD 伪随机,以确保数据在集群中平均分布。