5.4. 使用 Ceph Manager 负载均衡器模块


balancer 是 Ceph Manager(ceph-mgr)的一个模块,用于优化 OSD 之间放置组(PG)放置,从而实现平衡的分发(可自动或监管方式)。

无法禁用 balancer 模块。它只能关闭自定义配置。

模式

以下是支持的负载均衡器模式:

crush-compat

CRUSH compat 模式使用 compat weight-set 功能(在 Ceph Luminous 中引入)来管理 CRUSH 层次结构中设备的一个替代的权重集。正常的权重应保持设置为设备的大小,以反映您要存储在该设备中的目标数据量。然后,平衡会优化 weight-set 值,以较小的增量调整或缩减值,以实现尽可能与目标发行版匹配的分布。由于 PG 放置是一个伪随机进程,因此放置中有一个自然的变化;通过优化 weight,负载均衡器的计数器实际上会造成自然变化。

这个模式与旧的客户端完全向后兼容。当 OSDMap 和 CRUSH map 与较旧的客户端共享时,负载均衡器会将优化权重ff 显示为实际权重。

此模式的主要限制是,如果层次结构的子树共享任何 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
读取

OSDMap 可以存储单个主 OSD 的显式映射,作为常见 CRUSH 放置计算的例外。这些 pg-upmap-primary 条目提供对主 PG 映射的精细控制。此模式优化单个主 PG 的放置,以便在集群中实现均衡的读取或主 PG。在 读取 模式中,不会进行 upmap 行为,因此,对于只需要读取平衡的用例,此模式最适合此模式。

重要

要允许使用这个功能,您必须告诉集群只需要使用以下命令支持 Reef 或 later 客户端:

[ceph: root@host01 /]# ceph osd set-require-min-compat-client reef

如果任何 pre-Reef 客户端或守护进程连接到 monitor,则此命令会失败。

要临时解决这个问题,请使用 --yes-i-really-mean-it 标志:

[ceph: root@host01 /]# ceph osd set-require-min-compat-client reef --yes-i-really-mean-it

您可以检查使用哪些客户端版本:

[ceph: root@host01 /]# ceph features
upmap-read

此负载均衡器模式组合了 upmapread 模式的优化优势。与 读取 模式一样,upmap -read 使用 pg-upmap-primary

使用 upmap-read 实现平衡 PG 分发的 upmap 模式,以及 balanced 读取的 读取服务。

重要

要允许使用这个功能,您必须告诉集群只需要使用以下命令支持 Reef 或 later 客户端:

[ceph: root@host01 /]# ceph osd set-require-min-compat-client reef

如果任何 pre-Reef 客户端或守护进程连接到 monitor,则此命令会失败。

要临时解决这个问题,请使用 --yes-i-really-mean-it 标志:

[ceph: root@host01 /]# ceph osd set-require-min-compat-client reef --yes-i-really-mean-it

您可以检查使用哪些客户端版本:

[ceph: root@host01 /]# ceph features

5.4.1. 使用容量均衡 Red Hat Ceph 集群

使用容量均衡器来平衡 Red Hat Ceph 存储集群。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。

流程

  1. 检查是否启用了 balancer 模块:

    Example

    [ceph: root@host01 /]# ceph mgr module enable balancer

  2. 打开 balancer 模块:

    Example

    [ceph: root@host01 /]# ceph balancer on

  3. 若要更改模式,请使用以下命令:默认模式是 upmap

    Example

    [ceph: root@host01 /]# ceph balancer mode crush-compat

    或者

    Example

    [ceph: root@host01 /]# ceph balancer mode upmap

  4. 检查均衡的当前状态。

    Example

    [ceph: root@host01 /]# ceph balancer status

自动平衡

打开 balancer 模块时使用自动平衡。使用 ceph balancer on 命令打开容量均衡器。默认情况下,在打开 balancer 模块时,会使用自动平衡,并启用 upmap 模式。

示例

[ceph: root@host01 /]# ceph balancer on

您可以将负载均衡器模式从 upmap 改为 crush-compact 模式。crush-compat 模式与旧的客户端向后兼容,并对数据分发进行小更改,以确保 OSD 平等地使用。

在负载均衡器开启后,您可以验证负载均衡器状态。

Example

[ceph: root@host01 /]# ceph balancer on
[ceph: root@host01 /]# ceph balancer mode crush-compat
[ceph: root@host01 /]# ceph balancer status
{
    "active": true,
    "last_optimize_duration": "0:00:00.001174",
    "last_optimize_started": "Fri Nov 22 11:09:18 2024",
    "mode": "crush-compact",
    "no_optimization_needed": false,
    "optimize_result": "Unable to find further optimization, change balancer mode and retry might help",
    "plans": []
}

若要关闭 balancer 模块,可使用 ceph balancer off 命令。

Example

