1. 前言
《虚拟机在线迁移的性能统计》一文中,已经找到了虚拟机迁移过程中性能统计的方法,可以统计出迁移时间、停机时间、迁移数据量等指标。
而实际生产环境是复杂的,所以我们想模拟一些环境,看看这些环境(故障)对于虚拟机迁移性能的影响。本文就来研究一下CPU故障、内存故障、磁盘故障、网络故障等的模拟方法。
2. 故障注入
故障注入有两个大的思路:一个是注入到被迁移的虚拟机,另一个是注入到宿主机。
本次故障注入主要有CPU故障、内存故障、磁盘故障、网络故障。
故障模拟方法如下(感谢卢澄志同学提供模拟方法):
- 对于CPU故障、内存故障、磁盘故障的模拟,使用stress或者stress-ng
- 对于网络故障的模拟,使用netem
参考文档:
3. 安装使用stress-ng
3.1. stress-ng简介
stress-ng是一个压力测试工具,用于对计算机系统实施较大的工作负荷,以验证其健壮性和稳定性,或者用于检测可能存在的软硬件问题。
stress-ng 特点:
- 提供了超过 240 种压力测试。
- 各种压力测试可以单独运行,也可以以随机的方式混合运行,以便在真实场景下对系统进行压力测试。
- 还可以实施各种操作系统调用的压力测试。例如,可以选择进行 CPU 忙测试、硬盘测试、内存测试等。
- 通过调整测试时间、测试并发量等参数,可以根据需求定制不同的压力测试环境。
3.2. 安装stress-ng
1 | apt-get install stress-ng |
3.3. stress-ng使用示例
3.3.1. 模拟CPU压力
产生3个CPU进程1分钟后关闭
1 | stress-ng --cpu 3 --verbose --timeout 1m |
3.3.2. 模拟内存压力
产生2个10MB的内存进程1分钟后关闭
1 | stress-ng --vm 2 --vm-bytes 10M --vm-keep --timeout 1m |
3.3.3. 模拟IO进程压力
产生3个IO进程1分钟后关闭
1 | stress-ng --io 3 --timeout 1m |
4. 安装使用tc netem
4.1. tc netem简介
TC(Network Control) 是 Linux 系统中的 “流量控制” 工具,TC netem(network emulator)则是 TC 的一个扩展,用于模拟网络的不同条件,以便在各种环境下测试网络应用。
TC netem 可以模拟的网络条件包括但不限于:
- 延迟:模拟网络传输数据包之间的延迟,包括固定的延迟和随机的延迟。
- 丢包:模拟网络数据包在传输过程中的丢失。
- 乱序:模拟网络数据包接收顺序的混乱。
- 带宽限制:模拟某种预设的网络带宽条件。
- 包重复:模拟在网络中发送重复数据包的情况。
所有这些条件都可以单独或一起使用,以模拟几乎任何可能的网络环境。使用tc netem可以让开发者更有效地进行网络应用开发和测试,从而提高应用在实际网络环境下的性能和稳定性。
4.2. 安装tc netem
在Ubuntu16中,tc netem不需要安装,系统自带。
4.3. tc netem使用示例
4.3.1. 模拟延迟传输
报文延迟 100ms 发送
1 | tc qdisc add dev eth0 root netem delay 100ms |
报文延迟的时间在 100ms ± 20ms 之间,具体值随机选择
1 | tc qdisc replace dev eth0 root netem delay 100ms 20ms |
4.3.2. 模拟丢包率
丢包率是 0.3%,并且当前报文丢弃的可能性和前一个报文 25% 相关。
1 | tc qdisc change dev eth0 root netem loss 0.3% 25% |
4.3.3. 模拟包重复
随机产生 50% 重复的包
1 | tc qdisc change dev eth0 root netem duplicate 50% |
4.3.4. 模拟包损坏
随机产生 2% 损坏的报文(在报文的随机位置造成一个比特的错误)
1 | tc qdisc add dev eth0 root netem corrupt 2% |
4.3.5. 模拟包乱序
固定的每隔一定数量的报文就乱序一次:每5个报文会正常发送,其他的报文延迟 100ms
1 | tc qdisc change dev eth0 root netem reorder 50% gap 3 delay 100ms |
注意:要想看到 ping 报文的乱序,我们要保证发送报文的间隔小于报文的延迟时间 100ms,这里可以用 -i 0.05
把发送间隔设置为 50ms。
1 | ping -i 0.05 192.168.56.101 |
使用概率来选择乱序的报文:50% 的报文会正常发送,其他报文(1-50%)延迟 300ms 发送。
1 | tc qdisc change dev eth0 root netem reorder 50% 15% delay 300ms |
4.3.6. 取消模拟
1 | tc qdisc del dev eth0 root |