Mimic 中的新功能:iostat 插件

2018年6月29日 lenz

(本文为客座文章,作者是SUSE的 Mohamad Gebai,他开发了 iostat 插件)

Ceph 的 Mimic 版本带来了一个用于监控 Ceph 集群活动的小而有用的功能:iostat 命令,它以 Ceph 管理器插件 的形式出现。iostat 模块默认在新部署的集群上启用,但在通过升级从旧版本集群过来的集群上保持禁用状态。要启用 iostat 插件,请运行

$ ceph mgr module enable iostat

该插件非常易于使用,只需从命令行调用它即可。让我们看一下 iostat 命令的输出

$ ceph iostat +-----------+----------+-----------+-----------+------------+------------+ | 读取 | 写入 | 总计 | 读取 IOPS | 写入 IOPS | 总计 IOPS | +-----------+----------+-----------+-----------+------------+------------+ | 157 MiB/s | 20 MiB/s | 177 MiB/s | 39 | 10 | 49 | | 157 MiB/s | 20 MiB/s | 177 MiB/s | 39 | 10 | 49 | | 157 MiB/s | 20 MiB/s | 177 MiB/s | 39 | 10 | 49 | | 325 MiB/s | 51 MiB/s | 376 MiB/s | 81 | 25 | 106 | | 325 MiB/s | 51 MiB/s | 376 MiB/s | 81 | 25 | 106 | | 325 MiB/s | 51 MiB/s | 376 MiB/s | 81 | 25 | 107 | | 325 MiB/s | 51 MiB/s | 376 MiB/s | 81 | 25 | 107 | | 325 MiB/s | 51 MiB/s | 376 MiB/s | 81 | 25 | 106 | | 478 MiB/s | 83 MiB/s | 562 MiB/s | 119 | 41 | 161 | | 478 MiB/s | 83 MiB/s | 562 MiB/s | 119 | 41 | 161 | | 321 MiB/s | 62 MiB/s | 384 MiB/s | 80 | 31 | 111 | | 321 MiB/s | 62 MiB/s | 384 MiB/s | 80 | 31 | 111 | | 467 MiB/s | 93 MiB/s | 561 MiB/s | 116 | 46 | 163 | | 467 MiB/s | 93 MiB/s | 561 MiB/s | 116 | 46 | 163 | | 300 MiB/s | 62 MiB/s | 362 MiB/s | 75 | 31 | 106 |

这是输出的简短录制

此命令的结果与您在 ceph -s 中看到的结果相同。您可以选择性地传递 period 参数来配置打印统计信息的速率。默认周期为 1 秒。

请注意,以下部分更多的是为了教育目的。

通过查看 iostat 的输出,会发现相同的数字在 2 到 4 次之间重复出现,这可能意味着统计信息没有像 iostat 命令打印的那么频繁地更新。这是正确的假设。OSD 将它们的统计信息结合起来以服务请求,并定期将它们发送到管理器。管理器将这些统计信息保存在内存中,直到下一次刻度,然后对它们进行编译、聚合并用于更新整个集群的统计信息。这意味着如果您想获得更准确的 iostat 统计信息,您需要增加 OSD 到 mgr 更新频率和 mgr 刻度频率。前者由 mgr_stats_period 选项控制(默认值为 5 秒),后者由 mgr_tick_period 控制(默认值为 2 秒)。

ceph.conf 中设置以下选项(并重新启动节点)后

[mgr] mgr stats period = 1 mgr tick period = 1

我们得到以下 iostat 输出

$ ceph iostat +-------+----------+----------+-----------+------------+------------+ | 读取 | 写入 | 总计 | 读取 IOPS | 写入 IOPS | 总计 IOPS | +-------+----------+----------+-----------+------------+------------+ | 0 B/s | 42 MiB/s | 42 MiB/s | 0 | 21 | 21 | | 0 B/s | 52 MiB/s | 52 MiB/s | 0 | 26 | 26 | | 0 B/s | 50 MiB/s | 50 MiB/s | 0 | 25 | 25 | | 0 B/s | 54 MiB/s | 54 MiB/s | 0 | 27 | 27 | | 0 B/s | 55 MiB/s | 55 MiB/s | 0 | 27 | 27 | | 0 B/s | 72 MiB/s | 72 MiB/s | 0 | 36 | 36 | | 0 B/s | 76 MiB/s | 76 MiB/s | 0 | 38 | 38 | | 0 B/s | 76 MiB/s | 76 MiB/s | 0 | 38 | 38 | | 0 B/s | 85 MiB/s | 85 MiB/s | 0 | 42 | 42 | | 0 B/s | 87 MiB/s | 87 MiB/s | 0 | 43 | 43 |

iostat 命令现在打印更及时的统计信息。但是,您可能不想增加这些速率。更新统计信息并在管理器上强制刻度会增加开销,并且可能导致不需要的副作用,例如更高的 CPU 使用率。此外,这些统计信息并非用于高性能计算环境,而是为了更全面地了解集群的活动。如果您想避免 iostat 输出中的重复行,更简单更安全的选择是增加它打印集群统计信息的速率

$ ceph iostat -p 5

这将每 5 秒打印一次 IO 统计信息。