注意
本文档适用于 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-read
和read
. 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
模式
有四种支持的平衡器模式:
crush-compat。此模式使用兼容权重集功能(在 Luminous 中引入)来管理 CRUSH 层次结构中设备的替代权重集。当平衡器在此模式下运行时,正常权重应保持设置为设备的大小,以反映打算存储在设备上的目标数据量。然后,平衡器将优化权重集值,以小增量向上或向下调整,以尽可能接近目标分布。 (由于 PG 放置是一个伪随机过程,因此它受到自然变异的影响;优化权重有助于抵消这种自然变异。)
注意,此模式与旧客户端完全向后兼容:当与旧客户端共享 OSD Map 和 CRUSH map 时,Ceph 会将优化后的权重显示为“实际”权重。
此模式的主要限制是,如果层次结构的子树共享任何 OSD,则平衡器无法处理具有不同放置规则的多个 CRUSH 层次结构。 (这种 OSD 共享不典型,并且由于管理共享 OSD 上的空间利用率很困难,通常不建议这样做。)
upmap。在 Luminous 及更高版本中,OSDMap 可以存储单个 OSD 的显式映射,作为正常 CRUSH 放置计算的例外。这些
upmap
条目提供了对 PG 映射的细粒度控制。此平衡器模式优化单个 PG 的放置,以实现平衡的分布。在大多数情况下,生成的分布几乎完美:即,每个 OSD 上的 PG 数量相等(±1 PG,因为总数可能无法整除)。要使用
upmap
,所有客户端都必须是 Luminous 或更新版本。读取。在 Reef 及更高版本中,OSDMap 可以存储单个主 OSD 的显式映射,作为正常 CRUSH 放置计算的例外。这些
pg-upmap-primary
条目提供了对主 PG 映射的细粒度控制。此模式优化单个主 PG 的放置,以实现集群中平衡的读取或主 PG。在read
模式下,upmap 行为不会执行,因此此模式最适合仅需要读取平衡用例。要使用
pg-upmap-primary
,所有客户端都必须是 Reef 或更新版本。有关客户端兼容性的更多详细信息,请参阅操作读取(主)平衡器.upmap-read。此平衡器模式结合了
upmap
和read
模式的优化优势。与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
监督优化
平衡器的监督使用可以理解为三个不同的阶段:
构建计划
评估数据分布的质量,无论是当前 PG 分布还是执行计划后结果 PG 分布
执行计划
要评估当前分布,请运行以下命令:
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. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.