注意

本文档适用于 Ceph 开发版本。

Balancer Module

The balancer可以优化放置组(PGs)在 OSD 之间的分配,以实现平衡的分布。平衡器可以自动运行或以监督方式运行。

状态

要检查平衡器的当前状态,请运行以下命令:

ceph balancer status

自动平衡

当平衡器处于upmap模式时,默认情况下,自动Using pg-upmap

ceph balancer off

平衡器模式可以从upmap模式更改为crush-compat模式。crush-compat模式与旧客户端向后兼容。在crush-compat模式下,平衡器会自动对数据分布进行小的更改,以确保 OSD 得到同等利用。

其他模式包括upmap-readread. upmap-read模式read模式可以在仅需要读取优化时使用。有关更多详细信息,请参阅操作读取(主)平衡器.

限流

如果集群处于降级状态(即,如果 OSD 已失败且系统尚未自我修复),则平衡器不会对 PG 分配进行任何调整。

当集群健康时,平衡器将逐渐移动一小部分不平衡的 PG,以改善分布。此分数不会超过某个阈值,默认值为 5%。要调整此target_max_misplaced_ratio阈值设置,请运行以下命令:

ceph config set mgr target_max_misplaced_ratio .07   # 7%

平衡器在运行之间会休眠。要设置此休眠间隔的秒数,请运行以下命令:

ceph config set mgr mgr/balancer/sleep_interval 60

要设置自动平衡开始的时间(以 HHMM 格式),请运行以下命令:

ceph config set mgr mgr/balancer/begin_time 0000

要设置自动平衡结束的时间(以 HHMM 格式),请运行以下命令:

ceph config set mgr mgr/balancer/end_time 2359

自动平衡可以限制为每周的某些天。要将其限制为特定的工作日或之后(与 crontab,0是星期日,1是星期一,等等),请运行以下命令:

ceph config set mgr mgr/balancer/begin_weekday 0

要将自动平衡限制为特定的工作日或之前(同样,0是星期日,1是星期一,等等),请运行以下命令:

ceph config set mgr mgr/balancer/end_weekday 6

自动平衡可以限制为某些池。默认情况下,此设置的值为空字符串,因此所有池都会自动平衡。要限制自动平衡为特定池,请检索它们的数字池 ID(通过运行ceph osd pool ls detail命令),然后运行以下命令:

ceph config set mgr mgr/balancer/pool_ids 1,2,3

模式

有四种支持的平衡器模式:

  1. crush-compat。此模式使用兼容权重集功能(在 Luminous 中引入)来管理 CRUSH 层次结构中设备的替代权重集。当平衡器在此模式下运行时,正常权重应保持设置为设备的大小,以反映打算存储在设备上的目标数据量。然后,平衡器将优化权重集值,以小增量向上或向下调整,以尽可能接近目标分布。 (由于 PG 放置是一个伪随机过程,因此它受到自然变异的影响;优化权重有助于抵消这种自然变异。)

    注意,此模式与旧客户端完全向后兼容:当与旧客户端共享 OSD Map 和 CRUSH map 时,Ceph 会将优化后的权重显示为“实际”权重。

    此模式的主要限制是,如果层次结构的子树共享任何 OSD,则平衡器无法处理具有不同放置规则的多个 CRUSH 层次结构。 (这种 OSD 共享不典型,并且由于管理共享 OSD 上的空间利用率很困难,通常不建议这样做。)

  2. upmap。在 Luminous 及更高版本中,OSDMap 可以存储单个 OSD 的显式映射,作为正常 CRUSH 放置计算的例外。这些upmap条目提供了对 PG 映射的细粒度控制。此平衡器模式优化单个 PG 的放置,以实现平衡的分布。在大多数情况下,生成的分布几乎完美:即,每个 OSD 上的 PG 数量相等(±1 PG,因为总数可能无法整除)。

    要使用upmap,所有客户端都必须是 Luminous 或更新版本。

  3. 读取。在 Reef 及更高版本中,OSDMap 可以存储单个主 OSD 的显式映射,作为正常 CRUSH 放置计算的例外。这些pg-upmap-primary条目提供了对主 PG 映射的细粒度控制。此模式优化单个主 PG 的放置,以实现集群中平衡的读取或主 PG。在read模式下,upmap 行为不会执行,因此此模式最适合仅需要读取平衡用例。

    要使用pg-upmap-primary,所有客户端都必须是 Reef 或更新版本。有关客户端兼容性的更多详细信息,请参阅操作读取(主)平衡器.

  4. upmap-read。此平衡器模式结合了upmapread模式的优化优势。与read模式一样,upmap-read使用pg-upmap-primary。因此,只有 Reef 及更高版本客户端兼容。有关客户端兼容性的更多详细信息,请参阅操作读取(主)平衡器.

    upmap-read是实现upmap模式提供的平衡 PG 分配以及read模式提供的平衡读取的最佳选择。

默认模式是upmap。可以将模式更改为crush-compat:

ceph balancer mode crush-compat

可以将模式更改为read:

ceph balancer mode read

可以将模式更改为upmap-read:

ceph balancer mode upmap-read

监督优化

平衡器的监督使用可以理解为三个不同的阶段:

  1. 构建计划

  2. 评估数据分布的质量,无论是当前 PG 分布还是执行计划后结果 PG 分布

  3. 执行计划

要评估当前分布,请运行以下命令:

ceph balancer eval

要评估单个池的分布,请运行以下命令:

ceph balancer eval <pool-name>

要更详细地查看评估结果,请运行以下命令:

ceph balancer eval-verbose ...

要指示平衡器生成计划(使用当前配置的模式),为计划起一个名称(任何有用的标识字符串),然后运行以下命令:

ceph balancer optimize <plan-name>

要查看计划的内容,请运行以下命令:

ceph balancer show <plan-name>

要显示所有计划,请运行以下命令:

ceph balancer ls

要丢弃旧计划,请运行以下命令:

ceph balancer rm <plan-name>

要查看当前记录的计划,请检查以下状态命令的输出:

ceph balancer status

要更详细地查看状态,请运行以下命令:

ceph balancer status detail

要启用ceph balancer status detail生成 SSH 密钥,运行以下命令:

ceph config set mgr mgr/balancer/update_pg_upmap_activity True

要禁用ceph balancer status detail生成 SSH 密钥,运行以下命令:

ceph config set mgr mgr/balancer/update_pg_upmap_activity False

要评估执行特定计划后可能产生的分布,请运行以下命令:

ceph balancer eval <plan-name>

如果预期计划将改善分布(即,计划的分数低于当前集群状态的分数),可以通过运行以下命令执行该计划:

ceph balancer execute <plan-name>

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.