无论多忙,都要掌握混沌工程入门方法

简介: 无论多忙,都要掌握混沌工程入门方法

混沌工程入门

「ChaosBlade」 是阿里巴巴开源的一款遵循混沌工程实验原理,提供丰富故障场景实现,帮助分布式系统提升容错性和可恢复性的混沌工程工具,可实现底层故障的注入,特点是操作简洁、无侵入、扩展性强。


GitHub地址:https://github.com/chaosblade-io/chaosblade

下载 Chaosblade

获取 chaosblade 最新的 release 包,目前支持的平台是 linux/amd64 和 darwin/64,下载对应平台的包。


https://github.com/chaosblade-io/chaosblade/releases

下载完成后解压即可,无需编译。


使用 chaosblade

进入解压后的文件夹,可以看到以下内容:

├── 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

An easy to use and powerful chaos engineering experiment toolkit
Usage:
  blade [command]
Available Commands:
  create      Create a chaos engineering experiment
  destroy     Destroy a chaos experiment
  help        Help about any command
  prepare     Prepare to experiment
  revoke      Undo chaos engineering experiment preparation
  status      Query preparation stage or experiment status
  version     Print version info
Flags:
  -d, --debug   Set client to DEBUG mode
  -h, --help    help for blade
Use "blade [command] --help" for more information about a command.

执行你的第一个混沌实验

我们拿 CPU 满载(CPU 使用率 100%) 演练场景举例(!!注意,在不清楚影响面的情况下,切勿在生产系统机器上执行),执行以下命令实施实验:

./blade create cpu fullload

执行结果返回:

{"code":200,"success":true,"result":"7c1f7afc281482c8"}

通过 top 命令查看 CPU 使用率

CPU usage: 93.79% user, 6.20% sys, 0.0% idle

此时命令已经生效,停止混沌实验,执行:

./blade destroy 7c1f7afc281482c8

返回以下结果,表示停止实验成功

{"code":200,"success":true,"result":"command: cpu fullload --debug false --help false"}

再去观察 CPU 情况,CPU 负载已回到正常状态:

CPU usage: 6.36% user, 4.74% sys, 88.88% idle

一次 CPU 满载演练完成。

你的第二个混沌实验

这次实验,我们演练 Dubbo 应用,我们的需求是 consumer 调用 com.alibaba.demo.HelloService 服务下的 hello 接口延迟 3 秒。接下来我们下载所需要的 Dubbo Demo:

  • dubbo-provider

https://chaosblade.oss-cn-hangzhou.aliyuncs.com/demo/dubbo-provider-1.0-SNAPSHOT.jar

  • dubbo-consumer

https://chaosblade.oss-cn-hangzhou.aliyuncs.com/demo/dubbo-consumer-1.0-SNAPSHOT.jar

下载完成后,执行以下命令启动应用,注意必须先启动 dubbo-provider,然后再启动 dubbo-consumer:

# 启动 dubbo-provider
nohup java -Djava.net.preferIPv4Stack=true -Dproject.name=dubbo-provider -jar dubbo-provider-1.0-SNAPSHOT.jar > provider.nohup.log 2>&1 &
# 稍等 2 秒,然后启动 dubbo-consumer
nohup java -Dserver.port=8080 -Djava.net.preferIPv4Stack=true -Dproject.name=dubbo-consumer -jar dubbo-consumer-1.0-SNAPSHOT.jar > consumer.nohup.log 2>&1 &

访问 http://localhost:8080/hello?msg=world,返回以下信息,表示启动成功:

{
    msg: "Dubbo Service: Hello world"
}

接下来我们要使用 blade 工具进行混沌实验,在执行实验前,我们需要先执行 prepare 命令,挂载所需要的 java agent:

./blade prepare jvm --process dubbo-consumer

返回以下结果,表示实验准备成功:

{"code":200,"success":true,"result":"e669d57f079a00cc"}

我们开始实施混沌实验,我们的需求是 consumer 调用 com.alibaba.demo.HelloService 服务下的 hello 接口延迟 3 秒。我们执行 ./blade create dubbo delay -h 命令查看 dubbo 调用延迟的命令用法:

Usage:
  blade create dubbo delay
Flags:
      --appname string      The consumer or provider application name
      --consumer            To tag consumer role experiment.
  -h, --help                help for delay
      --methodname string   The method name in service interface
      --offset string       delay offset for the time
      --process string      Application process name
      --provider            To tag provider experiment
      --service string      The service interface
      --time string         delay time (required)
      --version string      the service version
Global Flags:
  -d, --debug   Set client to DEBUG mode

调用 com.alibaba.demo.HelloService 服务下的 hello 接口延迟 3 秒,我们执行以下命令:

./blade create dubbo delay --time 3000 --service com.alibaba.demo.HelloService --methodname hello --consumer --process dubbo-consumer

返回以下结果,表示执行成功;访问 http://localhost:8080/hello?msg=world 验证是否延迟 3 秒

{"code":200,"success":true,"result":"ec695fee1e458fc6"}

对实施实验的命令进行解析:

--time: 3000,表示延迟 3000 ms;单位是 ms
--service: com.alibaba.demo.HelloService, 表示调用的服务
--methodname: hello,表示服务接口方法
--consumer: 表示演练的是 dubbo consumer
--process: dubbo.consumer,表示对哪个应用进程实施混沌实验

