3.4. 放置组计数
池中放置组的数量对于集群如何对等、分布数据和重平衡操作起非常重要的作业。与大型集群相比,在小集群中增加放置组的数据对性能并不会有显著提高。但是,具有许多池访问同一 OSD 的集群可能需要仔细考虑 PG 数,以便 Ceph OSD 高效地使用资源。
红帽建议每个 OSD 100 到 200 个 PG。
3.4.1. 放置组计算器
放置组(PG)计算器计算您和地址特定用例的放置组数量。当使用 Ceph 客户端(如 Ceph 对象网关)时,PG 计算器尤其有用,其中有许多池通常使用相同的规则(CRUSH 层次结构)。您仍然可以使用 小集群的放置组计数和计算放置组计数 中的准则来手动 计算 PG。但是,PG 计算器是计算 PG 的首选方法。
3.4.2. 配置默认放置组计数
在创建池时,您还会为池创建多个放置组。如果您没有指定放置组数量,Ceph 将使用默认值 8
,这并不低。您可以为池增加放置组数量,但我们建议也设置合理的默认值。
osd pool default pg num = 100 osd pool default pgp num = 100
您需要设置放置组数量(总计)以及用于对象的放置组数量(在 PG 分隔中使用的数量)。它们应该相等。
3.4.3. 小集群的放置组计数
小集群不会从大量放置组中受益。随着 OSD 数量的增加,为 pg_num
和 pgp_num
选择正确的值会变得更为重要,因为在出现问题时以及数据不稳定(这是严重事件导致数据丢失的可能性)时,对集群的行为有显著影响。将 PG 计算器 与小集群一起使用非常重要。
3.4.4. 计算放置组计数
如果您有超过 50 个 OSD,我们建议每个 OSD 大约有 50-100 个放置组,以平衡资源使用量、数据持久性和分布。如果您有超过 50 个 OSD,在 PG Count for Small Clusters 中选择是理想的选择。对于单个对象池,您可以使用以下公式获取基准:
(OSDs * 100) Total PGs = ------------ pool size
其中,pool size 是复制池的副本数,或用于删除代码池的 K+M
总和(ceph osd erasure-code-profile
的返回值)。
然后,您应该检查结果是否适合您设计 Ceph 集群以最大化数据持久性、数据分布和最小化资源使用量。
结果应舍入到最接近的 2 的指数。向上舍入是可选的,但建议 CRUSH 在放置组之间均匀平衡对象数量。
对于 200 个 OSD 和池大小为 3 个副本的集群,您可以估计您的 PG 数量,如下所示:
(200 * 100) ----------- = 6667. Nearest power of 2: 8192 3
当 8192 个放置组分布到 200 个 OSD 时,每个 OSD 大约评估为 41 个放置组。您还需要考虑集群中可能会使用的池数量,因为每个池也会创建放置组。确保具有合理 的最大放置组计数。
3.4.5. 最大放置组计数
当使用多个数据池来存储对象时,您需要确保平衡每个池的放置组数量与每个 OSD 的放置组数量,以便您可以达到合理的放置组总数。其目的是在不用系统资源或使对等进程变得太慢的情况下,每个 OSD 取得明显低差异。
在由 10 个池组成的 exemplary Ceph Storage 集群中,每个池在 10 个 OSD 上有 512 个放置组,总计有 5120 个 PG 分布于 10 个 OSD 中,或每个 OSD 都有 512 个放置组。取决于硬件配置,可能无法使用过多的资源。相反,如果您创建 1,000 个池,每个 PG 具有 512 个 PG,OSD 将处理 ~50,000的放置组,这需要大量资源。运行每个 OSD 的 PG 数量太多可能会显著降低性能,特别是在重新平衡或恢复期间。
Ceph Storage 集群具有每个 OSD 的默认最大值为 300 个放置组。您可以在 Ceph 配置文件中设置不同的最大值。
mon pg warn max per osd
Ceph 对象网关部署有 10-15 池,因此您可能会考虑每个 OSD 使用小于 100 个 PG,以达到合理的最大数量。