如何确定我的 Amazon EBS 卷是否处于微爆状态,并防止这种情况发生?

2 分钟阅读
0

我有一个 Amazon Elastic Block Store (Amazon EBS) 卷,这个卷没有超出其 Amazon CloudWatch 的吞吐量或 IOPS 上限。但是卷似乎遭遇了节流,延迟很高,队列长度也很长。

简短描述

CloudWatch 每隔一分钟收集一次样本,以此监控所有 Amazon EBS 卷类型的 IOPS(操作次数/秒)和吞吐量(字节/秒)。

如果 EBS 卷爆发高 IOPS 或高吞吐量的时间明显短于收集周期,则会发生微爆。由于卷爆发高 IOPS 或高吞吐量的时间短于收集周期,因此 CloudWatch 不会反映突增情况。

**示例:**预调配 IOPS 为 950 的 IO1 卷(收集周期为一分钟)包含一个在五秒钟内推送 1,000 IOPS 的应用程序。当应用程序达到卷的 IOPS 限制时,Amazon EBS 会对其进行限制。此时,该卷无法处理工作负载,导致队列长度增加、延迟时间变长。

CloudWatch 没有显示该卷突破了 IOPS 限制,因为收集周期为 60 秒。仅在 5 秒钟内发生了 1,000 IOPS。在一分钟收集周期的剩余 55 秒内,该卷保持空闲状态。这意味着整整一分钟内的 VolumeReadOps+VolumeWriteOps 数量为 5000 次(1000*5 秒)。这相当于在一分钟内平均有 83.33 IOPS(5000/60 秒)。通常不用担心这个平均值。
在这种情况下,相同采样时间的 VolumeIdleTime 为 55 秒,因为在收集周期的剩余时间里,卷处于空闲状态。这意味着该采样时间的 5,000 次操作 (VolumeReadOps+VolumeWriteOps) 仅在五秒钟内完成。如果将 5,000 除以 5 来计算平均 IOPS,则得到 1,000 IOPS。容量上限为 1,000 IOPS。

要确定您的卷是否出现微爆,请执行以下操作:

  1. 使用 CloudWatch 指标来鉴别可能发生的微爆情况。
  2. 使用 CloudWatch 获取微爆事件。
  3. 使用操作系统级工具确认微爆。
  4. 根据应用程序的需求更改卷大小或类型,以防微爆。

解决方法

使用 CloudWatch 指标来鉴别可能发生的微爆情况

  1. 检查 VolumeIdleTime 指标。此指标表示在指定时间段内未提交任何读取或写入操作的总时长(单位:秒)。如果 VolumeIdleTime 数值较高,则该卷将在收集期的大部分时间内保持空闲状态。如果同一采样时间的 IOPS 或吞吐量足够高,则表明可能发生了微爆。
    除了适用于吞吐量的 VolumeIdleTime 指标之外,还有 VolumeReadBytesVolumeWriteBytes 指标。
  2. 使用以下公式计算卷处于活动状态时达到的平均吞吐量:
    以“字节/秒”为单位的估计平均吞吐量 =(总和 (VolumeReadBytes) + 总和 (VolumeWriteBytes))/(周期 - 总和 (VolumeIdleTime))
    除了适用于 IOPS 的VolumeIdleTime 指标之外,还有 VolumeReadOpsVolumeWriteOps 指标。
  3. 使用以下公式计算卷处于活动状态时达到的平均 IOPS:
    以“操作次数/秒”为单位的估计平均 IOPS =(总和 (VolumeReadOps) + 总和 (VolumeWriteOps))/(周期 - 总和 (VolumeIdleTime))

使用 CloudWatch 获取微爆事件

  1. 打开 CloudWatch 控制台
  2. 选择全部指标
  3. 使用卷 ID 搜索受影响的卷。
  4. 要查看吞吐量指标,请先选择浏览,然后再添加 VolumeReadBytesVolumeWriteBytesVolumeIdleTime
  5. 选择绘成图表的指标
  6. 对于统计数据,选择总和,对于周期,选择 1 分钟
  7. 对于添加数学,选择从空表达式开始
  8. 表达式详细信息中,输入以“字节/秒”为单位的估计平均吞吐量公式的图形 ID。例如,(m1+m2)/(60-m3)。

如果公式计算出的值大于卷的最大吞吐量,则会发生微爆。要查看 IOPS 指标,请按照上述步骤操作,并在步骤 4 中添加 VolumeReadOpsVolumeWriteOpsVolumeIdleTime

使用操作系统级工具确认微爆

前面介绍的方法并不总能实时识别微爆。这是因为,即使 VolumeIdleTime 数值较低,卷仍有可能发生微爆。

**示例:**您的卷的激增水平已超出上限。之后,该卷的活跃程度会降至极低水平,但不会在收集期的剩余时间内完全处于闲置状态。尽管发生了微爆,但 VolumeIdleTime 指标并不能反映低活跃水平。

要确认微爆,请使用比 CloudWatch 更精细的操作系统级工具。

Linux

使用 iostat 命令。有关更多信息,请参阅 Linux 手册页网站上的 iostat(1)

1.    要以秒级粒度报告所有挂载卷的 I/O 统计信息,请运行以下命令:

iostat -xdmzt 1

**注意:**iostat 工具是 sysstat 软件包的一部分。如果找不到 iostat 命令,请运行以下命令,在 Amazon Linux AMI 上安装 sysstat:

$ sudo yum install sysstat -y

2.    要确定是否已达到吞吐量上限,请查看输出中的 rMB/swMB/s。如果 rMB/s + wMB/s 超出卷的最大吞吐量,则正在发生微爆。

要确定是否已达到 IOPS 上限,请查看输出中的 r/sw/s 。如果 r/s + w/s 超出卷的最大吞吐量,则正在发生微爆。

Windows

在 Windows 性能监视器中运行 perfmon 命令。有关更多信息,请参阅确定您的 IOPS 和吞吐量要求

根据应用程序的需求更改卷大小或类型,以防微爆

更改卷的类型和大小,使其适合所需的 IOPS 和吞吐量。有关卷类型及其相应 IOPS 和吞吐量限制的更多信息,请参阅 Amazon EBS 卷类型实例向所有已连接的 EBS 卷进行推送时,对可推送的 IOPS/吞吐量有一定限制

最佳做法是根据工作负载对您的卷进行基准测试,以验证哪些卷类型可以在测试环境中安全地容纳您的工作负载。有关更多信息,请参阅对 EBS 卷进行基准测试

AWS 官方
AWS 官方已更新 1 年前