磁盘IO Hang和磁盘IO高负载演练

IO Hang是指在进行读或写操作时,系统因为某些原因无法完成这些操作,导致进程或系统无法继续正常工作的一种情况。其可以由多种原因引起,包括硬件故障、驱动问题、文件系统错误、网络延迟或拥塞等。这对业务产生性能下降,服务延迟,数据一致性问题等风险。通过此演练场景验证系统在磁盘发生IO Hang时的告警和恢复情况。

使用限制

仅支持Alibaba Cloud Linux 3/2等兼容Cgroup v1Linux发行版。

实现原理

本方案使用云助手插件ACS-ECS-IoHang,使用Cgroups对磁盘进行限速。其中CgroupsLinux内核提供的一种可以限制单个或多个进程所使用资源的机制,可以对CPU、内存、IO资源、网络带宽实现精细化的控制。

使用指南

演练准备

请确保您的ECS实例已安装云助手Agent,并且云助手状态正常。具体操作,请参见查看云助手状态及异常状态处理

故障注入

  1. 登录ECS实例。

    具体操作,请参见使用Workbench工具以SSH协议登录Linux实例

  2. 使用具有sudo访问权限的用户,运行云助手插件ACS-ECS-IoHang

    sudo acs-plugin-manager --exec --plugin ACS-ECS-IoHang --params inject,disk=vda,[duartion=paramA]

    []内为可选故障注入参数,参数说明:

    • disk(必选):指定目标磁盘。您可以使用lsblk查看当前系统挂载的磁盘,如需对所有磁盘注入可指定disk=all。

    • duartion(可选):持续时间,单位为秒,默认为300。

  3. 查看故障注入是否成功。

    • 如显示以下结果,说明故障注入成功。

      image

    • 检查业务读写是否符合预期。

故障恢复

  • 方法一(推荐):等待超时自动恢复。

    说明

    默认300s后会自动退出,对系统盘注入,因场景特殊,可能发生无法自动恢复情况,请在控制台执行强制重启实例,具体操作,请参见重启实例

  • 方法二:仅对数据盘注入,在ECS实例中执行故障恢复命令。

    sudo acs-plugin-manager --exec --plugin ACS-ECS-IoHang --params recover

演练案例

使用lsblk命令查看和选择当前系统挂载的磁盘,以数据盘(vdb)为例,进行故障注入。

  1. 为了更直观地观察演练效果,模拟业务对磁盘vdb读取场景,如有实际业务可跳过。

    sudo dd if=/dev/vdb of=/dev/null

    iotop命令中查看当前IO占用情况。

    说明

    如未安装iotop工具,可执行以下命令安装。

    • Alibaba Cloud Linux 3/2、CentOS 7

      sudo yum install -y iotop
    • Ubuntu、Debian

      sudo apt install -y iotop

    image

  2. 执行故障注入。

    sudo acs-plugin-manager --exec --plugin ACS-ECS-IoHang --params inject,disk=vdb,duartion=120

    返回如下所示,显示注入参数和指定设备的主设备号和副设备号,表示注入成功。

    image

  3. 查看注入效果。

    查看iotop命令中查看IO占用情况,当前磁盘读取速度已跌至0 B/s。

    image

  4. 等待故障恢复。

    注入超时后,模拟的业务进程速度已恢复。

    image