注意

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

操作读取(主)均衡器

您可能想知道:如何提高 Ceph 集群的性能?您可以查看的一个重要数据点是每个副本池上的 read_balance_score

此指标可通过 ceph osd pool ls detail 获取(有关详细信息,请参阅),它指示读取性能,或每个副本池的主副本的均衡程度。在大多数情况下,如果 read_balance_score 高于 1(例如 1.5),则表示您的池具有不平衡的主副本,并且您可能希望尝试使用读取均衡器来提高读取性能。

在线优化

启用

要启用自动读取均衡,您必须开启 均衡器模块(在新集群中默认启用)并将模式设置为 readupmap-read

ceph balancer on
ceph balancer mode <read|upmap-read>

readupmap-read 模式都使用 pg-upmap-primary。为了使用 pg-upmap-primary,集群不能有任何 Reef 之前的客户端。

如果您想使用不同的均衡器,或者如果您想制作自己的自定义 pg-upmap-primary 条目,您可能需要关闭均衡器以避免冲突

ceph balancer off

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

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

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

ceph features

均衡器模块

如果设置为 readupmap-read 模式,则 ceph-mgrbalancer 模块将自动均衡每个 OSD 的主 PG 数量。有关详细信息,请参阅均衡器模块

离线优化

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

  1. 获取最新的 osdmap 副本

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

    osdmaptool om --read out.txt --read-pool <pool name> [--vstart]
    

    强烈建议您在运行均衡器之前运行容量均衡器以确保最佳结果。有关如何在集群中均衡容量的详细信息,请参阅使用 pg-upmap

  3. 应用更改

    source out.txt
    

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

    如果您在 vstart 集群中工作,您可以像上面所示传递 --vstart 参数,以便 CLI 命令以 ./bin/ 前缀格式化。

    请注意,每当 PG 数量发生变化时(例如,如果 PG 自动缩放器 [自动缩放放置组] 启动),您应该考虑重新检查分数并在需要时重新运行均衡器。

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

故障排除

删除 pg-upmap-primary 映射

对于需要手动删除 pg-upmap-primary 映射的场景,Ceph 提供了以下开发人员级别的命令。使用这些命令时应谨慎,因为它们直接修改主 PG 映射并可能影响读取性能(这不包括任何数据移动)。

注意

#66867#61948 影响的用户可能会发现这些命令在处理意外的 pg-upmap-primary 行为时很有用。

要删除特定的 pg-upmap-primary 映射,请使用

ceph osd rm-pg-upmap-primary <pgid>

如果您需要清除集群中**所有** pg-upmap-primary 映射,可以使用

ceph osd rm-pg-upmap-primary-all

无法使用内核客户端

如果您无法使用内核客户端映射 RBD 映像或挂载文件系统,而集群中存在 pg-upmap-primary 映射,这是因为内核客户端尚不支持 pg-upmap-primary(截至 2025-09-08)。

按照以下步骤确认此场景

  1. 确认您的集群包含 pg-upmap-primary 映射

ceph osd dump | grep "pg_upmap_primary"
  1. 检查内核日志中是否存在此错误消息

$ dmesg | tail

[73393.901029] libceph: mon2 (1)10.64.24.186:6789 feature set mismatch, my 2f018fb87aa4aafe < server's 2f018fb8faa4aafe, missing 80000000
[73393.901037] libceph: mon2 (1)10.64.24.186:6789 missing required protocol features

这些详细信息确认集群正在使用内核客户端不支持的功能。在内核客户端支持 pg-upmap-primary 之前,您必须删除映射才能成功执行挂载。您可以使用以下命令执行此操作

  1. 如果使用均衡器模块,请将模式更改回不使用 pg-upmap-primary 的模式。这可以防止创建额外的映射

ceph balancer mode upmap
  1. 删除所有 pg-upmap-primary 映射

ceph osd rm-pg-upmap-primary-all

由 Ceph 基金会为您呈现

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