2.8. CRUSH 可调项
Ceph 项目随着许多变化和新功能呈指数级增长。从 Ceph 的第一个商业支持主要版本 v0.48(Argonaut)开始,Ceph 提供了调整 CRUSH 算法的某些参数,即设置不在源代码中。
需要考虑以下几个重要点:
- 调整 CRUSH 值可能会导致在存储节点间切换一些 PG。如果 Ceph 集群已经存储了大量大量数据,准备进行一些要移动的数据。
-
ceph-osd和ceph-mon守护进程将在收到更新映射时立即要求新连接的功能位。但是,已连接过的客户端实际上已得到提高,如果它们不支持新功能,则会错误地发现。当您升级 Ceph Storage Cluster 守护进程时,请确定您更新 Ceph 客户端。 -
如果将 CRUSH 可调项设置为非传统值,之后再更改回旧值,则不需要
ceph-osd守护进程来支持该功能。但是,OSD 对等过程需要检查和理解旧 map。因此,如果集群之前已使用了非传统 CRUSH 值,则不应运行ceph-osd守护进程的旧版本,即使映射的最新版本已切换回使用传统默认值。
2.8.1. 调整 CRUSH 复制链接链接已复制到粘贴板!
在调优 CRUSH 之前,您应该确保所有 Ceph 客户端和所有 Ceph 守护进程都使用相同的版本。如果您最近已升级,请确保您已重启守护进程并重新连接客户端。
调整 CRUSH 可调项的最简单方法是通过更改到已知配置文件。这些是:
-
legacy:v0.47(pre-Argonaut)和更早版本中的传统行为。 -
argonaut: v0.48(Argonaut)发行版本支持的旧值。 -
bobtail:v0.56(Bobtail)发行版本支持的值。 -
firefly:v0.80(Firefly)发行版本支持的值。 -
hammer:v0.94(Hammer)发行版本支持的值。 -
Jewel:v10.0.2(Jewel)发行版本支持的值。 -
最佳:当前最佳值。 -
default:新集群的当前默认值。
您可以使用以下命令在正在运行的集群中选择配置集:
ceph osd crush tunables <profile>
# ceph osd crush tunables <profile>
这可能导致一些数据移动。
通常,您应该在升级后设置 CRUSH 可调项,或者收到警告。从 v0.74 开始,如果 CRUSH 可调项没有设置为其最佳值,Ceph 将发出一个健康警告,其最佳值为 v0.73。要进行这个警告,有两个选项:
在现有集群上调整可调项。请注意,这将导致一些数据移动(可能有 10%)。这是首选的路由,但应该小心谨慎,数据移动可能会影响性能。您可以使用以下方法启用最佳可调项:
ceph osd crush tunables optimal
# ceph osd crush tunables optimalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果事情发生不佳(例如,负载过大),或者存在客户端兼容性问题(旧的内核 cephfs 或 rbd 客户端,或者预先购买 librados 客户端),您可以切回到更早的配置集:
ceph osd crush tunables <profile>
# ceph osd crush tunables <profile>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,要恢复 pre-v0.48(Argonaut)值,请执行:
ceph osd crush tunables legacy
# ceph osd crush tunables legacyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以通过在
ceph.conf文件的[mon]部分添加以下选项,在不对 CRUSH 进行任何更改的情况下进行警告:mon warn on legacy crush tunables = false
mon warn on legacy crush tunables = falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要使更改生效,请重启 monitor,或者应用选项来运行 monitor:
ceph tell mon.\* injectargs --no-mon-warn-on-legacy-crush-tunables
# ceph tell mon.\* injectargs --no-mon-warn-on-legacy-crush-tunablesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.8.2. 调优 CRUSH,硬盘方式 复制链接链接已复制到粘贴板!
如果确保所有客户端都在运行最新的代码,可以通过提取 CRUSH 映射、修改值并将其注入集群中来调整可调项。
提取最新的 CRUSH map:
ceph osd getcrushmap -o /tmp/crush
ceph osd getcrushmap -o /tmp/crushCopy to Clipboard Copied! Toggle word wrap Toggle overflow 调整可调项。这些值显示为为我们测试的大型集群和小集群提供最佳行为。此外,您需要额外指定
--enable-unsafe-tunables参数到crushtool才能正常工作。请谨慎使用这个选项:crushtool -i /tmp/crush --set-choose-local-tries 0 --set-choose-local-fallback-tries 0 --set-choose-total-tries 50 -o /tmp/crush.new
crushtool -i /tmp/crush --set-choose-local-tries 0 --set-choose-local-fallback-tries 0 --set-choose-total-tries 50 -o /tmp/crush.newCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重新注入修改后的映射:
ceph osd setcrushmap -i /tmp/crush.new
ceph osd setcrushmap -i /tmp/crush.newCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.8.3. 旧值 复制链接链接已复制到粘贴板!
为了方便参考,可以使用以下内容设置 CRUSH 可调项的旧值:
crushtool -i /tmp/crush --set-choose-local-tries 2 --set-choose-local-fallback-tries 5 --set-choose-total-tries 19 --set-chooseleaf-descend-once 0 --set-chooseleaf-vary-r 0 -o /tmp/crush.legacy
crushtool -i /tmp/crush --set-choose-local-tries 2 --set-choose-local-fallback-tries 5 --set-choose-total-tries 19 --set-chooseleaf-descend-once 0 --set-chooseleaf-vary-r 0 -o /tmp/crush.legacy
同样,需要特殊的 --enable-unsafe-tunables 选项。如上所述,请在恢复到旧值后小心运行 ceph-osd 守护进程的旧版本,因为功能位不完全强制实施。