一个计算机技术爱好者与学习者

0%

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

1. 前言

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

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

2. 故障注入

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

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

2.1. 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

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