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
Copy to Clipboard Toggle word wrap

如果任何 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
Copy to Clipboard Toggle word wrap

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

[ceph: root@host01 /]# ceph features
Copy to Clipboard Toggle word wrap
读取

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

重要

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

[ceph: root@host01 /]# ceph osd set-require-min-compat-client reef
Copy to Clipboard Toggle word wrap

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

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

[ceph: root@host01 /]# ceph osd set-require-min-compat-client reef --yes-i-really-mean-it
Copy to Clipboard Toggle word wrap

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

[ceph: root@host01 /]# ceph features
Copy to Clipboard Toggle word wrap
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
Copy to Clipboard Toggle word wrap

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

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

[ceph: root@host01 /]# ceph osd set-require-min-compat-client reef --yes-i-really-mean-it
Copy to Clipboard Toggle word wrap

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

[ceph: root@host01 /]# ceph features
Copy to Clipboard Toggle word wrap

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

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

先决条件

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

流程

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

    Example

    [ceph: root@host01 /]# ceph mgr module enable balancer
    Copy to Clipboard Toggle word wrap

  2. 打开 balancer 模块:

    Example

    [ceph: root@host01 /]# ceph balancer on
    Copy to Clipboard Toggle word wrap

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

    Example

    [ceph: root@host01 /]# ceph balancer mode crush-compat
    Copy to Clipboard Toggle word wrap

    或者

    Example

    [ceph: root@host01 /]# ceph balancer mode upmap
    Copy to Clipboard Toggle word wrap

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

    Example

    [ceph: root@host01 /]# ceph balancer status
    Copy to Clipboard Toggle word wrap

自动平衡

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

示例

[ceph: root@host01 /]# ceph balancer on
Copy to Clipboard Toggle word wrap

您可以将负载均衡器模式从 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": []
}
Copy to Clipboard Toggle word wrap

若要关闭 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": []
}
Copy to Clipboard Toggle word wrap

节流

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

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

语法

ceph config-key set mgr target_max_misplaced_ratio THRESHOLD_PERCENTAGE
Copy to Clipboard Toggle word wrap

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

Example

[ceph: root@host01 /]# ceph config-key set mgr target_max_misplaced_ratio .07
Copy to Clipboard Toggle word wrap

对于自动平衡:

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

Example

[ceph: root@host01 /]# ceph config set mgr mgr/balancer/sleep_interval 60
Copy to Clipboard Toggle word wrap

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

Example

[ceph: root@host01 /]# ceph config set mgr mgr/balancer/begin_time 0000
Copy to Clipboard Toggle word wrap

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

Example

[ceph: root@host01 /]# ceph config set mgr mgr/balancer/end_time 2359
Copy to Clipboard Toggle word wrap

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

Example

[ceph: root@host01 /]# ceph config set mgr mgr/balancer/begin_weekday 0
Copy to Clipboard Toggle word wrap

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

Example

[ceph: root@host01 /]# ceph config set mgr mgr/balancer/end_weekday 6
Copy to Clipboard Toggle word wrap

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

Example

[ceph: root@host01 /]# ceph config set mgr mgr/balancer/pool_ids 1,2,3
Copy to Clipboard Toggle word wrap

