3.3. PG Count
池中 PG 的数量在集群对等、分发数据和重新平衡方面扮演着重要角色。与大型集群相比,小型集群无法通过增加放置组的数量来看到性能增强。但是,访问同一 OSD 的集群可能需要仔细考虑 PG 数量,以便 Ceph OSD 高效地使用资源。
红帽建议每个 OSD 100 到 200 个 PG。
3.3.1. PG Calculator 复制链接链接已复制到粘贴板!
PG 计算器为您计算 PG 数量,并解决特定的用例。当使用 Ceph 客户端(如 Ceph 对象网关)时,PG 计算器特别有用,因为有许多池通常使用相同的规则(CRUSH 层次结构)。您可能仍然使用 PG Count for Small Clusters 和 Calculating PG Count 来手动计算 PG。不过,PG 计算器是计算 PG 的首选方法。
3.3.2. 配置默认 PG 数 复制链接链接已复制到粘贴板!
在创建池时,您还会为池创建多个 PG。如果不指定放置组的数量,Ceph 将使用默认值 32,对于某些池而言 这
比较低。您可以为池增加 PG 数量,但我们也建议在 Ceph 配置文件中设置合理的默认值。
为了避免健康警告 POOL_PG_NUM_NOT_POWER_OF_TWO
消息,将两个值用于 PG。
osd pool default pg num = 1024 osd pool default pgp num = 1024
osd pool default pg num = 1024
osd pool default pgp num = 1024
您需要设置 PG 数量(完整),以及用于对象的 PG 数量(用于 PG 拆分)。它们应该是相等的。
3.3.3. 小型集群的 PG Count 复制链接链接已复制到粘贴板!
小型集群不会从大量放置组中受益。随着 OSD 数量增加,pg_num
和 pgp_num
的正确值变得更为重要,因为它对集群的行为有显著影响,并在出现问题时对数据的持久性(严重事件事件导致数据丢失)。务必要将 PG 计算器 用于小型集群。
3.3.4. 计算 PG 数 复制链接链接已复制到粘贴板!
如果您有 50 多个 OSD,我们建议每个 OSD 大约 50-100 个 PG,以平衡资源使用量、数据持久性和分布。如果您没有 50 个 OSD,理想的做法是在 PG Count 中选择 Small Clusters。对于单个对象池,您可以使用以下公式来获取基准:
(OSDs * 100) Total PGs = ------------ pool size
(OSDs * 100)
Total PGs = ------------
pool size
其中,池大小 是复制池的副本数量,或者是纠删代码池的 K+M
和(由 ceph osd erasure-code-profile get
返回)。
然后,您应该检查结果是否与 Ceph 集群的设计方式有关,以最大程度提高数据的持久性、数据分布并最大程度减少资源使用量。
结果应 四舍五入至 2 个最接近的力量。向上取整是可选的,但建议 CRUSH 在放置组之间均匀平衡对象数量。
对于具有 200 个 OSD 且池大小为 3 个副本的集群,您可以估算 PG 数量,如下所示:
(200 * 100) ----------- = 6667. Nearest power of 2: 8192 3
(200 * 100)
----------- = 6667. Nearest power of 2: 8192
3
放置组分布在 200 个 OSD 的 8192 个 PG 中,它评估到每个 OSD 大约 41 个 PG。您还需要考虑您可能在集群中使用的池数量,因为每个池也会创建 PG。确保您有合理的 最大 PG 数。
3.3.5. 最大 PG 数 复制链接链接已复制到粘贴板!
在使用多个数据池来存储对象时,您需要确保平衡每个池的 PG 数量和每个 OSD 的 PG 数量,以便达到合理的 PG 总数。目标是在不耗费系统资源或使 peering 进程变得太慢的情况下,实现每个 OSD 的相对差异。
在由 10 个池组成的实例式 Ceph 存储群集中,每个池在 10 个 OSD 上具有 512 个 PG,每个 OSD 共有 5,120 个 PG,分散在 10 个 OSD 或 512 个 PG 上。这可能不会根据您的硬件配置使用太多的资源。相比之下,如果您创建 1,000 个池,各自具有 512 个 PG,OSD 将分别处理大约 50,000 个 PG,并且需要的资源明显多得多。每个 OSD 使用太多 PG 运行可能会显著降低性能,特别是在重新平衡或恢复期间。
Ceph 存储集群每个 OSD 的默认值最大为 300 个 PG。您可以在 Ceph 配置文件中设置不同的最大值。
mon_max_pg_per_osd
mon_max_pg_per_osd
Ceph 对象网关部署有 10-15 个池,因此您可能会考虑每个 OSD 使用 100 个 PG 以达到合理的上限。