[ceph: root@host01 /]# ceph balancer off
[ceph: root@host01 /]#  ceph balancer status
{
    "active": false,
    "last_optimize_duration": "",
    "last_optimize_started": "",
    "mode": "crush-compat",
    "no_optimization_needed": false,
    "optimize_result": "",
    "plans": []
}

节流

如果集群降级了 OSD,且系统尚未修复自身,则不会对 PG 发行版进行调整。

当集群处于健康状态时,负载均衡器会节流到其更改,使得 PG 百分比被错误或需要移动,默认低于 5%。可以使用 target_max_misplaced_ratio 设置调整这个百分比。

语法

ceph config-key set mgr target_max_misplaced_ratio THRESHOLD_PERCENTAGE

以下示例将阈值增加到 7%。

Example

[ceph: root@host01 /]# ceph config-key set mgr target_max_misplaced_ratio .07

对于自动平衡:

  • 将自动平衡器运行之间设置为睡眠的秒数:

Example

[ceph: root@host01 /]# ceph config set mgr mgr/balancer/sleep_interval 60

  • 将一天的时间设置为以 HHMM 格式开始自动平衡:

Example

[ceph: root@host01 /]# ceph config set mgr mgr/balancer/begin_time 0000

  • 将一天的时间设置为以 HHMM 格式完成自动平衡:

Example

[ceph: root@host01 /]# ceph config set mgr mgr/balancer/end_time 2359

  • 将自动平衡限制为本周或更高版本的这一天。使用与 crontab 相同的约定,0 为星期日,1 为 Monday,以此类推:

Example

[ceph: root@host01 /]# ceph config set mgr mgr/balancer/begin_weekday 0

  • 将自动平衡限制为星期几或更早版本。这使用与 crontab 相同的约定,0 为星期日,1 代表星期一,以此类推:

Example

[ceph: root@host01 /]# ceph config set mgr mgr/balancer/end_weekday 6

  • 定义自动平衡仅限于的池 ID。的默认值是空字符串,即所有池都是均衡的。可以使用 ceph osd pool ls detail 命令获取数字池 ID:

Example

[ceph: root@host01 /]# ceph config set mgr mgr/balancer/pool_ids 1,2,3

监控的优化

