注意

本文档适用于 Ceph 的开发版本。

使用 pg-upmap

在 Luminous v12.2.z 及更高版本中,OSDMap 中有一个 *pg-upmap* 异常表,允许集群将特定的 PG 明确地映射到特定的 OSD。这使得集群能够微调数据分布,在大多数情况下,实现 PG 在 OSD 上的均匀分布。

然而,关于这个新功能有一个重要的注意事项:它要求所有客户端都理解 OSDMap 中的新 *pg-upmap* 结构。

在线优化

启用

为了使用 pg-upmap,集群中不能有任何 pre-Luminous 客户端。默认情况下,新集群会启用 *balancer 模块*,该模块会使用 pg-upmap。如果您想使用不同的均衡器或者想要创建自定义的 pg-upmap 条目,您可能需要关闭均衡器以避免冲突。

ceph balancer off

要在现有集群上使用新功能,您必须限制集群仅支持 Luminous(及更新版本)客户端。为此,请运行以下命令:

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

如果任何 pre-Luminous 客户端或守护程序连接到监视器,此命令将失败。要查看正在使用的客户端版本,请运行以下命令:

ceph features

均衡器模块

ceph-mgrbalancer 模块将自动平衡每个 OSD 的 PG 数量。请参阅 均衡器模块

离线优化

upmap 条目通过内置于 osdmaptool -- ceph osd cluster map manipulation tool 中的离线优化器进行更新。

  1. 获取最新版本的 osdmap:

    ceph osd getmap -o om
    
  2. 运行优化器:

    osdmaptool om --upmap out.txt [--upmap-pool <pool>] \
    [--upmap-max <max-optimizations>] \
    [--upmap-deviation <max-deviation>] \
    [--upmap-active]
    

    强烈建议单独为每个池进行优化,或为一组使用情况相似的池进行优化。您可以多次指定 --upmap-pool 选项。“使用情况相似的池”是指映射到相同设备并存储相同类型数据的池(例如,RBD 镜像池被认为使用情况相似;RGW 索引池和 RGW 数据池则不被认为使用情况相似)。

    max-optimizations 值决定了要识别的最大 upmap 条目数。默认值为 10(与 ceph-mgr 均衡器模块相同),但如果您进行离线优化,则应使用更大的数字。如果它找不到任何额外的更改(即,如果池分布完美),它将提前停止。

    max-deviation 值默认为 5。如果 OSD 的 PG 计数与计算出的目标数字相差不超过此值,则认为它是完美的。

    --upmap-active 选项模拟活动均衡器在 upmap 模式下的行为。它会持续循环直到 OSD 达到平衡,并报告发生了多少轮次以及每轮所需的时间。轮次经过的时间指示了 ceph-mgr 计算下一个优化计划时消耗的 CPU 负载。

  3. 应用更改:

    source out.txt
    

    在上述示例中,建议的更改写入到输出文件 out.txt 中。此过程中的命令是正常的 Ceph CLI 命令,可以运行以将更改应用到集群。

可以根据需要重复上述步骤多次,以实现每组池的完美 PG 分布。

要查看有关该工具正在执行的操作的(详细)信息,您可以将 --debug-osd 10 传递给 osdmaptool。要查看更多详细信息,请将 --debug-crush 10 传递给 osdmaptool

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入