10.7. Ceph OSD 容量确定
总 IOPS 的 Ceph OSD 容量在 Ceph OSD 初始化期间自动决定。这可以通过运行 Ceph OSD bench 工具,并覆盖 osd_mclock_max_capacity_iops_[hdd, ssd]
选项的默认值,具体取决于设备类型。用户不需要其他操作或输入来设置 Ceph OSD 容量。
从自动化过程缓解非实际 Ceph OSD 容量
在某些情况下,Ceph OSD bench 工具可能会根据驱动器配置和其他环境相关条件显示不切的或有问题的结果。
要降低由于这种不切容量造成的性能影响,定义了几个阈值配置选项,具体取决于 OSD 设备类型并使用:
-
osd_mclock_iops_capacity_threshold_hdd
= 500 -
osd_mclock_iops_capacity_threshold_ssd
= 80000
您可以运行以下命令来验证这些参数:
[ceph: root@host01 /]# ceph config show osd.0 osd_mclock_iops_capacity_threshold_hdd 500.000000 [ceph: root@host01 /]# ceph config show osd.0 osd_mclock_iops_capacity_threshold_ssd 80000.000000
如果要手动基准测试 OSD 或手动调整 BlueStore throttle 参数,请参阅 手动基准测试 OSD。
您可以运行以下命令来在集群启动后验证 OSD 容量:
语法
ceph config show osd.N osd_mclock_max_capacity_iops_[hdd, ssd]
示例
[ceph: root@host01 /]# ceph config show osd.0 osd_mclock_max_capacity_iops_ssd
在上例中,您可以查看 Red Hat Ceph Storage 节点上的 osd.0
的最大容量,其底层设备是 SSD。
执行以下自动步骤:
回退到使用默认 OSD 容量
如果 Ceph OSD bench 工具报告超过上述阈值的测量,则回退机制将恢复到 osd_mclock_max_capacity_iops_hdd
或 osd_mclock_max_capacity_iops_ssd
的默认值。阈值配置选项可以根据所使用的驱动器类型重新配置。
当测量超过阈值时,会记录集群警告:
示例
3403 Sep 11 11:52:50 dell-r640-039.dsal.lab.eng.rdu2.redhat.com ceph-osd[70342]: log_channel(cluster) log [WRN] : OSD bench result of 49691.213005 IOPS exceeded the threshold limit of 500.000000 IOPS for osd.27. IOPS capacity is unchanged at 315.000000 IOPS. The recommendation is to establish the osd's IOPS capacity using other benchmark tools (e.g. Fio) and then override osd_mclock_max_capacity_iops_[hdd|ssd].
如果默认容量无法准确代表 Ceph OSD 容量,则强烈建议您使用首选工具运行自定义基准,如驱动器上的 Fio,然后覆盖 osd_mclock_max_capacity_iops_[hdd, ssd]
选项,如 指定最大 OSD 容量 中所述。
其它资源
- 请参阅 手动基准测试 OSD 以手动基准测试 Ceph OSD 或手动调整 BlueStore throttle 参数。
-
有关
osd_mclock_max_capacity_iops_[hdd, ssd]
和osd_mclock_iops_capacity_threshold_[hdd, ssd]
选项的更多信息,请参阅 mClock 配置选项。
10.7.1. 验证 OSD 的容量
您可以在设置存储集群后验证 Ceph OSD 的容量。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- Ceph 监控主机的 root 级别访问权限。
流程
登录到 Cephadm shell:
示例
[root@host01 ~]# cephadm shell
验证 Ceph OSD 的容量:
语法
ceph config show osd.OSD_ID osd_mclock_max_capacity_iops_[hdd, ssd]
示例
[ceph: root@host01 /]# ceph config show osd.0 osd_mclock_max_capacity_iops_ssd 21500.000000
10.7.2. 手动基准测试 OSD
要手动对 Ceph OSD 进行基准测试,可以使用任何现有的基准测试工具,如 Fio。无论所使用的工具或命令是什么,以下步骤仍然保持不变。
分片和 BlueStore throttle 参数的数量会影响 mClock 操作队列。因此,务必要仔细设置这些值,以便最大程度提高 mclock 调度程序的影响。有关这些值的更多信息,请参阅 影响 mClock 操作队列的因素。
只有在您要覆盖 OSD 初始化期间自动确定的 Ceph OSD 容量时,才需要执行本节中的步骤。
如果您已经确定了基准数据并希望手动覆盖 Ceph OSD 的最大 OSD 容量,请跳至 指定最大 OSD 容量 部分。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- Ceph 监控主机的 root 级别访问权限。
流程
登录到 Cephadm shell:
示例
[root@host01 ~]# cephadm shell
Ceph OSD 基准:
语法
ceph tell osd.OSD_ID bench [TOTAL_BYTES] [BYTES_PER_WRITE] [OBJ_SIZE] [NUM_OBJS]
其中:
- TOTAL_BYTES: 要写入的字节数。
- BYTES_PER_WRITE :每个写入的块大小。
- OBJ_SIZE: 每个对象字节.
- NUM_OBJS :要写入的对象数。
示例
[ceph: root@host01 /]# ceph tell osd.0 bench 12288000 4096 4194304 100 { "bytes_written": 12288000, "blocksize": 4096, "elapsed_sec": 1.3718913019999999, "bytes_per_sec": 8956977.8466311768, "iops": 2186.7621695876896 }
10.7.3. 确定正确的 BlueStore 节流值
此可选部分详细介绍了用于确定正确的 BlueStore throttle 值的步骤。这些步骤使用默认的分片。
在运行测试前,清除缓存以获取准确的测量。使用以下命令清除每个基准之间的 OSD 缓存:
语法
ceph tell osd.OSD_ID cache drop
示例
[ceph: root@host01 /]# ceph tell osd.0 cache drop
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 对托管您要基准测试的 OSD 的 Ceph 监控节点的根级别访问权限。
流程
登录到 Cephadm shell:
示例
[root@host01 ~]# cephadm shell
在 OSD 上运行简单的 4KiB 随机写入工作负载:
语法
ceph tell osd.OSD_ID bench 12288000 4096 4194304 100
示例
[ceph: root@host01 /]# ceph tell osd.0 bench 12288000 4096 4194304 100 { "bytes_written": 12288000, "blocksize": 4096, "elapsed_sec": 1.3718913019999999, "bytes_per_sec": 8956977.8466311768, "iops": 2186.7621695876896 1 }
- 1
- 从
osd bench
命令的输出中获取的整体吞吐量。这个值是基准吞吐量,当默认的 BlueStore throttle 选项生效时。
- 请注意,总体吞吐量(即 IOPS )从上一命令的输出中获取。
如果目的是确定环境的 BlueStore 节流值,请将
bluestore_throttle_bytes
和bluestore_throttle_deferred_bytes
选项设置为 32 KiB,即 32768 Bytes:语法
ceph config set osd.OSD_ID bluestore_throttle_bytes 32768 ceph config set osd.OSD_ID bluestore_throttle_deferred_bytes 32768
示例
[ceph: root@host01 /]# ceph config set osd.0 bluestore_throttle_bytes 32768 [ceph: root@host01 /]# ceph config set osd.0 bluestore_throttle_deferred_bytes 32768
否则,您可以跳至下一部分 指定最大 OSD 容量。
使用 OSD bench 命令前,先运行 4KiB 随机写入测试:
示例
[ceph: root@host01 /]# ceph tell osd.0 bench 12288000 4096 4194304 100
- 注意输出的整体吞吐量,并将值与之前记录的基准吞吐量进行比较。
- 如果吞吐量与基准不匹配,请通过将 BlueStore 节流选项乘以 2 来提高 BlueStore 节流选项。
- 运行 4KiB 随机写入测试,将值与基准吞吐量进行比较,并将 BlueStore 节流选项乘以 2,直到获取的吞吐量非常接近基准值。
例如,在对具有 NVMe SSD 的机器进行基准测试期间,BlueStore 节流和延迟字节数都有一个 256 KiB 值,这决定了最大化 mClock 的影响。对于 HDD,对应的值为 40 MiB,其中整个吞吐量大致等于基准吞吐量。
对于 HDD,与 SSD 相比,BlueStore throttle 值应该较高。
10.7.4. 指定最大 OSD 容量
您可以覆盖 OSD 初始化过程中自动设置的最大 Ceph OSD 容量。
这些步骤是可选的。如果默认容量无法准确代表 Ceph OSD 容量,请执行以下步骤。
确保您首先确定基准数据,如 手动基准测试 OSD 中所述。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- Ceph 监控主机的 root 级别访问权限。
流程
登录到 Cephadm shell:
示例
[root@host01 ~]# cephadm shell
为 OSD 设置
osd_mclock_max_capacity_iops_[hdd, ssd]
选项:语法
ceph config set osd.OSD_ID osd_mclock_max_capacity_iops_[hdd,ssd] VALUE
示例
[ceph: root@host01 /]# ceph config set osd.0 osd_mclock_max_capacity_iops_hdd 350
本例将
osd.0
(其底层设备类型为 HDD)的最大容量设置为 350 IOPS。