balancer 操作分为几个不同的阶段:

  1. 构建 计划
  2. 评估数据分发的质量,针对当前的 PG 分发,或在执行一个计划(plan)后生成的 PG 分发。
  3. 执行计划

    • 评估和衡量当前发行版:

      示例

      [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

      注意

      只有预期会改进发布时才执行计划。执行后,将丢弃计划。

5.4.2. 使用读取均衡 Red Hat Ceph 集群

平衡集群中的主放置组(PG)。负载平衡器可以优化 OSD 之间放置组的分配,以实现均衡的分发。balancer 可以自动运行(在线)、离线,或者以监管的方式(离线)运行。

5.4.2.1. 在线优化

使用 balancer 模块在集群中平衡主 PG。

先决条件

在开始前,请确保您有一个正在运行的 Red Hat Ceph Storage 集群。

流程

  1. 启用 balancer 模块。

    语法

    [ceph: root@host01 /]# ceph mgr module enable balancer

  2. 打开 balancer 模块。

    语法

    [ceph: root@host01 /]# ceph balancer on

  3. 更新集群上的 min_compact_client。要使用在线优化,集群中必须指示对 Reef 或 later 客户端的支持。

    语法

    ceph osd set-require-min-compat-client reef

    注意

    如果任何 pre-Reef 客户端或守护进程连接到 monitor,则此命令会失败。要临时解决这个问题,请使用 --yes-i-really-mean-it 标志:

    语法

    [ceph: root@host01 /]# ceph osd set-require-min-compat-client reef --yes-i-really-mean-it

    You can check what client versions are in use with: the ceph features command.

    语法

    [ceph: root@host01 /]# ceph features

  4. 将模式更改为 upmap-readread for read balancing。

    默认模式是 upmap,运行以下命令来启用这些模式:

    语法

    ceph balancer mode upmap-read
    ceph balancer mode read

  5. 检查均衡的当前状态。

    语法

    ceph balancer status

    示例

    [ceph: root@host01 /]# ceph balancer status
    {
    "active": true,
    "last_optimize_duration": "0:00:00.013640",
    "last_optimize_started": "Mon Nov 22 14:47:57 2024",
    "mode": "upmap-read",
    "no_optimization_needed": true,
    "optimize_result": "Unable to find further optimization, or pool(s) pg_num is decreasing, or distribution is already perfect",
    "plans": []
    }

5.4.2.2. 离线优化(技术预览)

重要

红帽产品服务级别协议(SLA)不支持技术预览功能,且其功能可能并不完善,因此红帽不建议在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。如需了解更多详细信息,请参阅红帽技术预览功能的支持范围。

如果您有未平衡的主 OSD,您可以使用 osdmaptool 中内置的离线优化器来更新它们。

红帽建议在运行读取负载均衡器前运行容量负载均衡器以确保最佳结果。

按照流程中的步骤使用读取均衡集群:

先决条件

在开始前,请确保您有以下先决条件:

  • 一个运行和容量均衡的 Red Hat Ceph Storage 集群。
  • 在运行读取负载均衡器前,运行容量均衡每个 OSD 上的容量,以确保最佳结果。使用以下步骤平衡容量:

    1. 获取 osdmap 的最新副本。

      [ceph: root@host01 /]# ceph osd  getmap -o map
    2. 运行 upmap balancer。

      [ceph: root@host01 /]# ospmaptool map –upmap out.txt
    3. 文件 out.txt 包含提议的解决方案。

      此流程中的命令是运行用来对集群应用更改的常规 Ceph CLI 命令。

      如果 out.txt 文件中有任何建议,请运行以下命令:

      [ceph: root@host01 /]# source out.txt

流程

  1. 检查每个池可用的 read_balance_score

    [ceph: root@host01 /]# ceph osd pool ls detail

    如果 read_balance_score 超过 1,则您的池具有未平衡的主 OSD。

    对于同构集群,最佳分数为 [Ceil{(PG/Number of OSDs)}/(PG/Number of OSDs)]/[ ( PG/Number of OSD 的数量)/ (PG/Number of OSD 的数量)]。例如,如果您有一个具有 32 PG 和 10 个 OSD 的池(PG/Number of OSD 的数量) = 32/10 = 3.2。因此,如果所有设备都相同,则最佳分数是 3.2 的 iling 值除以 4/3.2 = 1.25 的 PG/Number of OSDs 的数量。如果您在同一系统中有 64 个 PG 的另一个池,则最佳分数为 7/6.4 =1.09375

    输出示例:

    $ ceph osd pool ls detail
    pool 1 '.mgr' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 17 flags hashpspool stripe_width 0 pg_num_max 32 pg_num_min 1 application mgr read_balance_score 3.00
    pool 2 'cephfs.a.meta' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 16 pgp_num 16 autoscale_mode on last_change 55 lfor 0/0/25 flags hashpspool stripe_width 0 pg_autoscale_bias 4 pg_num_min 16 recovery_priority 5 application cephfs read_balance_score 1.50
    pool 3 'cephfs.a.data' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 128 pgp_num 128 autoscale_mode on last_change 27 lfor 0/0/25 flags hashpspool,bulk stripe_width 0 application cephfs read_balance_score 1.31

  2. 获取 osdmap 的最新副本:

    [ceph: root@host01 /]# ceph osd getmap -o om

    输出示例:

    got osdmap epoch 56

  3. 运行 optimizer:

    文件 out.txt 包含提议的解决方案。

    [ceph: root@host01 /]# osdmaptool om --read out.txt --read-pool _POOL_NAME_ [--vstart]

    输出示例:

    $ osdmaptool om --read out.txt --read-pool cephfs.a.meta
    ./bin/osdmaptool: osdmap file 'om'
    writing upmap command output to: out.txt
    ---------- BEFORE ------------
     osd.0 | primary affinity: 1 | number of prims: 4
     osd.1 | primary affinity: 1 | number of prims: 8
     osd.2 | primary affinity: 1 | number of prims: 4
    
    read_balance_score of 'cephfs.a.meta': 1.5
    
    ---------- AFTER ------------
     osd.0 | primary affinity: 1 | number of prims: 5
     osd.1 | primary affinity: 1 | number of prims: 6
     osd.2 | primary affinity: 1 | number of prims: 5
    
    read_balance_score of 'cephfs.a.meta': 1.13
    
    
    num changes: 2

  4. 文件 out.txt 包含提议的解决方案。

    此流程中的命令是运行的常规 Ceph CLI 命令,以便对集群应用更改。如果您在 vstart 集群中工作,您可以传递-- vstart 参数,以便使用 ./bin/ 前缀对 CLI 命令进行格式化。

    [ceph: root@host01 /]# source out.txt

    输出示例:

    $ cat out.txt
    ceph osd pg-upmap-primary 2.3 0
    ceph osd pg-upmap-primary 2.4 2
    
    $ source out.txt
    change primary for pg 2.3 to osd.0
    change primary for pg 2.4 to osd.2

    注意

    如果您第一次运行 ceph osd pg-upmap-primary 命令,您可能会收到警告:

    Error EPERM: min_compat_client luminous < reef, which is required for pg-upmap-primary. Try 'ceph osd set-require-min-compat-client reef' before using the new interface

    在这种情况下,运行推荐的命令 ceph osd set-require-min-compat-client reef 并调整集群的 min-compact-client。

注意

如果放置组(PG)数量被添加或从集群中删除任何 OSD,则请考虑重新检查分数并重新运行负载均衡器,因为这些操作会对池产生显著影响。

5.4.2.3. 监控的优化

读取器也可以用于监管的优化。如果使用监管的优化,请使用 使用容量均衡 Red Hat Ceph 集群来平衡 Red Hat Ceph 集群的信息。将模式设置为 upmap-readread

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.