5.5. 使用 Ceph Manager 负载均衡器模块
balancer 是 Ceph Manager(ceph-mgr
)的一个模块,用于优化 OSD 之间放置组(PG)放置,从而实现平衡的分发(可自动或监管方式)。
目前无法禁用 balancer 模块。它只能关闭自定义配置。
模式
目前支持的负载均衡器模式有两种:
CRUSH -compat :CRUSH compat 模式使用 Ceph Luminous 中引入的兼容
weight-set
功能来管理 CRUSH 层次结构中设备的备用权重集合。普通权重应保持设置为设备的大小,以反映您要存储在设备上的数据数量。然后,负载均衡器会优化weight-set
值,以较小的增量调整它们,以实现与目标分布匹配的发行版。由于 PG 放置是一种伪随机进程,因此放置有自然变化;通过优化权重,平衡平衡器的作用是自然变化。这个模式与旧的客户端完全向后兼容。当 OSDMap 和 CRUSH map 与旧客户端共享时,平衡器会将优化的权重显示为实际权重。
此模式的主要限制是,如果层次结构的子树共享任何 OSD,则均衡器无法处理具有不同放置规则的多个 CRUSH 层次结构。由于此配置使得在共享 OSD 上管理空间利用率比较困难,因此通常不建议这样做。因此,这个限制通常不是问题。
upmap: 从 Luminous 开始,OSDMap 可以存储各个 OSD 的显式映射,如普通的 CRUSH 放置计算例外。这些
upmap
条目提供对 PG 映射的精细控制。此 CRUSH 模式将优化各个 PG 的放置,以实现均衡的分发。在大多数情况下,此分布为"完美",每个 OSD +/-1 PG 上相等的 PG 数量,因为它们可能无法均匀划分。重要要允许使用这个功能,您必须使用以下命令告知集群只需要支持 luminous 或更新的客户端:
[ceph: root@host01 /]# ceph osd set-require-min-compat-client luminous
如果任何 pre-luminous 客户端或守护进程连接到 monitor,则此命令会失败。
由于一个已知问题,内核 CephFS 客户端会将自身报告为 jewel 客户端。要临时解决这个问题,请使用
--yes-i-really-mean-it
标志:[ceph: root@host01 /]# ceph osd set-require-min-compat-client luminous --yes-i-really-mean-it
您可以检查哪些客户端版本被用于:
[ceph: root@host01 /]# ceph features
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
流程
确保启用 balancer 模块:
示例
[ceph: root@host01 /]# ceph mgr module enable balancer
打开 balancer 模块:
示例
[ceph: root@host01 /]# ceph balancer on
默认模式是
upmap
。可使用以下方法更改模式:示例
[ceph: root@host01 /]# ceph balancer mode crush-compact
或
示例
[ceph: root@host01 /]# ceph balancer mode upmap
Status
balancer 的当前状态可随时检查:
示例
[ceph: root@host01 /]# ceph balancer status
自动平衡
默认情况下,在打开 balancer 模块时会使用自动平衡:
示例
[ceph: root@host01 /]# ceph balancer on
可使用以下内容再次关闭负载均衡器:
示例
[ceph: root@host01 /]# ceph balancer off
这将使用 crush-compat
模式,它与旧的客户端向后兼容,并且会随着时间的推移对数据分发进行小更改,以确保 OSD 平等地使用。
节流
如果集群已降级,则没有对 PG 分发的调整,例如,如果 OSD 已出现故障,系统尚未修复自身。
当集群处于健康状态时,负载均衡器会节流到其更改,使得 PG 百分比被错误或需要移动,默认低于 5%。可以使用 target_max_misplaced_ratio
设置调整这个百分比。例如,将阈值增加到 7%:
示例
[ceph: root@host01 /]# ceph config-key set mgr target_max_misplaced_ratio .07
用于自动平衡:
- 将自动负载均衡器运行间隔之间的秒数设置为 sleep :
示例
[ceph: root@host01 /]# ceph config set mgr mgr/balancer/sleep_interval 60
- 将天数设置为以 HHMM 格式开始自动平衡:
示例
[ceph: root@host01 /]# ceph config set mgr mgr/balancer/begin_time 0000
- 以 HHMM 格式设置一天完成自动平衡的时间:
示例
[ceph: root@host01 /]# ceph config set mgr mgr/balancer/end_time 2359
-
将自动平衡限制为一周或之后的这一天。使用与 crontab 相同的惯例,
0
代表星期日,1
代表星期一,以此类推:
示例
[ceph: root@host01 /]# ceph config set mgr mgr/balancer/begin_weekday 0
-
将自动平衡限制为一周或更早的这一天。这使用与 crontab 相同惯例,
0
代表星期日,1
代表星期一,以此类推:
示例
[ceph: root@host01 /]# ceph config set mgr mgr/balancer/end_weekday 6
-
定义自动平衡限制的池 ID。这样做的默认值是一个空字符串,这意味着所有池都是均衡的。可以使用
ceph osd pool ls detail
命令获取数字池 ID:
示例
[ceph: root@host01 /]# ceph config set mgr mgr/balancer/pool_ids 1,2,3
监控的优化
balancer 操作分为几个不同的阶段:
-
构建
计划
。 -
评估数据分发的质量,针对当前的 PG 分发,或在执行一个
计划(plan)
后生成的 PG 分发。 执行
计划
。评估并评分当前发行版本:
示例
[ceph: root@host01 /]# ceph balancer eval
要评估单个池的分发:
语法
ceph balancer eval POOL_NAME
示例
[ceph: root@host01 /]# ceph balancer eval rbd
查看更多评估详情:
示例
[ceph: root@host01 /]# ceph balancer eval-verbose ...
使用当前配置模式生成计划:
语法
ceph balancer optimize PLAN_NAME
使用自定义计划名称替换 PLAN_NAME。
示例
[ceph: root@host01 /]# ceph balancer optimize rbd_123
查看计划的内容:
语法
ceph balancer show PLAN_NAME
示例
[ceph: root@host01 /]# ceph balancer show rbd_123
要丢弃旧计划:
语法
ceph balancer rm PLAN_NAME
示例
[ceph: root@host01 /]# ceph balancer rm rbd_123
要查看当前记录的计划,请使用 status 命令:
[ceph: root@host01 /]# ceph balancer status
要计算执行计划后结果的分发质量:
语法
ceph balancer eval PLAN_NAME
示例
[ceph: root@host01 /]# ceph balancer eval rbd_123
执行计划:
语法
ceph balancer execute PLAN_NAME
示例
[ceph: root@host01 /]# ceph balancer execute rbd_123
注意只有预期会改进发布时才执行计划。执行后,计划将被丢弃。