IO Hang是指在进行读或写操作时,系统因为某些原因无法完成这些操作,导致进程或系统无法继续正常工作的一种情况。其可以由多种原因引起,包括硬件故障、驱动问题、文件系统错误、网络延迟或拥塞等。这对业务产生性能下降,服务延迟,数据一致性问题等风险。通过此演练场景验证系统在磁盘发生IO Hang时的告警和恢复情况。
使用限制
仅支持Alibaba Cloud Linux 3/2等兼容Cgroup v1的Linux发行版。
实现原理
本方案使用云助手插件ACS-ECS-IoHang
,使用Cgroups对磁盘进行限速。其中Cgroups是Linux内核提供的一种可以限制单个或多个进程所使用资源的机制,可以对CPU、内存、IO资源、网络带宽实现精细化的控制。
使用指南
演练准备
请确保您的ECS实例已安装云助手Agent,并且云助手状态为正常。具体操作,请参见查看云助手状态及异常状态处理。
故障注入
登录ECS实例。
具体操作,请参见使用Workbench工具以SSH协议登录Linux实例。
使用具有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。
查看故障注入是否成功。
如显示以下结果,说明故障注入成功。
检查业务读写是否符合预期。
故障恢复
方法一(推荐):等待超时自动恢复。
说明默认300s后会自动退出,对系统盘注入,因场景特殊,可能发生无法自动恢复情况,请在控制台执行强制重启实例,具体操作,请参见重启实例。
方法二:仅对数据盘注入,在ECS实例中执行故障恢复命令。
sudo acs-plugin-manager --exec --plugin ACS-ECS-IoHang --params recover
演练案例
使用lsblk
命令查看和选择当前系统挂载的磁盘,以数据盘(vdb)为例,进行故障注入。
为了更直观地观察演练效果,模拟业务对磁盘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
执行故障注入。
sudo acs-plugin-manager --exec --plugin ACS-ECS-IoHang --params inject,disk=vdb,duartion=120
返回如下所示,显示注入参数和指定设备的主设备号和副设备号,表示注入成功。
查看注入效果。
查看iotop命令中查看IO占用情况,当前磁盘读取速度已跌至0 B/s。
等待故障恢复。
注入超时后,模拟的业务进程速度已恢复。