11.6. mClock 配置集
mClock 配置集是一个配置设置。当应用到正在运行的 Red Hat Ceph Storage 集群时,它允许将属于不同客户端类的 IOPS 操作节流,如后台恢复、清理
、snap trim
、client op
和 pg 删除
。
mClock 配置集使用容量限制和用户选择的 mClock 配置集类型,以确定低级 mClock 资源控制配置参数,并透明地应用它们。也会应用其他 Red Hat Ceph Storage 配置参数。低级 mClock 资源控制参数是保留、限制和权重,提供对资源共享的控制。mClock 配置集为每个客户端类型分配这些参数。
11.6.1. mClock 配置集类型
mClock 配置集可以分为 内置 和 自定义配置文件。
如果任何 mClock 配置集处于活跃状态,则禁用以下 Red Hat Ceph Storage 配置睡眠选项,这意味着它们被设置为 0
:
-
osd_recovery_sleep
-
osd_recovery_sleep_hdd
-
osd_recovery_sleep_ssd
-
osd_recovery_sleep_hybrid
-
osd_scrub_sleep
-
osd_delete_sleep
-
osd_delete_sleep_hdd
-
osd_delete_sleep_ssd
-
osd_delete_sleep_hybrid
-
osd_snap_trim_sleep
-
osd_snap_trim_sleep_hdd
-
osd_snap_trim_sleep_ssd
-
osd_snap_trim_sleep_hybrid
这是为了确保 mClock 调度程序能够确定何时从操作队列提取下一个操作并将其传送到操作序列。这会导致在所有客户端中都提供所需的 QoS。
Custom 配置集
这个配置集允许用户完全控制所有 mClock 配置参数。它应该谨慎使用,适用于了解 mClock 和 Red Hat Ceph Storage 相关配置选项的高级用户。
内置 配置集
启用 内置配置集时,mClock 调度程序会根据为每个客户端类型启用的配置集计算低级 mClock 参数,即保留、权重和限制。
mClock 参数根据前面提供的最大 Ceph OSD 容量计算。因此,在使用任何内置配置集时无法修改以下 mClock 配置选项:
-
osd_mclock_scheduler_client_res
-
osd_mclock_scheduler_client_wgt
-
osd_mclock_scheduler_client_lim
-
osd_mclock_scheduler_background_recovery_res
-
osd_mclock_scheduler_background_recovery_wgt
-
osd_mclock_scheduler_background_recovery_lim
-
osd_mclock_scheduler_background_best_effort_res
-
osd_mclock_scheduler_background_best_effort_wgt
osd_mclock_scheduler_background_best_effort_lim
注意这些默认值不能使用任何 config subsystem 命令(如
config set
、config daemon
或config tell
命令)进行修改。虽然上述命令报告成功,但 mclock QoS 参数将恢复到其相应的内置配置集默认值。
以下恢复和回填相关的 Ceph 选项会被覆盖为 mClock 默认值:
不要更改这些选项,因为内置配置集会根据它们进行了优化。更改这些默认值可能会导致意外的性能结果。
-
osd_max_backfills
-
osd_recovery_max_active
-
osd_recovery_max_active_hdd
-
osd_recovery_max_active_ssd
以下选项显示 mClock 默认值与当前默认值相同,以最大化前台客户端操作的性能:
osd_max_backfills
- 原始默认值
-
1
- mClock 默认
-
1
osd_recovery_max_active
- 原始默认值
-
0
- mClock 默认
-
0
osd_recovery_max_active_hdd
- 原始默认值
-
3
- mClock 默认
-
3
osd_recovery_max_active_sdd
- 原始默认值
-
10
- mClock 默认
-
10
以上 mClock 默认值可以在需要时修改,仅通过启用 osd_mclock_override_recovery_settings
(默认设置为 false
)来修改。请参阅 修改回填和恢复选项来 修改这些参数。
内置 配置集类型
用户可以从以下 内置 配置集类型中选择:
-
balanced
(默认) -
high_client_ops
-
high_recovery_ops
以下列表中提到的值表示分配给服务类型的 Ceph OSD 的总 IOPS 容量比例。
-
balanced
:
默认 mClock 配置集被设置为 balanced
,因为它代表了在客户端 IO 或恢复 IO 之间有妥协。它为客户端操作和后台恢复操作分配相等的保留或优先级。背景最佳操作会给出较低的保留时间,因此在竞争操作时需要更长的时间才能完成。此配置集满足集群的正常或稳定状态要求,当外部客户端性能要求不重要且仍需要在 OSD 中需要注意的其他后台操作时。
可能存在需要为客户端操作或恢复操作赋予更高的优先级的实例。要满足这些要求,您可以选择 high_client_ops
配置集来优先选择客户端 IO 或 high_recovery_ops
配置集,以优先恢复 IO。下面将进一步讨论这些配置集。
- 服务类型:client
- 保留
- 50%
- 限制
- MAX
- Weight
-
1
- 服务类型:后台恢复
- 保留
- 50%
- 限制
- MAX
- Weight
-
1
- 服务类型: background best-effort
- 保留
- MIN
- 限制
- 90%
- Weight
1
-
high_client_ops
-
与 Ceph OSD 中的后台操作相比,这个配置集通过为客户端操作分配更多保留和限制,从而优化客户端性能。例如,这个配置集可以被启用,以便以较慢的恢复成本为 I/O 密集型应用程序提供所需的性能。以下列表显示配置集设置的资源控制参数:
- 服务类型:client
- 保留
- 60%
- 限制
- MAX
- Weight
-
2
- 服务类型:后台恢复
- 保留
- 40%
- 限制
- MAX
- Weight
-
1
- 服务类型: background best-effort
- 保留
- MIN
- 限制
- 70%
- Weight
1
-
high_recovery_ops
-
与 Ceph OSD 中的外部客户端和其他后台操作相比,此配置集优化了后台恢复性能。
例如,管理员可以临时启用它,以便在非高峰期加速后台恢复。以下列表显示配置集设置的资源控制参数:
- 服务类型:client
- 保留
- 30%
- 限制
- MAX
- Weight
-
1
- 服务类型:后台恢复
- 保留
- 70%
- 限制
- MAX
- Weight
-
2
- 服务类型: background best-effort
- 保留
- MIN
- 限制
- MAX
- Weight
-
1
其它资源
- 有关 mClock 配置选项的更多信息,请参阅 mClock 配置选项。
11.6.2. 更改 mClock 配置集
默认 mClock 配置集设置为 balanced
。其它类型 的内置 配置集是 high_client_ops
和 high_recovery_ops
。
除非是高级用户,否则不建议使用 自定义配置集。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 对 Ceph 监控主机的 root 级别访问权限。
流程
登录到 Cephadm shell:
示例
[root@host01 ~]# cephadm shell
设置
osd_mclock_profile
选项:语法
ceph config set osd.OSD_ID osd_mclock_profile VALUE
示例
[ceph: root@host01 /]# ceph config set osd.0 osd_mclock_profile high_recovery_ops
这个示例更改了配置集,以便在
osd.0
上更快地恢复。注意为获得最佳性能,必须使用以下命令在所有 Ceph OSD 上设置配置集:
语法
ceph config set osd osd_mclock_profile VALUE
11.6.3. 在 内置配置集和 自定义配置集 间切换
以下步骤描述了从 内置 配置集切换到 自定义配置集,反之亦然。
如果要完全控制所有 mClock 配置选项,您可能希望切换到 自定义配置集。但是,建议您不要使用 自定义配置集,除非您是高级用户。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 对 Ceph 监控主机的 root 级别访问权限。
从 内置 配置集切换到 自定义配置集
登录到 Cephadm shell:
示例
[root@host01 ~]# cephadm shell
切换到 自定义配置集 :
语法
ceph config set osd.OSD_ID osd_mclock_profile custom
示例
[ceph: root@host01 /]# ceph config set osd.0 osd_mclock_profile custom
注意为获得最佳性能,必须使用以下命令在所有 Ceph OSD 上设置配置集:
示例
[ceph: root@host01 /]# ceph config set osd osd_mclock_profile custom
可选:切换到 自定义配置集 后,修改所需的 mClock 配置选项:
语法
ceph config set osd.OSD_ID MCLOCK_CONFIGURATION_OPTION VALUE
示例
[ceph: root@host01 /]# ceph config set osd.0 osd_mclock_scheduler_client_res 0.5
本例将特定 OSD
osd.0
的客户端保留 IOPS 比率改为 0.5 (50%)重要相应地更改其他服务的保留,如后台恢复和背景最佳,以确保保留总和不超过 OSD 的 IOPS 容量的最大比例(1.0)。
从 自定义配置集 切换到 内置 配置集
登录到 cephadm shell:
示例
[root@host01 ~]# cephadm shell
设置所需的 内置 配置集:
语法
ceph config set osd osd_mclock_profile MCLOCK_PROFILE
示例
[ceph: root@host01 /]# ceph config set osd osd_mclock_profile high_client_ops
本例在所有 Ceph OSD 上将内置的配置集设置为
high_client_ops
。确定数据库中现有的自定义 mClock 配置设置:
示例
[ceph: root@host01 /]# ceph config dump
删除之前确定的自定义 mClock 配置设置:
语法
ceph config rm osd MCLOCK_CONFIGURATION_OPTION
示例
[ceph: root@host01 /]# ceph config rm osd osd_mclock_scheduler_client_res
本例删除在所有 Ceph OSD 上设置的配置选项
osd_mclock_scheduler_client_res
。从中央配置数据库中删除所有现有的自定义 mClock 配置设置后,会应用与
high_client_ops
相关的配置设置。验证 Ceph OSD 上的设置:
语法
ceph config show osd.OSD_ID
示例
[ceph: root@host01 /]# ceph config show osd.0
其它资源
- 如需了解无法使用 内置 配置集修改的 mClock 配置选项列表,请参阅 mClock 配置集类型。
11.6.4. 在 mClock 配置集间临时切换
本节包含在 mClock 配置集间临时切换的步骤。
本节适用于高级用户或实验测试。不要在正在运行的存储集群中使用以下命令,因为它可能会造成意外的结果。
使用以下命令对 Ceph OSD 的配置更改是临时的,并在 Ceph OSD 重启时丢失。
使用本节中描述的命令覆盖的配置选项无法使用 ceph config set osd.OSD_ID
命令进一步修改。在重启给定的 Ceph OSD 前,这些更改才会生效。这是有意设计的,根据配置子系统设计。但是,仍可以使用这些命令临时进行进一步的修改。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 对 Ceph 监控主机的 root 级别访问权限。
流程
登录到 Cephadm shell:
示例
[root@host01 ~]# cephadm shell
运行以下命令来覆盖 mClock 设置:
语法
ceph tell osd.OSD_ID injectargs '--MCLOCK_CONFIGURATION_OPTION=VALUE'
示例
[ceph: root@host01 /]# ceph tell osd.0 injectargs '--osd_mclock_profile=high_recovery_ops'
本例覆盖
osd.0
上的osd_mclock_profile
选项。可选: 您可以使用上一个
ceph 的替代方案告诉 osd.OSD_ID injectargs
命令:语法
ceph daemon osd.OSD_ID config set MCLOCK_CONFIGURATION_OPTION VALUE
示例
[ceph: root@host01 /]# ceph daemon osd.0 config set osd_mclock_profile high_recovery_ops
也可以使用上述命令临时修改 自定义配置集 的单个 QoS 相关配置选项。
11.6.5. 使用 mClock 配置集降级和未替换的对象恢复率
降级对象恢复被归类到后台恢复存储桶中。在所有 mClock 配置集中,与错误放置对象恢复相比,降级对象恢复会获得更高的优先级,因为降级对象会出现数据安全问题。
回填或错误的对象恢复操作被归类到后台 best-effort bucket 中。根据 balanced
和 high_client_ops
mClock 配置集,后台 best-effort 客户端不受保留的限制(设置为零),但仅限于使用一部分参与的 OSD 容量(如果没有其他竞争服务)。
因此,随着 balanced
或 high_client_ops
配置集和其他后台竞争服务活跃,与之前的 WeightedPriorityQueue (WPQ)调度程序相比,回填率应该较慢。
如果需要更高的回填率,请按照以下部分中所述的步骤操作。
提高回填率
在使用 balanced
或 high_client_ops
配置集时更快地回填率,请按照以下步骤操作:
- 在回填期间,切换到 'high_recovery_ops' mClock 配置集。请参阅 更改 mClock 配置集 以达到此目的。回填阶段完成后,将 mClock 配置集切换到之前活跃的配置集。如果使用 'high_recovery_ops' 配置集在回填率中没有显著改进,请继续下一步。
- 将 mClock 配置集切回到之前活跃的配置集。
-
将 'osd_max_backfills' 修改为更高的值,例如
3
。请参阅 修改回填和恢复选项来 实现这一点。 - 回填完成后,按照步骤 3 中提到的步骤 3 将 'osd_max_backfills' 重置为默认值 1。
请注意,修改 osd_max_backfills
可能会导致其他操作,例如,客户端操作可能会在回填阶段遇到更高的延迟。因此,建议用户以较小的增量增加 osd_max_backfills
,以最大程度降低对集群中其他操作的性能影响。
11.6.6. 修改
回填和恢复
选项
使用 ceph config set
命令修改 backfills
和 recovery
选项。
mClock 配置集类型 列出了可以修改的回填或恢复选项。
本节适用于高级用户或实验测试。不要在正在运行的存储集群中使用以下命令,因为它可能会造成意外的结果。
仅为实验测试修改值,或者集群无法处理值,或使用默认设置显示性能不佳。
对 mClock 默认回填或恢复选项的修改受 osd_mclock_override_recovery_settings
选项的限制,该选项默认设置为 false
。
如果您试图在不将 osd_mclock_override_recovery_settings
设置为 true
的情况下修改任何默认回填或恢复选项,它会将选项重置为 mClock 默认值,并在集群日志中记录警告信息。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 对 Ceph 监控主机的 root 级别访问权限。
流程
登录到 Cephadm shell:
示例
[root@host01 ~]# cephadm shell
在所有 Ceph OSD 上,将
osd_mclock_override_recovery_settings
配置选项设为true
:示例
[ceph: root@host01 /]# ceph config set osd osd_mclock_override_recovery_settings true
设置所需的
回填
或恢复选项
:语法
ceph config set osd OPTION VALUE
示例
[ceph: root@host01 /]# ceph config set osd osd_max_backfills_ 5
等待几秒钟,并验证特定 OSD 的配置:
语法
ceph config show osd.OSD_ID_ | grep OPTION
示例
[ceph: root@host01 /]# ceph config show osd.0 | grep osd_max_backfills
在所有 OSD 上,将
osd_mclock_override_recovery_settings
配置选项重置为false
:示例
[ceph: root@host01 /]# ceph config set osd osd_mclock_override_recovery_settings false