注意
本文档适用于 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-mgr 的 balancer 模块将自动平衡每个 OSD 的 PG 数量。请参阅 均衡器模块。
离线优化
upmap 条目通过内置于 osdmaptool -- ceph osd cluster map manipulation tool 中的离线优化器进行更新。
获取最新版本的 osdmap:
ceph osd getmap -o om运行优化器:
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 负载。应用更改:
source out.txt在上述示例中,建议的更改写入到输出文件
out.txt中。此过程中的命令是正常的 Ceph CLI 命令,可以运行以将更改应用到集群。
可以根据需要重复上述步骤多次,以实现每组池的完美 PG 分布。
要查看有关该工具正在执行的操作的(详细)信息,您可以将 --debug-osd 10 传递给 osdmaptool。要查看更多详细信息,请将 --debug-crush 10 传递给 osdmaptool。