Placement Group
PG_NUM
创建新池时,
ceph osd pool create {pool-name} pg_num
必须选择 的值,因为它不能(当前)自动计算。下面是一些常用的值:pg_num
- 少于 5 个 OSD 设置为 128
pg_num
- 5 到 10 个 OSD 设置为 512
pg_num
- 10 到 50 个 OSD 设置为 1024
pg_num
- 如果您有 50 多个 OSD,您需要了解权衡以及如何自己计算值
pg_num
- 要自己计算值,请使用pgcalc 工具的帮助
pg_num
随着 OSD 数量的增加,为 pg_num 选择正确的值变得更加重要,因为它对群集的行为以及出错时数据的持久性(即灾难性事件导致数据丢失的概率)有重要影响。
选择放置组的数量
如果您拥有超过 50 个 OSD,我们建议每个 OSD 大约 50-100 个放置组,以平衡资源使用情况、数据持久性和分布。如果您拥有少于 50 个 OSD,则最好选择上述预选。对于单个对象池,可以使用以下公式获取基线:
(OSDs * 100)
Total PGs = ------------
pool size
其中池大小是复制池的副本数或擦除编码池的 K+M 总和(由 ceph osd 擦除代码配置文件获取返回)。
然后,您应该检查结果是否有意义的方式,你设计你的Ceph集群,以最大限度地提高数据持久性,对象分布和尽量减少资源使用。
结果应始终四舍五入到最接近的功率为 2。
只有两个电源才能均匀地平衡放置组中的对象数。其他值将导致数据在 OSD 中的分布不均匀。它们的使用应限于逐步从一个两个权力到另一个权力。
例如,对于具有 200 个 OSD 和池大小为 3 个副本的群集,您将估计您的 PG 数量,如下所示:
(200 * 100)
----------- = 6667. Nearest power of 2: 8192
3
使用多个数据池存储对象时,您需要确保平衡每个池的放置组数与每个 OSD 的放置组数,以便得出合理的放置组总数,这些放置组提供合理的每个 OSD 方差,而不会对系统资源征税,或使对等过程过于慢。
例如,一个 10 个池的群集,每个池在 10 个 OSD 上具有 512 个放置组,共有 5,120 个放置组分布在 10 个 OSD 上,即每个 OSD 有 512 个放置组。这不会使用太多的资源。但是,如果创建 1,000 个池,每个池有 512 个放置组,则 OSD 将处理每个放置组 50,000 个,并且需要大量资源和时间进行对等。
您可能会发现PGCalc 工具很有帮助。
设置放置组数
若要设置池中放置组的数量,必须指定创建池时放置组的数量。有关详细信息,请参阅创建池。即使在创建池后,您也可以更改放置组的数量:
ceph osd pool set {pool-name} pg_num {pg_num}
增加放置组数后,还必须增加放置组数 (),然后群集才能重新平衡。这将是将考虑由 CRUSH 算法放置的放置组数。增加拆分放置组,但数据不会迁移到较新的放置组,直到放置组放置,即。 增加。应等于 。要增加放置组的数量,请执行以下操作:pgp_num``pgp_num``pg_num``pgp_num``pgp_num``pg_num
ceph osd pool set {pool-name} pgp_num {pgp_num}
减少 PG 数量时,会自动进行调整。pgp_num