Ceph 中调整存储池的 PG(Placement Group)数量
在 Ceph 中调整存储池的 PG(Placement Group)数量需要通过命令行操作,以下是完整解决方案:
解决方案步骤:
调整默认 PG 配置(影响未来新创建的存储池)
设置默认 pg_num
ceph config set global osd_pool_default_pg_num 64
设置默认 pgp_num(通常与 pg_num 相同)
ceph config set global osd_pool_default_pgp_num 64
说明:
-
pg_num:存储池的 PG 总数
-
pgp_num:用于数据归置的 PG 数量(必须 ≤ pg_num)
-
推荐值:每 OSD 约 50-100 个 PG 为宜
调整现有存储池的 PG 数量(以实际池名为例)
假设存储池名为 rbd(请替换为实际池名)
POOL_NAME="rbd"
先增加 pg_num
ceph osd pool set $POOL_NAME pg_num 64
等集群状态恢复 HEALTH_OK 后(观察 ceph -s)
sleep 30 # 等待数据迁移
再增加 pgp_num
ceph osd pool set $POOL_NAME pgp_num 64
PG 数量计算参考公式
PG_NUM = (OSD_NUM × 100) / REPLICA_COUNT / POOL_COUNT
您的集群:6 OSD,默认副本数 3,池数 4
计算:(6×100)/(3×4)=50 → 向上取整到最近的 2^n(即 64)
验证调整结果
查看所有池的 PG 设置
ceph osd pool ls detail
输出示例(关注 pg_num/pgp_num 字段):
pool 1 'rbd' replicated size 3 min_size 2 ...
pg_num 64 pgp_num 64
关键注意事项:
分两步执行:
先调 pg_num,等待数据迁移完成(ceph -s 无 backfill 进度)
再调 pgp_num,避免一次性修改导致大规模数据迁移
迁移期间监控:
watch ceph -s # 监控 HEALTH 状态
ceph osd pool autoscale-status # 检查自动缩放建议
不直接修改仪表盘创建逻辑:
Dashboard 创建池时继承全局配置,通过步骤 1 修改默认值后,新池会自动用新值
PG 数上限建议:
# 检查当前 PG 分布情况
ceph osd pool stats egrep "pool
pg"
单 OSD 总 PG 上限建议不超过 200-300
故障排查:
如果迁移卡住(如出现 stuck inactive):
强制完成迁移
ceph osd force-create-pg <pg_id> --yes-i-really-mean-it
重置卡住的 PG(极端情况下使用)
ceph pg repair <pg_id>
通过此方法,您既可以修正现有池的 PG 数量,也能永久修改默认配置,未来通过 Dashboard 创建的新池会自动使用优化后的 PG 设置。

浙公网安备 33010602011771号