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 设置。

posted @ 2025-06-19 19:51  mofy  阅读(90)  评论(0)    收藏  举报