注意
本文档适用于 Ceph 的开发版本。
操作读取(主)均衡器
您可能想知道:如何提高 Ceph 集群的性能?您可以查看的一个重要数据点是每个副本池上的 read_balance_score。
此指标可通过 ceph osd pool ls detail 获取(有关详细信息,请参阅池),它指示读取性能,或每个副本池的主副本的均衡程度。在大多数情况下,如果 read_balance_score 高于 1(例如 1.5),则表示您的池具有不平衡的主副本,并且您可能希望尝试使用读取均衡器来提高读取性能。
在线优化
启用
要启用自动读取均衡,您必须开启 均衡器模块(在新集群中默认启用)并将模式设置为 read 或 upmap-read
ceph balancer on
ceph balancer mode <read|upmap-read>
read 和 upmap-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
均衡器模块
如果设置为 read 或 upmap-read 模式,则 ceph-mgr 的 balancer 模块将自动均衡每个 OSD 的主 PG 数量。有关详细信息,请参阅均衡器模块。
离线优化
主副本通过内置于 osdmaptool -- ceph osd cluster map manipulation tool 中的离线优化器进行更新。
获取最新的 osdmap 副本
ceph osd getmap -o om运行优化器
osdmaptool om --read out.txt --read-pool <pool name> [--vstart]强烈建议您在运行均衡器之前运行容量均衡器以确保最佳结果。有关如何在集群中均衡容量的详细信息,请参阅使用 pg-upmap。
应用更改
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 映射并可能影响读取性能(这不包括任何数据移动)。
要删除特定的 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)。
按照以下步骤确认此场景
确认您的集群包含
pg-upmap-primary映射
ceph osd dump | grep "pg_upmap_primary"
检查内核日志中是否存在此错误消息
$ 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 之前,您必须删除映射才能成功执行挂载。您可以使用以下命令执行此操作
如果使用均衡器模块,请将模式更改回不使用
pg-upmap-primary的模式。这可以防止创建额外的映射
ceph balancer mode upmap
删除所有
pg-upmap-primary映射
ceph osd rm-pg-upmap-primary-all