10.6. mClock 配置集
mClock 配置集是一个配置设置。当应用到正在运行的 Red Hat Ceph Storage 集群时,它启用了属于不同客户端类的 IOPS 操作节流,如后台恢复、清理
、snap trim
、client op
和 pg 删除
。
mClock 配置集使用用户选择的容量限制和 mClock 配置集类型来确定低级别 mClock 资源控制配置参数,并透明应用它们。另外还会应用其他 Red Hat Ceph Storage 配置参数。低级 mClock 资源控制参数是保留、限制和权重,提供对资源共享的控制。mClock 配置集为每个客户端类型以不同的方式分配这些参数。
10.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 profile
此配置集允许用户完全控制所有 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 子系统命令(如
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
)来修改以上 mClock 默认值。请参阅修改回填和恢复选项来修改这些参数。
内置 配置集类型
用户可以从以下 内置 配置集类型中选择:
-
balanced
(默认) -
high_client_ops
-
high_recovery_ops
以下列表中提到的值代表为服务类型分配的 Ceph OSD 的总 IOPS 容量。
-
balanced
:
默认的 mClock 配置集被设置为 balanced
,因为它代表在优先级客户端 IO 或恢复 IO 之间的折衷。它为客户端操作和后台恢复操作分配相等的保留或优先级。后台最佳操作被授予较低的保留速度,因此在竞争操作时需要更长的时间才能完成。此配置集满足集群的正常或稳定状态要求,当外部客户端性能要求不关键时,还有其他后台操作仍需要注意到 OSD 中。
可能存在需要为客户端操作或恢复操作赋予更高优先级的实例。要满足这些要求,您可以选择 high_client_ops
配置集来优先选择客户端 IO 或 high_recovery_ops
配置集来优先恢复 IO。下面将进一步讨论这些配置集。
- 服务类型:客户端
- 保留
- 50%
- 限制
- MAX
- Weight
-
1
- 服务类型:后台恢复
- 保留
- 50%
- 限制
- MAX
- Weight
-
1
- 服务类型: background best-effort
- 保留
- MIN
- 限制
- 90%
- Weight
1
-
high_client_ops
-
与 Ceph OSD 中的后台操作相比,此配置集通过分配更多保留和限制来优化后台活动的客户端性能。例如,这个配置集可以启用来为 I/O 密集型应用程序提供所需的性能,以便在恢复较慢的时间内持续运行。以下列表显示了配置集设置的资源控制参数:
- 服务类型:客户端
- 保留
- 60%
- 限制
- MAX
- Weight
-
2
- 服务类型:后台恢复
- 保留
- 40%
- 限制
- MAX
- Weight
-
1
- 服务类型: background best-effort
- 保留
- MIN
- 限制
- 70%
- Weight
1
-
high_recovery_ops
-
与外部客户端和其他 Ceph OSD 中的后台操作相比,此配置集会优化后台恢复性能。
例如,管理员可以临时启用它,以便在非高峰期加速后台恢复。以下列表显示了配置集设置的资源控制参数:
- 服务类型:客户端
- 保留
- 30%
- 限制
- MAX
- Weight
-
1
- 服务类型:后台恢复
- 保留
- 70%
- 限制
- MAX
- Weight
-
2
- 服务类型: background best-effort
- 保留
- MIN
- 限制
- MAX
- Weight
-
1
其它资源
- 有关 mClock 配置选项的更多信息,请参阅 mClock 配置选项。
10.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
10.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 容量的最大比例(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 配置集类型。
10.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 的替代方案 tell 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 相关配置选项。
10.6.5. 使用 mClock 配置集降级和未替换的对象恢复率
降级对象恢复被归类到后台恢复存储桶中。在所有 mClock 配置集中,与 misplaced 对象恢复相比,降级对象会被赋予更高的优先级,因为降级对象会出现一个数据安全问题,而这些对象不会被错误覆盖。
回填或错误对象恢复操作被归类到后台 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
。请参阅 修改回填和恢复选项 来实现此目的。 - 回填完成后,"osd_max_backfills"可以按照第 3 步所述的相同步骤重置为默认值 1。
请注意,修改 osd_max_backfills
可能会导致其他操作,例如,客户端操作在回填阶段可能会遇到更高的延迟。因此,建议用户以较小的增量增加 osd_max_backfills
,以最小化对集群中其他操作的性能影响。
10.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