7.5. 增加放置组


放置组(PG)计数不足,会影响 Ceph 集群和数据分布的性能。它是 nearfull osds 错误消息的主要原因之一。

建议的比率为每个 OSD 100 到 300 个 PG。当您添加更多 OSD 到集群时,此比例可能会降低。

pg_numpgp_num 参数决定了 PG 数量。这些参数为每个池配置,因此您必须单独调整每个池的 PG 数较低。

重要

增加 PG 数量是您可以在 Ceph 集群上执行最多密集型进程。如果没有以缓慢和方法方式执行,这个过程可能会对性能有严重影响。增加 pgp_num 后,您将无法停止或撤销进程,您必须完成它。考虑在业务关键处理时间分配外增加 PG 数量,并警告所有客户端有关潜在性能影响。如果集群处于 HEALTH_ERR 状态,则不要更改 PG 数量。

先决条件

  • 正在运行的 Red Hat Ceph Storage 集群处于健康状态。
  • 节点的根级别访问权限。

流程

  1. 减少数据在各个 OSD 和 OSD 主机上重新分配和恢复的影响:

    1. 降低 osd max backfillsosd_recovery_max_activeosd_recovery_op_priority 参数的值:

      [ceph: root@host01 /]# ceph tell osd.* injectargs '--osd_max_backfills 1 --osd_recovery_max_active 1 --osd_recovery_op_priority 1'
      Copy to Clipboard Toggle word wrap
    2. 禁用浅刮除和深度刮除:

      [ceph: root@host01 /]# ceph osd set noscrub
      [ceph: root@host01 /]# ceph osd set nodeep-scrub
      Copy to Clipboard Toggle word wrap
  2. 使用 每个池计算器的 Ceph 放置组(PG) 来计算 pg_numpgp_num 参数的最佳值。
  3. 以较小增量增加 pg_num 值,直到您达到所需的值。

    1. 确定启动递增值。使用一个非常低的值(2 的指数),并在您确定对集群的影响时增加这个值。最佳值取决于池大小、OSD 数量和客户端 I/O 负载。
    2. 增加 pg_num 值:

      语法

      ceph osd pool set POOL pg_num VALUE
      Copy to Clipboard Toggle word wrap

      指定池名称和新值,例如:

      示例

      [ceph: root@host01 /]# ceph osd pool set data pg_num 4
      Copy to Clipboard Toggle word wrap

    3. 监控集群的状态:

      示例

      [ceph: root@host01 /]# ceph -s
      Copy to Clipboard Toggle word wrap

      PG 状态将从 creating 变为 active+clean。等待所有 PG 都处于 active+clean 状态。

  4. 以小增量增加 pgp_num 值,直到您达到所需的值:

    1. 确定启动递增值。使用一个非常低的值(2 的指数),并在您确定对集群的影响时增加这个值。最佳值取决于池大小、OSD 数量和客户端 I/O 负载。
    2. 增加 pgp_num 值:

      语法

      ceph osd pool set POOL pgp_num VALUE
      Copy to Clipboard Toggle word wrap

      指定池名称和新值,例如:

      [ceph: root@host01 /]# ceph osd pool set data pgp_num 4
      Copy to Clipboard Toggle word wrap
    3. 监控集群的状态:

      [ceph: root@host01 /]# ceph -s
      Copy to Clipboard Toggle word wrap

      PG 状态将更改到 对等wait_backfill回填恢复 等等。等待所有 PG 都处于 active+clean 状态。

  5. 对 PG 数量不足的所有池重复上述步骤。
  6. osd max backfills,osd_recovery_max_active, 和 osd_recovery_op_priority 设置为它们的默认值:

    [ceph: root@host01 /]# ceph tell osd.* injectargs '--osd_max_backfills 1 --osd_recovery_max_active 3 --osd_recovery_op_priority 3'
    Copy to Clipboard Toggle word wrap
  7. 启用浅刮除和深度刮除:

    [ceph: root@host01 /]# ceph osd unset noscrub
    [ceph: root@host01 /]# ceph osd unset nodeep-scrub
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat