PG和PGP调整经验
调整前准备
- 为了降低对业务的影响,需要调整以下参数
- ceph tell osd.* injectargs ‘–osd-max-backfills 1’
- ceph tell osd.* injectargs ‘–osd-recovery-max-active 1’
- ceph tell osd.* injectargs ‘–osd-recovery-max-single-start 1’
- 计算pool合理的pg和pgp数量:
-
计算公式:(单个osd上pg数,一般为100) x (osd数量) x (该pool数据量百分比) / (副本数)。所得结果向上取2的整数倍。
-
调整pg
ceph osd pool set ${pool_name} pg_num ${pg_num}
说明:
- 调整pg时,原则上每次增加一倍
- 执行上述命令后,本质是当前pg的分裂。
- mon会首先更新自身的osd map中的pg数量,然后将osd map同步给osd。
- osd根据新的pg数量进行计算,进行本地分裂(1个pg分裂成2个)
- 分裂过程就是创建新目录,然后数据移动过去。
- 分裂期间CPU和IO会打满,负载非常高,影响时间看数据量而定。网上说的一般是30s,我的数据量多,并且集群压力大。足足影响了8分钟。部分osd负载特别高,查看osd tree的时候直接down掉的,无法接受请求,随后恢复正常。
- 本地分裂后,pg扩容结束,所以扩容pg很快。
- pg数量大于pgp数量时,heath状态显示warning。需要扩充pgp数量。
调整pgp
ceph osd pool set ${pool_name} pgp_num ${pgp_num}
说明
- 调整pgp数量会使pg在集群内重新分布
- 该操作会影响一半的数据进行迁移,对集群影响非常大。所以上述设置的三个参数会限制当前正在迁移的pg数量,导致不会同时大规模数据一同迁移。