第 3 章 放置组(PG)


放置组(PG)对 Ceph 客户端不可见,但它们在 Ceph 存储群集中扮演着重要的角色。

Ceph 存储集群可能需要数以千计的 OSD 才能达到字节级别的存储容量。Ceph 客户端将对象存储在池中,这是整个集群的逻辑子集。存储在池中的对象数量可能会轻松地进入数百万个和以后。拥有数百万对象或更多对象的系统无法实际地逐个对象地跟踪放置,并且仍然运行良好。Ceph 将对象分配到 PG,并将 PG 分配给 OSD,从而实现动态和效率的重新平衡。

 

计算机科学中的所有问题都可通过另一种级别的间接寻址来解决,当然,对于太多间接子问题除外。

 
 -- David Wheeler

3.1. 关于 PG

以每个对象为基础在池中跟踪对象放置在大规模计算成本上比较昂贵。为了提高大规模性能,Ceph 将池细分为放置组,将每个对象分配到放置组,再将 PG 分配到 Primary OSD。如果 OSD 出现故障或集群重新平衡,Ceph 可以移动或复制整个放置组,即放置组中的所有对象 -​ 不需要单独处理每个对象。这使得 Ceph 集群能够有效地重新平衡或恢复。

关于 PG

当 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 集群动态恢复和重新平衡。

CRUSH 层次结构

当Primary OSD 出现故障并签出集群时,CRUSH 会将 PG 分配给另一个 OSD,后者接收 PG 中的对象副本。就绪 集合中 的另一个 OSD 将承担Primary OSD 的角色。

根据需要,当增加对象副本或编码区块的数量时,CRUSH 会将每个 PG 分配到额外的 OSD。

注意

PG 不拥有 OSD。CRUSH 将许多 PG 分配给每个 OSD 伪随机,以确保数据在集群中均匀分布。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat, Inc.