自Nautilus版本开始Ceph支持自动调整PG merging,减少了每次加osd时候自己计算、修改的麻烦。

但其实自己计算也是很简单的,一个原则就是每个OSD大约能够分配到100pg就是合理的范围,计算公式:

(OSD数量×100)÷副本数量,如果有多个pool,还需要再除以pool数量,结果取接近计算值的2次幂。比如16个OSD ÷ 3副本÷ 1个pool,计算就是:(16×100)÷3÷1= 533.33,近2次幂的就是512了。

获取当前pg_num / pgp_num 的方式

ceph osd pool get rbdpool pg_num
ceph osd pool get rbdpool pgp_num

如果要手动设置pg_num / pgp_num 则简单修改命令为:

ceph osd pool set rbdpool pg_num 128
ceph osd pool set rbdpool pgp_num 128

注意pg_num与pgp_num一般要保持一致。


启用自动调整功能

ceph mgr module enable pg_autoscaler

为特定pool开启调整

ceph osd pool set rbdpool pg_autoscale_mode on

然后你需要告诉系统你预计的pool容量,它可以是固定的大小,或者是共享总容量的一个百分比,我喜欢用百分比

ceph osd pool set rbdpool target_size_ratio .8

以上是设置rbdpool占总容量的80%,执行完如果pg处于不合理状态你应该可以看到它已经在自动调整了。你也可以不设置这个,系统会跟随你的容量变化自动调整,但是每次调整都会耗费大量的资源,所以一开始就设定好可以减少一些不必要的资源浪费。

如果你喜欢用固定容量表示,则:

ceph osd pool set rbdpool target_size_bytes 100T

查看 PG 扩展建议

ceph osd pool autoscale-status

你还可以做很多调整,比如约定每个osd的pg数量,默认是100。更多可以参考文档:

https://docs.ceph.com/en/latest/rados/operations/placement-groups/
https://ceph.io/en/news/blog/2019/new-in-nautilus-pg-merging-and-autotuning/

标签: Ceph

添加新评论