停止当前延迟的混沌实验,再次访问 url 验证是否恢复正常:

./blade destroy ec695fee1e458fc6

不尽兴的话,我们再实施调用刚才那个服务抛异常,执行 ./blade create dubbo throwCustomException -h 命令查看帮助:

Throw custom exception with --exception option
Usage:
  blade create dubbo throwCustomException
Aliases:
  throwCustomException, tce
Flags:
      --appname string      The consumer or provider application name
      --consumer            To tag consumer role experiment.
      --exception string    Exception class inherit java.lang.Exception (required)
  -h, --help                help for throwCustomException
      --methodname string   The method name in service interface
      --process string      Application process name
      --provider            To tag provider experiment
      --service string      The service interface
      --version string      the service version
Global Flags:
  -d, --debug   Set client to DEBUG mode

和刚才延迟命令参数差不多,因为相同的参数是演练 dubbo 所需要的,不同的是没有了 --time,多了个 --exception 参数。我们模拟调用刚才的服务抛 java.lang.Exception 异常:

./blade create dubbo throwCustomException --exception java.lang.Exception --service com.alibaba.demo.HelloService --methodname hello --consumer --process dubbo-consumer

返回以下结果,访问 http://localhost:8080/hello?msg=world 验证是否异常

{"code":200,"success":true,"result":"09dd96f4c062df69"}

停止此次试验,再次访问请求,验证是否恢复:

./blade destroy 09dd96f4c062df69

最后,我们撤销刚才的实验准备,即卸载 Java Agent:

./blade revoke e669d57f079a00cc

如果找不到之前执行 prepare 返回的 UID 的话,执行 ./blade status --type prepare 命令查询:

{
        "code": 200,
        "success": true,
        "result": [
                {
                        "Uid": "e669d57f079a00cc",
                        "ProgramType": "jvm",
                        "Process": "dubbo.consumer",
                        "Port": "59688",
                        "Status": "Running",
                        "Error": "",
                        "CreateTime": "2019-03-29T16:19:37.284579975+08:00",
                        "UpdateTime": "2019-03-29T17:05:14.183382945+08:00"
                }
        ]
}
相关文章
|
Kubernetes 关系型数据库 MySQL
ChaosBlade常见问题之数据库进行故障注入报错ibdata1文件异常如何解决
ChaosBlade 是一个开源的混沌工程实验工具,旨在通过模拟各种常见的硬件、软件、网络、应用等故障,帮助开发者在测试环境中验证系统的容错和自动恢复能力。以下是关于ChaosBlade的一些常见问题合集:
451 1
|
Kubernetes 容灾 测试技术
ChaosBlade详细介绍
ChaosBlade 是阿里巴巴 2019 年开源的混沌工程项目,包含混沌工程实验工具 chaosblade 和混沌工程平台 chaosblade-box,旨在通过混沌工程帮助企业解决云原生过程中高可用问题。【2月更文挑战第11天】
2100 12
|
关系型数据库 MySQL Java
ChaosBlade常见问题之安装日志中一直报错某个数据库表不存在如何解决
ChaosBlade 是一个开源的混沌工程实验工具,旨在通过模拟各种常见的硬件、软件、网络、应用等故障,帮助开发者在测试环境中验证系统的容错和自动恢复能力。以下是关于ChaosBlade的一些常见问题合集:
486 0
|
消息中间件 安全 云计算
消息队列和应用工具产品体系-混沌工程简介
消息队列和应用工具产品体系-混沌工程简介
消息队列和应用工具产品体系-混沌工程简介
|
缓存 Linux 开发工具
CentOS 7- 配置阿里镜像源
阿里镜像官方地址http://mirrors.aliyun.com/ 1、点击官方提供的相应系统的帮助 :2、查看不同版本的系统操作: 下载源1、安装wget yum install -y wget2、下载CentOS 7的repo文件wget -O /etc/yum.
260321 0
|
存储 Java 开发者
Chaosblade
Chaosblade 是一个开源的混沌工程实验工具,用于在分布式系统中模拟故障和异常情况。在 Chaosblade 中,你可以使用规则来限制注入操作的条件。
1081 5
|
tengine 算法 安全
ChaosBlade 是阿里巴巴开源的混沌工程工具
【2月更文挑战第23天】ChaosBlade 是阿里巴巴开源的混沌工程工具
299 1
|
Kubernetes Shell Docker
ChaosBlade设置问题之无法设置加压时间如何解决
ChaosBlade 是一个开源的混沌工程实验工具,旨在通过模拟各种常见的硬件、软件、网络、应用等故障,帮助开发者在测试环境中验证系统的容错和自动恢复能力。以下是关于ChaosBlade的一些常见问题合集:
|
SQL 分布式计算 DataWorks
MaxCompute操作报错合集之表增加字段,提示创建表失败:DDL execute error, OdpsException: ODPS-0130071:[1,60] Semantic analysis exception - column,该怎么办
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
376 2
|
Kubernetes 安全 Go
对于阿里开源混沌工程工具chaosblade-box-agent心跳报错问题的分析与解决
摘要: 本文记录了一个由chaosblade-box平台后台发现的偶发的chaosblade-box-agent不发送心跳的问题,从报错日志入手,结合chaosblade-box-agent源码进行分析,最终解决问题并修复打包的过程。
771 7