监控的优化

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

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

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

      示例

      [ceph: root@host01 /]# ceph balancer eval
      Copy to Clipboard Toggle word wrap

    • 评估单个池的发布:

      语法

      ceph balancer eval POOL_NAME
      Copy to Clipboard Toggle word wrap

      示例

      [ceph: root@host01 /]# ceph balancer eval rbd
      Copy to Clipboard Toggle word wrap

    • 要查看更多评估的详情:

      示例

      [ceph: root@host01 /]# ceph balancer eval-verbose ...
      Copy to Clipboard Toggle word wrap

    • 使用当前配置模式生成计划:

      语法

      ceph balancer optimize PLAN_NAME
      Copy to Clipboard Toggle word wrap

      使用自定义计划名称替换 PLAN_NAME

      示例

      [ceph: root@host01 /]# ceph balancer optimize rbd_123
      Copy to Clipboard Toggle word wrap

    • 查看计划的内容:

      语法

      ceph balancer show PLAN_NAME
      Copy to Clipboard Toggle word wrap

      示例

      [ceph: root@host01 /]# ceph balancer show rbd_123
      Copy to Clipboard Toggle word wrap

    • 要丢弃旧计划:

      语法

      ceph balancer rm PLAN_NAME
      Copy to Clipboard Toggle word wrap

      示例

      [ceph: root@host01 /]# ceph balancer rm rbd_123
      Copy to Clipboard Toggle word wrap

    • 要查看当前记录的计划,请使用 status 命令:

      [ceph: root@host01 /]# ceph balancer status
      Copy to Clipboard Toggle word wrap
    • 要计算执行计划后结果的分发质量:

      语法

      ceph balancer eval PLAN_NAME
      Copy to Clipboard Toggle word wrap

      示例

      [ceph: root@host01 /]# ceph balancer eval rbd_123
      Copy to Clipboard Toggle word wrap

    • 执行计划:

      语法

      ceph balancer execute PLAN_NAME
      Copy to Clipboard Toggle word wrap

      示例

      [ceph: root@host01 /]# ceph balancer execute rbd_123
      Copy to Clipboard Toggle word wrap

      注意

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

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
    Copy to Clipboard Toggle word wrap

  2. 打开 balancer 模块。

    语法

    [ceph: root@host01 /]# ceph balancer on
    Copy to Clipboard Toggle word wrap

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

    语法

    ceph osd set-require-min-compat-client reef
    Copy to Clipboard Toggle word wrap

    注意

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

    语法

    [ceph: root@host01 /]# ceph osd set-require-min-compat-client reef --yes-i-really-mean-it
    Copy to Clipboard Toggle word wrap

    You can check what client versions are in use with: the ceph features command.
    Copy to Clipboard Toggle word wrap

    语法

    [ceph: root@host01 /]# ceph features
    Copy to Clipboard Toggle word wrap

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

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

    语法

    ceph balancer mode upmap-read
    ceph balancer mode read
    Copy to Clipboard Toggle word wrap

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

    语法

    ceph balancer status
    Copy to Clipboard Toggle word wrap

    示例

    [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": []
    }
    Copy to Clipboard Toggle word wrap

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

重要

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

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

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

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

先决条件

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

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

    1. 获取 osdmap 的最新副本。

      [ceph: root@host01 /]# ceph osd  getmap -o map
      Copy to Clipboard Toggle word wrap
    2. 运行 upmap balancer。

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

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

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

      [ceph: root@host01 /]# source out.txt
      Copy to Clipboard Toggle word wrap

流程

  1. 检查每个池可用的 read_balance_score

    [ceph: root@host01 /]# ceph osd pool ls detail
    Copy to Clipboard Toggle word wrap

    如果 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
    Copy to Clipboard Toggle word wrap

  2. 获取 osdmap 的最新副本:

    [ceph: root@host01 /]# ceph osd getmap -o om
    Copy to Clipboard Toggle word wrap

    输出示例:

    got osdmap epoch 56
    Copy to Clipboard Toggle word wrap

  3. 运行 optimizer:

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

    [ceph: root@host01 /]# osdmaptool om --read out.txt --read-pool _POOL_NAME_ [--vstart]
    Copy to Clipboard Toggle word wrap

    输出示例:

    $ 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
    Copy to Clipboard Toggle word wrap

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

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

    [ceph: root@host01 /]# source out.txt
    Copy to Clipboard Toggle word wrap

    输出示例:

    $ 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
    Copy to Clipboard Toggle word wrap

    注意

    如果您第一次运行 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
    Copy to Clipboard Toggle word wrap

    在这种情况下,运行推荐的命令 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 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

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

Theme

© 2025 Red Hat