稳定性——常见的故障注入方法

Posted by Ahan on February 22, 2025

常见的故障注入方法

进程故障

强制终止进程:kill -9 $pid

暂停进程的执行:kill -19 $pid

恢复暂停的进程:kill -18 $pid

容器故障

容器故障直接删除pod:kubectl delete pod $podname -n$ns

主机故障

  • 重启 reboot
  • 重启 reboot -f:正常情况下,系统在重启时会执行一系列操作,比如通知正在运行的进程、卸载文件系统等,以确保系统数据的完整性和一致性。但使用 reboot -f 时,这些步骤会被跳过,系统会立即重新启动。
  • 立即重启 echo ‘b’ > /proc/sysrq-trigger
  • crash重启 echo ‘c’ > /proc/sysrq-trigger

网络故障

网络故障注入会导致设备无法连接,从而故障无法恢复。网络故障注入需要通过编写脚本后台运行故障和恢复故障命令。

  • 可以使用 tc(Traffic Control)工具来模拟网络延迟、丢包、带宽。
    • 网络时延 tc qdisc add dev eth0 root netem delay 300ms
    • 网络丢包 tc qdisc add dev eth0 root netem loss 7%
    • 重复包 tc qdisc add dev eth0 root netem duplicate 1%
    • 取消网络故障注入 tc qdisc del dev eth0 root netem
  • ifconfig 模拟网络中断
    • 网络故障注入 Ifconfig eth0 down 不要手动执行此命令!
    • 网络故障恢复 Ifconfig eth0 up;systemctl restart networking.service 不要手动执行此命令!
  • Iptables
    • iptables -A INPUT -j DROP
    • iptables -D INPUT -j DROP
  • 网络io占用:使用iperf、netpef 产生网络压力。

磁盘故障

  • 普通盘模拟拔插
    1. ls -l /sys/block/ //查看磁盘的盘符id
    2. echo 1 > /sys/block/sdc/device/delete //针对hdd
    3. echo “- - -“ sudo tee /sys/class/scsi_host/host*/scan //恢复磁盘

    echo 1 > /sys/bus/pci/rescan

  • 慢盘模拟

使用 fio 工具模拟慢盘fio 是一个功能强大的工具,可以用来模拟各种类型的磁盘 I/O 操作。我们可以通过设置延迟和吞吐量来模拟慢盘。

fio –name=mytest –ioengine=rndwrite –size=1G –numjobs=4 –runtime=30m –time_based –rate=5m

模拟写入速度限制为 5MB/s,并且执行写入操作,创建 1GB 大小的文件。

其它故障注入工具

ChaosBlade 是阿里巴巴开源的一款简单易用、功能强大的混沌实验注入工具,旨在帮助开发和运维人员通过故障注入测试系统的稳定性,确保系统能够在遭遇各种故障时自动恢复。它支持多种故障类型,包括 CPU、内存、磁盘、网络等。

!https://user-images.githubusercontent.com/3992234/72340872-eb47c400-3703-11ea-830f-062e117c2e95.png

  1. 制造内存占用

./blade create mem load –mem-percent 95 –mode ram

  1. 制造CPU 占用

./blade create cpu load –cpu-percent 85

  1. 恢复故障

./blade destroy xxxx