混沌测试的目的
混沌测试的目的在于确保系统在面对真实世界中的意外和不可预测事件时能够保持稳定运行。这类测试特别适用于复杂的分布式系统,如微服务架构和云原生应用。
ChaosBlade 简介
ChaosBlade 是阿里的一个开源的混沌工程测试工具,专门设计用于在各种环境下进行系统的故障模拟和鲁棒性测试。它支持多种类型的故障注入,包括 CPU、内存、磁盘IO、网络、应用进程等。
github地址:chaosblade-io/chaosblade: An easy to use and powerful chaos engineering experiment toolkit.(阿里巴巴开源的一款简单易用、功能强大的混沌实验注入工具) (github.com)
安装 ChaosBlade
获取 ChaosBlade 最新的 release 包,目前支持的平台是 linux/amd64 和 darwin/64,下载对应平台的包。
下载地址:Releases · chaosblade-io/chaosblade (github.com)
下载完成后解压即可,无需编译。解压后的目录如下:
├── bin
│ ├── chaos_burncpu
│ ├── chaos_burnio
│ ├── chaos_changedns
│ ├── chaos_delaynetwork
│ ├── chaos_dropnetwork
│ ├── chaos_filldisk
│ ├── chaos_killprocess
│ ├── chaos_lossnetwork
│ ├── jvm.spec.yaml
│ └── tools.jar
├── blade
└── lib
└── sandbox
其中 blade 是可执行文件,即 chaosblade 工具的 cli,混沌实验执行的工具。执行 ./blade help
可以查看支持命令有哪些。
快速开始
我们将通过两个实际例子来快速展示如何使用 ChaosBlade 进行混沌测试的
一、CPU 资源消耗实验
模拟 CPU 负载高的情况:
步骤 1: 创建实验
./blade create cpu fullload --cpu-percent 80
这个命令会使 CPU 使用率提升到约 80%,模拟出高负载的场景。
- 系统返回信息示例:
{"code":200,"success":true,"result":"b3a4ac3dd433dd4a"}
这里的 JSON 输出表示命令执行成功。"result" 字段包含了实验的id,这里是 b3a4ac3dd433dd4a
。
步骤 2: 观察和分析
在实验进行期间,使用系统监控工具(如 top
或 htop
)观察 CPU 使用率的变化。注意应用的性能表现和系统的稳定性。
步骤 3: 结束实验
完成观察后,使用返回的实验 ID 结束实验:
./blade destroy [实验ID]
二、网络延迟实验
在特定端口上模拟网络延迟:
./blade create network delay --time 1000 --interface eth0 --local-port 8080
这个命令在本地端口 8080 上创建 3000 毫秒的延迟。
步骤 2: 观察和分析
在实验进行期间,可以尝试访问通过该端口提供服务的应用,观察响应时间和服务质量。
步骤 3: 结束实验
实验结束后,使用返回的实验 ID 来停止模拟:
./blade destroy [实验ID]
常用的命令
- 创建实验:
blade create <资源类型> <动作> <参数>
- 查询实验:
blade status <实验ID>
- 销毁实验:
blade destroy <实验ID>
更多使用场景
接下来再简单介绍几个Chaosblade的其他常见使用场景:
场景一:模拟内存占用
# 在执行命令之前,先使用 top 命令查看内存使用信息,如下,总内存大小是 8G,使用了 7.6%
KiB Mem : 7.6/8010196
# 执行内存占用 50%
blade c mem load --mode ram --mem-percent 50
# 查看内存使用
KiB Mem : 50.0/8010196
# 执行内存占用 100%
KiB Mem : 99.6/8010196
# 保留 200M 内存,总内存大小 1G
blade c mem load --mode ram --reserve 200 --rate 100
KiB Mem : 1014744 total, 78368 free, 663660 used, 272716 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 209652 avail Mem
KiB Mem : 79.7/1014744 [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ]
场景二:模拟磁盘IO负载实验
# 在执行实验之前可先观察磁盘 io 读写负载
iostat -x -t 2
# 上述命令会 2 秒刷新一次读写负载数据,截取结果如下
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 2.50 0.00 2.00 0.00 18.00 18.00 0.00 1.25 0.00 1.25 1.25 0.25
# 主要观察 rkB/s、wkB/s、%util 数据。执行磁盘读 IO 负载高场景
blade create disk burn --read --path /home
# 执行 iostat 命令可以看到读负载增大,使用率达 99.9%。执行 blade destroy UID(上述执行实验返回的 result 值)可销毁实验。
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 3.00 223.00 2.00 108512.00 20.00 964.73 11.45 50.82 51.19 10.00 4.44 99.90
# 销毁上述实验后,执行磁盘写 IO 负载高场景
blade create disk burn --write --path /home
# 执行 iostat 命令可以看到写负载增大,使用率达 90.10%。
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 43.00 0.00 260.00 0.00 111572.00 858.25 15.36 59.71 0.00 59.71 3.47 90.10
# 可同时执行读写 IO 负载场景,不指定 path,默认值是 /
blade create disk burn --read --write
# 通过 iostat 命令可以看到,整个磁盘的 io 使用率达到了 100%
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 36.00 229.50 252.50 108512.00 107750.00 897.35 30.09 62.70 53.49 71.07 2.07 100.00
场景三:模拟杀进程实验文章来源:https://www.toymoban.com/news/detail-767121.html
# 删除包含 SimpleHTTPServer 关键词的进程
blade create process kill --process SimpleHTTPServer
# 删除 java 进程
blade create process kill --process-cmd java
# 指定信号量和本地端口杀进程
blade c process kill --local-port 8080 --signal 15
# 执行前
netstat -tanp | grep 8080
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 10764/java
# 执行后此进程已不存在
更多的使用场景可以参考官方的文档:混沌工程实验类型 | ChaosBlade文章来源地址https://www.toymoban.com/news/detail-767121.html
到了这里,关于快速上手:混沌测试工具ChaosBlade的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!