1. 前言
《虚拟机在线迁移的性能统计》一文中,已经找到了虚拟机迁移过程中性能统计的方法,可以统计出迁移时间、停机时间、迁移数据量等指标。
而实际生产环境是复杂的,所以我们想模拟一些环境,看看这些环境(故障)对于虚拟机迁移性能的影响。本文就来研究一下CPU故障、内存故障、磁盘故障、网络故障等的模拟方法。
2. 故障注入
本次故障注入主要有CPU故障、内存故障、磁盘故障、网络故障。请教了卢澄志同学,对于CPU故障、内存故障、磁盘故障的模拟,使用stress或者stress-ng,参考Linux 压力测试软件 Stress 使用指南和stress-ng:模拟特定的cpu百分比;对于网络故障的模拟,使用netem,参考使用 tc netem 模拟网络异常和netem wiki。
故障注入有两个大的思路:一个是注入到被迁移的虚拟机,另一个是注入到宿主机。
2.1. stress
1、安装stress-ngapt-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
2.2. 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