Ceph: change PG number on the fly
A Placement Group (PG) aggregates a series of objects into a group, and maps the group to a series of OSDs. A common mistake while creating a pool is to use the
rados command which by default creates a pool of 8 PGs. Sometime you don’t properly know how to set this value thus you use the
ceph command but put an extremely high value for it. Both case are bad and could lead to some unfortunate situations. In this article, I will explore some methods to work around this major problem.
ONLY FOR VERSION PRIOR TO 0.61:
Short and experimental solution, you should not use, please just note that this command has just been implemented so running it could result in data loss. Currently some patches are set in review so this command is not stable yet. If you really want to try it, I suggest to play with only against a test cluster, so once again DON’T TRY THIS ON A PRODUCTION CLUSTER, merci :-).
FOR VERSION FROM 0.61 AND ABOVE:
$ ceph osd pool set <poolname> pg_num <numpgs> --allow-experimental-feature
See the example below:
$ ceph osd pool set monpool pg_num 512 --allow-experimental-feature
Clean and perfectly safe work around:
$ ceph osd pool create <my-new-pool> <pg_num>
It’s one of the good feature that must be implemented since Ceph is designed to scale under the infinite, the
pg_numcould grow as the cluster does.