1.5. 使用 Ceph Manager 负载均衡器模块
该负载平衡器是 Ceph Manager 的模块,它可在 OSD 之间优化放置组或 PG 的放置,从而实现均衡分配,可自动或处于受监管的方式。
先决条件
- 正在运行的 Red Hat Ceph Storage 集群
启动负载均衡器
确保启用了 balancer 模块:
[root@mon ~]# ceph mgr module enable balancer
打开 balancer 模块:
[root@mon ~]# ceph balancer on
模式
目前有两种支持的负载均衡器模式:
CRUSH-compat:CRUSH compat 模式使用 Ceph Luminous 中引入的 compat
weight-set
功能来管理 CRUSH 层次结构中设备的一组替代权重。普通的权重应保留为设备大小,以反映您要保存在该设备中的数据的目标数量。然后,负载均衡器会优化weight-set
值,以小增量或向下调整,以便尽可能实现与目标分布匹配的发行版。由于 PG 放置是伪随机进程,因此放置有自然的差异;通过优化权重,负载平衡器计数器可以自然变化。这个模式完全与旧的客户端向后兼容。当 OSDMap 和 CRUSH map 与旧客户端共享时,该负载平衡器将优化的权重作为实际权重。
此模式的主要限制是,如果层次结构的子树共享任何 OSD,则负载平衡器无法处理具有不同放置规则的多个 CRUSH 层次结构。由于此配置使得在共享 OSD 上管理空间利用率非常困难,因此通常不建议这样做。因此,这个限制通常不是一个问题。
upmap:自 Luminous 开始,OSDMap 可以将个别 OSD 的显式映射存储为正常 CRUSH 放置计算之外。这些
upmap 条目提供对 PG 映射的精细控制。此 CRUSH 模式将优化单个 PG 的放置,以实现均衡的分布。在大多数情况下,这种分布是 "perfect",每个 OSD +/-1 PG 上具有平等的 PG 数量,因为它们可能无法均匀划分。
重要使用 upmap 需要所有客户端都在运行 Red Hat Ceph Storage 3.x 或更高版本,以及 Red Hat Enterprise Linux 7.5 或更高版本。
要允许使用这个功能,您必须告诉集群,只需要通过以下方法支持 luminous 或更高的客户端:
[root@admin ~]# ceph osd set-require-min-compat-client luminous
如果任何 pre-luminous 客户端或守护进程连接到监控器,此命令将失败。
由于一个已知问题,内核 CephFS 客户端会报告自己为 jewel 客户端。要临时解决这个问题,请使用
--yes-i-really-mean-it
标志:[root@admin ~]# ceph osd set-require-min-compat-client luminous --yes-i-really-mean-it
您可以检查正在使用的客户端版本:
[root@admin ~]# ceph features
警告在 Red Hat Ceph Storage 3.x 中,upmap 功能仅支持作为使用 Ceph Manager 的 PG 来平衡 PG。Red Hat Ceph Storage 3.x 不支持使用 upmap 功能手动重新平衡 PG。
默认模式是 crush-compat
。可使用以下方法更改模式:
[root@mon ~]# ceph balancer mode upmap
或:
[root@mon ~]# ceph balancer mode crush-compat
状态
可使用以下方法随时检查负载均衡器的当前状态:
[root@mon ~]# ceph balancer status
自动平衡
默认情况下,在打开负载均衡器模块时,会使用自动平衡:
[root@mon ~]# ceph balancer on
可使用以下方法关闭负载均衡器:
[root@mon ~]# ceph balancer off
这将使用 crush-compat
模式,这些模式与旧客户端向后兼容,并且随着时间的推移对数据分发进行小更改,以确保 OSD 平等使用。
节流
如果集群已被降级,例如,如果 OSD 失败且系统还没有修复,则不会对 PG 分发进行修改。
当集群处于健康状态时,负载均衡器会减慢其更改,从而使被误置或需要移动的 PG 的百分比低于 5% 的阈值。这个百分比可以使用 max_misplaced
设置调整。例如,将阈值增加到 7%:
[root@mon ~]# ceph config-key set mgr/balancer/max_misplaced .07
加强优化
负载均衡器操作被分为几个不同的阶段:
-
构建
计划
-
评估数据分发的质量,可以是当前 PG 发行版,或
执行计划
后会导致的 PG 发行版 执行计划
评估和分数当前的分发:
[root@mon ~]# ceph balancer eval
评估单个池的发布:
[root@mon ~]# ceph balancer eval <pool-name>
查看更多评估详情:
[root@mon ~]# ceph balancer eval-verbose ...
使用当前配置模式生成计划:
[root@mon ~]# ceph balancer optimize <plan-name>
将
<plan-name>
替换为自定义计划名称。查看计划的内容:
[root@mon ~]# ceph balancer show <plan-name>
丢弃旧计划:
[root@mon ~]# ceph balancer rm <plan-name>
要查看当前记录的计划,请使用 status 命令:
[root@mon ~]# ceph balancer status
计算执行计划后生成的发布质量:
[root@mon ~]# ceph balancer eval <plan-name>
执行计划:
[root@mon ~]# ceph balancer execute <plan-name>
[NOTE]:只有如果 预计要改进分发,则才执行计划。执行后,计划将被丢弃。