虚拟机在线迁移过程中的故障注入

文章目录
  1. 1. 前言
  2. 2. 故障注入
    1. 2.1. stress
    2. 2.2. netem

前言

《虚拟机在线迁移的性能统计》一文中,已经找到了虚拟机迁移过程中性能统计的方法,可以统计出迁移时间、停机时间、迁移数据量等指标。

而实际生产环境是复杂的,所以我们想模拟一些环境,看看这些环境(故障)对于虚拟机迁移性能的影响。本文就来研究一下CPU故障、内存故障、磁盘故障、网络故障等的模拟方法。

故障注入

本次故障注入主要有CPU故障、内存故障、磁盘故障、网络故障。请教了卢澄志同学,对于CPU故障、内存故障、磁盘故障的模拟,使用stress或者stress-ng,参考Linux 压力测试软件 Stress 使用指南stress-ng:模拟特定的cpu百分比;对于网络故障的模拟,使用netem,参考使用 tc netem 模拟网络异常netem wiki

故障注入有两个大的思路:一个是注入到被迁移的虚拟机,另一个是注入到宿主机。

stress

1、安装stress-ng
apt-get install stress-ng

2、产生3个CPU进程1分钟后关闭
stress-ng --cpu 3 --verbose --timeout 1m

3、产生2个10MB的内存进程1分钟后关闭
stress-ng --vm 2 --vm-bytes 10M --vm-keep --timeout 1m

4、产生3个IO进程1分钟后关闭
stress-ng --io 3 --timeout 1m

netem

在Ubuntu16中,tc netem不需要安装,系统自带。

1、模拟延迟传输
tc qdisc add dev eth0 root netem delay 100ms
报文延迟 100ms 发送。

tc qdisc replace dev eth0 root netem delay 100ms 20ms
报文延迟的时间在 100ms ± 20ms 之间,具体值随机选择。

2、模拟丢包率
tc qdisc change dev eth0 root netem loss 0.3% 25%
丢包率是 0.3%,并且当前报文丢弃的可能性和前一个报文 25% 相关。

3、模拟包重复
tc qdisc change dev eth0 root netem duplicate 50%
随机产生 50% 重复的包。

4、模拟包损坏
tc qdisc add dev eth0 root netem corrupt 2%
随机产生 2% 损坏的报文(在报文的随机位置造成一个比特的错误)。

5、模拟包乱序
tc qdisc change dev eth0 root netem reorder 50% gap 3 delay 100ms
固定的每隔一定数量的报文就乱序一次:每5个报文会正常发送,其他的报文延迟 100ms。

要想看到 ping 报文的乱序,我们要保证发送报文的间隔小于报文的延迟时间 100ms,这里用 -i 0.05 把发送间隔设置为 50ms。

tc qdisc change dev eth0 root netem reorder 50% 15% delay 300ms
使用概率来选择乱序的报文:50% 的报文会正常发送,其他报文(1-50%)延迟 300ms 发送。

6、取消模拟
tc qdisc del dev eth0 root