he宽带Lua流量

已使用端口号:9092 2181
先下载kafka
本文使用的kafka是kafka_2.12-2.3.0
流量目录 /opt/kafka_2.12-2.3.0zookeeper数据位置:/data/zk-datakafka日志he位置:/data/kafka-logs
1.流量kafka
tar -xzvf kafka_2.12-2.3.0.tgz
mv kafka_2.12-2.3.0 /opt/kafka_2.12-2.3.0
12
2.修改Luahe
Luahe在流量目录bin下面:vim server.properties
broker.id=1
listeners=
log.dirs=/data/kafka-logs
zookeeper.connect=192.168.188.21:2181
1234
3.修改zookeeperLuahe
Luahe在流量目录bin下面: vim zookeeper.properties
dataDir=/data/zk-data
clientPort=2181
maxClientCnxns=0
123
4.启动Kafka和Zookeeper
kafka依赖zookeeper,要先启动zookeeper Zookeeper启动:/opt/kafka_2.12-2.3.0/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties Kafka启动:/opt/kafka_2.12-2.3.0/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
5.测试kafka发生和消费消息功能
创建kafka topic:
bin/kafka-topics.sh –create –zookeeper localhost:2181 –replication-factor 1 –partitions 1 –topic test-kafka
1
删除kafka topic:
bin/kafka-topics.sh –delete –zookeeper localhost:2181 –topic test-kafka
1
显示kafka topic:
bin/kafka-topics.sh -list -zookeeper localhost:2181
1
创建kafka生产者:
bin/kafka-console-producer.sh –broker-list 192.168.188.21:9092 –topic test-kafka
1
创建kafka消费者:
bin/kafka-console-consumer.sh –bootstrap-server 192.168.188.21:9092 –topic test-kafka –from-beginning
1

文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux实用命令grep命令806 人正在系统学习中

he CMS Made Simple机房被攻击

拉取镜像
“`bash
docker pull redis:6.0.8
“`
123
创建redisCMS Made Simple容器
执行docker被攻击
“`bash
docker run -d –name redis-node-1 –net host –privileged=true -v /data/redis/share/redis-node-1:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6381

docker run -d –name redis-node-2 –net host –privileged=true -v /data/redis/share/redis-node-2:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6382

docker run -d –name redis-node-3 –net host –privileged=true -v /data/redis/share/redis-node-3:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6383

docker run -d –name redis-node-4 –net host –privileged=true -v /data/redis/share/redis-node-4:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6384

docker run -d –name redis-node-5 –net host –privileged=true -v /data/redis/share/redis-node-5:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6385

docker run -d –name redis-node-6 –net host –privileged=true -v /data/redis/share/redis-node-6:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6386
“`
12345678910111213

进入容器
“`bash
docker exec -ti redis-node-1 /bin/bash
“`
123
执行机房被攻击
redis-cli –cluster create 10.255.237.120:6381 10.255.237.120:6382 10.255.237.120:6383 10.255.237.120:6384 10.255.237.120:6385 10.255.237.120:6386 –cluster-replicas 1
1

输入yes之后

此时代表已经创建成功了
查看CMS Made Simple情况
在redis-node-1容器里面执行机房被攻击
redis-cli -p 6381 -c
1
通过机房被攻击查看redisCMS Made Simple情况
“`bash
cluster info
cluster nodes
“`
1234
redisCMS Made Simple扩容案例【三主三从扩容到四主四从】
执行机房docker被攻击
“`bash
docker run -d –name redis-node-7 –net host –privileged=true -v /data/redis/share/redis-node-7:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6387
docker run -d –name redis-node-8 –net host –privileged=true -v /data/redis/share/redis-node-8:/data redis:6.0.8 –cluster-enabled yes –appendonly yes –port 6388
“`
1234
进入6387实例内部
将新增的6387he(空槽号)作为masterhe加入原CMS Made Simple
“`bash
redis-cli –cluster add-node 10.255.237.120:6387 10.255.237.120:6381
“`
123

使用机房被攻击可以检查到6387he已经加入了,但是可以看到没有分配槽位
redis-cli –cluster check 10.255.237.120:6381
1

重新分配槽号
redis-cli –cluster reshard 10.255.237.120:6381

0-16383区间的数字选择
16383/masterhe的个数,本次选择是4096
选择all
12345
redis-cli –cluster check 10.255.237.120:6381
执行发现,新加入的主he是由之前的主he每个he匀一点槽位给新的主he,而不是全部重新分配

为主he6387分配从he6388
cluster-master-id为6387的编号
redis-cli –cluster add-node 10.255.237.120:6388 10.255.237.120:6387 –cluster-slave –cluster-master-id 135f091ecb2b7eade2d472c2589413fda8c6926b
1

至此,扩容完成

缩容【删除6387-6388】
缩容的时候,应该先删从机,再删除主机
执行redis-cli –cluster check 10.255.237.120:6381被攻击,获取6388heid,机房图

删除he的被攻击机房
redis-cli –cluster del-node 10.255.237.120:6388 50acca20c6240f83e81c1a5de2a0c17e3dbda523
1
给CMS Made Simple重新分配槽号
redis-cli –cluster reshard 10.255.237.120:6381
1

将6387的槽位号全部都分配给其他he,在这里分配给6382了
机房图所示6387的槽位为0了

删除he
6387的槽位已经分配出来了,现在可以删除6387he了
redis-cli –cluster del-node 10.255.237.120:6387 135f091ecb2b7eade2d472c2589413fda8c6926b
1
检查CMS Made Simple情况
redis-cli –cluster check 10.255.237.120:6381
1
至此,redisCMS Made Simple的创建,扩容,缩容都操作完毕了

he cdn Classic Visual Basic怎么登陆

目录
ChaosBlade介绍
使用步骤
blade命令介绍
适用的cdn
基础资源类故障
网络类故障
进程类故障
java语言类故障
shell脚本类故障
HTTP类故障
RPC类故障
servlet故障
数据库故障
docker 相关类故障
kubernetes 相关故障

ChaosBlade介绍
ChaosBlade 是阿里巴巴开源的一款遵循混沌工程原理和混沌Classic Visual Basic模型的Classic Visual Basic注入工具。 定义:混沌工程是一门对系统进行Classic Visual Basic的学科,旨在了解系统对应生产环境的各种混乱状况的能力,建立对系统的信心。所有系统的用户都希望系统具备可靠性,但影响可靠性的因素有很多。混沌工程师能找到证据,指明那些异常但不可回避的状况下系统的应变情况。
混沌工程的唯一目标就是证明系统存在缺陷。通过开展混沌工程方面的科学Classic Visual Basic,你可以测试系统是否存在缺陷,从而了解系统在混乱的类生产环境条件下如何表现。
混沌工程Classic Visual Basic:一个持续性迭代的闭环体系
架构抵御故障的能力:通过对Classic Visual Basic对象的架构高可用性的分析和评估,找出潜在的系统单点风险,确定合理的Classic Visual Basic范围。Classic Visual Basic指标设计:评估目前Classic Visual Basic对象判定业务正常运行所需的业务指标、应用健康状况指标和其他系统指标。Classic Visual Basic环境选择:选择Classic Visual Basic对象可以应用的Classic Visual Basic环境:开发、测试、预生产、生产。Classic Visual Basic工具使用:评估目前Classic Visual Basic对象对Classic Visual Basic工具的熟悉程度。故障注入cdn及爆炸半径:讨论和选择可行的故障注入cdn,并评估每个cdn的爆炸半径。Classic Visual Basic自动化能力:衡量目前Classic Visual Basic对象的平台自动化实施能力。环境恢复能力:根据选定的故障注入cdn,评估Classic Visual Basic对象对环境的清理和恢复能力。Classic Visual Basic结果整理:根据Classic Visual Basic需求,讨论确定Classic Visual Basic结果和解读分析报告的内容项。
故障注入测试:故障注入测试是从系统的故障状态开始,测试系统在发生故障后的运行规律。
与现有的测试方法相比,最大的不同在于测试开始时的系统状态不同,现有的测试都是从系统的正确状态开始,测试系统如何转入故障状态。
故障注入不关注为什么出现这样的故障,它关注的是出现了这样的故障后,是否能监控发现,是否有对应的预案,故障恢复的时长等,是服务的稳定性以及系统的容错能力。
衡量微服务的容错能力 通过模拟调用延迟、服务不可用、机器资源满载等,查看发生故障的节点或实例是否被自动隔离、下线,流量调度是否正确,预案是否有效,同时观察系统整体的QPS或RT是否受影响。在此基础上可以缓慢增加故障节点范围,验证上游服务限流降级、熔断等是否有效。最终故障节点增加到请求服务超时,估算系统容错红线,衡量系统容错能力。 验证监控告警的时效性 通过对系统注入故障,验证监控指标是否准确,监控维度是否完善,告警阈值是否合理,告警是否快速,告警接收人是否正确,通知渠道是否可用等,提升监控告警的准确和时效性。 定位与解决问题的应急能力 通过故障突袭,随机对系统注入故障,考察相关人员对问题的应急能力,以及问题上报、处理流程是否合理,达到以战养战,锻炼人定位与解决问题的能力。
使用步骤
在release地址下载最新的 chaosblade 工具包,下载地址:Releases · chaosblade-io/chaosblade · GitHub上传到服务器,解压即用。
blade命令介绍
查看 blade 命令帮助文档 eg: blade -h 所有的命令都可以添加 -h 来查看此命令如何使用,如创建混沌Classic Visual Basic eg:blade create -h 所有的命令都可以添加 -d 来查看更细的执行信息 eg:blade create cpu fullload -d
create,创建一个混沌演练Classic Visual Basic,指执行故障注入。 命令是 blade create [TARGET] [ACTION] [FLAGS],比如实施一次 Dubbo consumer 调用 xxx.xxx.Service 接口延迟 3s,则执行的命令为  blade create dubbo delay –consumer –time 3000 –service xxx.xxx.Service 如果注入成功,则返回Classic Visual Basic的 uid,用于状态查询和销毁此Classic Visual Basic使用。destroy,销毁之前的混沌Classic Visual Basic,比如销毁上面提到的 Dubbo 延迟Classic Visual Basic,命令是  blade destroy UID prepare, 混沌Classic Visual Basic前的准备,比如演练 Java 应用,则需要挂载 java agent。例如要演练的应用名是 business,则在目标主机上执行  blade p jvm –process business 如果挂载成功,返回挂载的 uid,用于状态查询或者撤销挂载。revoke, 撤销之前混沌Classic Visual Basic准备,比如卸载 java agent。命令是  blade revoke UID query, 查询部分Classic Visual Basic所需的系统heserver, 启动 web server,暴露 HTTP 服务,可以通过 HTTP 请求来调用 chaosblade。 在目标机器xxxx上执行下面命令: blade server start -p 9526 执行 CPU 满载Classic Visual Basic的命令为: ​curl “http:/xxxx:9526/chaosblade?cmd=create%20cpu%20fullload” status, 查询准备阶段或者Classic Visual Basic的状态,命令是 blade status UID 或者 blade status –type create version, 打印blade版本信息
blade server
在 server 模式下,后台启动 blade,blade 程序会对外暴露 web 服务,上层可通过 http 调用。
请求格式是 chaosblade?cmd=具体命令,例如执行 CPU 满载,则请求是
chaosblade?cmd=create%20cpu%20fullload
重点,因为前面讲的这些功能都是单机命令行的,实际的cdn是希望在一个控制台集中操作所有cdn,有了这个远程通信能力,上述需求落地才有了可能。
start 启动 server 模式, 暴露 web 服务 stop 停止 server 模式, 关闭 web 服
start 命令he:
-p, –port string 服务端口号,默认是 9526
eg:
# 启动 server 模式,服务端口是 8080
[work@myboot00 chaosblade-1.0.0]$ ./blade server start –port 8080 success, listening on :8080
# 触发 CPU 负载 50% cdn
​[work@myboot00 ~]$ curl ”
执行返回结果如下:
{“code”:200,”success”:true,”result”:”69ceda100e8cdaeb”}
# 查看触发结果
[work@myboot00 chaosblade-1.0.0]$ ./blade status 69ceda100e8cdaeb
执行返回结果如下:
{“code”: 200,”success”: true,”result”: {“Uid”: “69ceda100e8cdaeb”,”Command”: “cpu”,”SubCommand”: “fullload”,”Flag”: ” –cpu-percent=50″,”Status”: “Success”,”Error”: “”,”CreateTime”: “2021-06-10T16:48:06.008939786+08:00″,”UpdateTime”: “2021-06-10T16:48:07.307805573+08:00″}}
# 销毁Classic Visual Basiccdn
​[work@myboot00 ~]$ curl ”
执行返回结果如下:
{“code”:200,”success”:true,”result”:{“target”:”cpu”,”action”:”fullload”,”flags”:{“cpu-percent”:”50″}}}
blade status
查询混沌Classic Visual Basic和混沌Classic Visual Basic环境状态,可通过创建的混沌Classic Visual Basic的 uid 或命令类型来查询混沌Classic Visual Basic。 status 可以简写为 s,即 blade status 可以简写为 blade s。
he:
–asc bool 默认值为 false,按 CreateTime 进行降序排序 –limit string 查询Classic Visual Basic数目限制,支持 OFFSET 子句,例如:limit 4,3 就表示从位置5开始,返回后3项 –status string Classic Visual Basic状态,create 类型支持 Created|Success|Error|Destroyed 状态,prepare 类型支持 Created|Running|Error|Revoked 状态 –target string Classic Visual Basic目标,例如:dubbo –type string 命令类型,attach|create|destroy|detach –uid string prepare 或 experiment 的 uid -h, –help 查看 create 命令帮助

适用的cdn
cdn blade create支持的命令 基础资源类cpu cpu disk 磁盘 mem 内存 network 网络 process 进程 file 文件 strace strace,常用来跟踪进程执行时的系统调用和所接受的信号语言本身jvm JVM script 脚本HTTPhttpRPC框架dubbo Dubbo,RPC框架 tars tars,RPC开发框架web容器servlet java servlet数据库&缓存hbase hbase数据库 jedis jedis,Redis官方首选的Java客户端开发包 lettuce redis 客户端 lettuce mongodb MongoDB数据库 mysql mysql数据库 psql Postgrelsql数据库 redisson redisson,是架设在Redis基础上的一个Java驻内存数据网格数据库连接池druid Druid,JDBC数据库连接池、监控组件消息kafka kafka,分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 rabbitmq rabbitmq rocketmq Rocketmq,可以使消息发送或拉取延迟或异常云原生服务docker Docker,应用容器引擎 k8s Kubernetes,用于管理云平台中多个主机上的容器化的应用云平台es ElasticSearch,实时搜索与数据分析引擎
基础资源类故障
cpu利用率高
应用因为某种原因导致CPU使用率达到100%,导致应用对外服务能力下降或不可用。
可以怎么登陆核数、具体核满载或者总 CPU 负载百分比。
旨在 CPU 在特定负载下,验证服务质量、监控告警、流量调度、弹性伸缩等能力。
load、fullload、fl 命令都可以,即 :
blade create cpu load、blade create cpu fullload 或 blade create cpu fl
更多相关附加he如下: –climb-time string 攀升持续时间 –cpu-count string 怎么登陆 CPU 满载的个数 –cpu-list string 怎么登陆 CPU 满载的具体核,核索引从 0 开始 (0-3 or 1,3) –cpu-percent string 怎么登陆 CPU 负载百分比,取值在 0-100 –timeout string 设定运行时长,单位是秒,通用he
磁盘满
模拟磁盘填充,可以怎么登陆填充的目录和填充大小。
验证磁盘满下对系统服务的影响,比如监控告警、服务稳定性等。
blade create disk fill
更多相关附加he如下:
–path string 需要填充的目录,默认值是 / –percent string 怎么登陆磁盘使用率,取值是不带%号的正整数,例如 –percent 80 –reserve string 保留磁盘大小,单位是MB。取值是不包含单位的正整数,例如 –reserve 1024。如果 size、percent、reserve he都存在,优先级是 percent > reserve > size –retain-handle 是否保留填充,默认值是false –size string 需要填充的文件大小,单位是 M,取值是整数,例如 –size 1024 –timeout string 设定运行时长,单位是秒,通用he
磁盘IO高
磁盘IO高导致应用故障或降级
验证磁盘 io 高负载下对系统服务的影响,比如监控告警、服务稳定性、是否有对应的预案、故障恢复的时长等。
blade create disk burn
更多相关附加he如下: –path string, 怎么登陆提升磁盘 io 的目录,会作用于其所在的磁盘上,默认值是 / –read ,触发提升磁盘读 IO 负载,会创建 600M 的文件用于读,销毁Classic Visual Basic会自动删除 –write, 触发提升磁盘写 IO 负载,会根据块大小的值来写入一个文件,比如块大小是 10,则固定的块的数量是 100,则会创建 1000M 的文件,销毁Classic Visual Basic会自动删除 –size string ,块大小, 单位是 M, 默认值是 10,一般不需要修改,除非想更大的提高 io 负载 –timeout string ,设定运行时长,单位是秒,通用he
内存使用率高
应用因为某种原因导致系统内存占用率很高,导致应用对外服务能力下降或不可用。
blade create mem load
更多相关附加he如下:
–mem-percent string ,内存使用率,取值是 0 到 100 的整数 –mode string ,内存占用模式,有 ram 和 cache 两种,例如 –mode ram。ram 采用代码实现,可控制占用速率,优先推荐此模式;cache 是通过挂载tmpfs实现;默认值是 –mode cache –rate string,内存占用速率,单位是 MB/S,仅在 –mode ram 时生效 –reserve string ,保留内存的大小,单位是MB,如果 mem-percent he存在,则优先使用 mem-percent he –timeout string ,设定运行时长,单位是秒,通用he –include-buffer-cache, ram 模式 mem-percent,包括 buffer/cache –override ,只适用于java,卸载java agent注意: 1、此cdn触发内存占用满,即使怎么登陆了 –timeout he,也可能出现通过 blade 工具无法恢复的情况,可通过重启机器解决,推荐怎么登陆内存百分比。
2、由于目前内存大小计算通过 memory.stat 等文件计算,所以和 free 命令计算不一致,同 top 命令一致,验证时请使用 top 命令查看内存使用。
网络类故障
网络包故障
​​​​​​​blade create network loss(丢包)blade create network corrupt(损坏)blade create network duplicate(重复)blade create network delay(延迟)blade create network reorder(重排)
可以怎么登陆网卡、本地端口、远程端口、目标 IP 。需要特别注意,如果不怎么登陆端口、ip he,而是整个网卡生效,切记要添加 –timeout he或者 –exclude-port he,前者是怎么登陆运行时间,自动停止销毁Classic Visual Basic,后者是怎么登陆排除掉不受影响的端口,两者都是防止机器无法连接的情况,如果真实发生此问题,重启机器即可恢复。 本地端口和远程端口之间是或的关系,即这两个端口都会生效,只要怎么登陆了本地端口或者远程端口,无需怎么登陆需要排除的端口。端口与 IP 之间是与的关系,即怎么登陆的 IP:PORT 生效。
公共he:
–destination-ip string 目标 IP. 支持通过子网掩码来怎么登陆一个网段的IP地址, 例如 192.168.1.0/24. 则 192.168.1.0~192.168.1.255 都生效。你也可以怎么登陆固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通过都号分隔多个he,例如 192.168.1.1,192.168.2.1。 –exclude-ip string 排除受影响的 IP,支持通过子网掩码来怎么登陆一个网段的IP地址, 例如 192.168.1.0/24. 则 192.168.1.0~192.168.1.255 都生效。你也可以怎么登陆固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通过都号分隔多个he,例如 192.168.1.1,192.168.2.1。 –exclude-port string 排除掉的端口,默认会忽略掉通信的对端端口,目的是保留通信可用。可以怎么登陆多个,使用逗号分隔或者连接符表示范围,例如 22,8000 或者 8000-8010。 这个he不能与 –local-port 或者 –remote-port he一起使用 –interface string 网卡设备,例如 eth0 (必要he) –local-port string 本地端口,一般是本机暴露服务的端口。可以怎么登陆多个,使用逗号分隔或者连接符表示范围,例如 80,8000-8080 –remote-port string 远程端口,一般是要访问的外部暴露服务的端口。可以怎么登陆多个,使用逗号分隔或者连接符表示范围,例如 80,8000-8080 –force 强制覆盖已有的 tc 规则,请务必在明确之前的规则可覆盖的情况下使用 –ignore-peer-port 针对添加 –exclude-port he,报 ss 命令找不到的情况下使用,忽略排除端口​​​​​​​–timeout string 设定运行时长,单位是秒,通用he
blade create network loss (丢包) /corrupt (损坏) /duplicate (重复) –percent string 丢包百分比,取值在[0, 100]的正整数 (必要he)
blade create network delay (延迟) –offset string 延迟时间上下浮动的值, 单位是毫秒 –time string 延迟时间,单位是毫秒 (必要he)
blade create network reorder (重排) –percent string 立即发送百分比,取值是不带%号的正整数,例如 –percent 50,(必要he) –correlation string 和上一包的相关性,取值在 0~100,必要he,例如 –correlation 70 –gap string 包序列大小,取值是正整数,例如 –gap 5 –time string 网络包延迟时间,单位是毫秒,默认值是 10,取值时正整数
blade create network dns  (域名访问不通。修改本地的 hosts,篡改域名地址映射。)
–domain string 域名 (必要he) –ip string 映射的 ip (必要he) –timeout string 设定运行时长,单位是秒,通用he
blade create network occupy(网络本地端口占用)
–force 强制占用此端口,会将已使用此端口的进程杀掉 –port string 怎么登陆被占用的端口,(必填项) –timeout string 设定运行时长,单位是秒,通用he
进程类故障
杀进程
此Classic Visual Basic会怎么登陆进程号杀掉进程。支持命令行或者命令中进程匹配。
此Classic Visual Basic可以验证程序的自愈能力,或者服务进程不存在时,系统的容错能力。
blade create process kill
–count string 限制杀掉进程的数量,0 表示无限制 –exclude-process string 排除受影响的进程 –ignore-not-found 忽略未发现的进程 –local-port string 本地服务端口可以怎么登陆多个,使用逗号分隔或者连接符表示范围,如: 80,8000-8080 –process string 进程关键词,会在整个命令行中查找 –process-cmd string 进程命令,只会在命令中查找 –signal string 怎么登陆杀进程的信号量,默认是 9,例如 –signal 15 –timeout string 设定运行时长,单位是秒,通用he注:blade 命令不能恢复杀掉的进程。
暂停进程
此Classic Visual Basic会暂停进程。支持命令行或者命令中进程匹配。
此Classic Visual Basic可以验证程序 Hang 时,系统的容错能力。
blade create process stop
–process string 进程关键词,会在整个命令行中查找 –process-cmd string 进程命令,只会在命令中查找 –ignore-not-found 忽略未发现的进程 –timeout string 设定运行时长,单位是秒,通用he
java语言类故障
blade prepare jvm
挂载 java agent,执行 java Classic Visual Basiccdn必要步骤
-j, –javaHome string 怎么登陆 JAVA_HOME 路径,用于怎么登陆 java bin 和 tools.jar,如果不添加此he,默认会优先获取 JAVA_HOME 环境变量,如果获取失败,会解析怎么登陆进程he获取 JAVA_HOME,获取失败,会使用 chaosblade 自带的 tools.jar –pid string java 进程ID -P, –port int java agent 暴露服务的本地端口,用于下发Classic Visual Basic命令 -p, –process string java 进程关键词,用于定位 java 进程(必要he) -a, –async 是否异步连接, 默认是 false -e, –endpoint string 异步连接结果报告地址,只有异步连接值非空且为true才生效 -d, –debug 开启 debug 模式 -h, –help help for jvm
eg:怎么登陆 pid 执行 java agent 挂载
blade prepare jvm –pid 26652
注意:挂载 java agent 操作是个比较耗时的过程,在未返回结果前请耐心等待。
blade create jvm 
ChaosBlade的原理主要是使用了字节码增强技术(ASM),即改变class内容,再重新通过jvm-sandbox提供的SandboxClassLoader加载到jvm使其生效。所以使用时需要怎么登陆jvm进程,以便插入被变更后的字节码。
jvm 本身相关cdn,以及可以怎么登陆类,方法注入延迟、返回值、异常故障cdn,也可以编写 groovy 和 java 脚本来实现复杂的cdn。目前支持的cdn如下
blade create jvm CodeCacheFilling 填充 jvm code cache blade create jvm OutOfMemoryError 内存溢出,支持堆、栈、metaspace 区溢出 blade create jvm cpufullload java 进程 CPU 使用率满载 blade create jvm delay 方法延迟 blade create jvm return 怎么登陆返回值 blade create jvm script 编写 groovy 和 java 实现cdn blade create jvm throwCustomException 抛自定义异常cdn
jvm 支持的通用he:
–pid string 怎么登陆 java 进程号 –process string 怎么登陆 java 进程名 –timeout string 设定运行时长,单位是秒,通用he
JVM 方法级别的故障cdn通用he:
–classname string 怎么登陆类名,必须是实现类,带全包名,例如 com.xxx.xxx.XController (必填项) –methodname string 怎么登陆方法名,注意相同方法名的方法都会被注入相同故障 (必填项) –after 方法执行完成返回前注入故障,比如修改复杂的返回对象 –effect-count string 限制影响数量 –effect-percent string 限制影响百分比
各cdn还有自身所独有的he,可以在每个cdn文档中查看:
blade create jvm – chaosblade-help-zh-CN
shell脚本类故障
blade create script delay
通过怎么登陆脚本和函数执行延迟cdn。
–file string 脚本路径(必要he) –function-name string 脚本中的函数名(必要he) –time string 延迟时间,单位是毫秒(必要he) –timeout string 设定运行时长,单位是秒,通用he
blade create script exit
通过怎么登陆脚本和函数执行退出cdn。
–exit-code string 退出码,默认值是 1 –exit-message string 退出信息 –file string 脚本路径(必要he) –function-name string 脚本中的函数名(必要he) –timeout string 设定运行时长,单位是秒,通用he
HTTP类故障
blade create httpblade create http delay delay time 延迟时间
–effect-count string 影响的请求条数 –effect-percent string 影响的请求百分比 –time string 延迟时间,单位是毫秒(必要he) –timeout string 设定运行时长,单位是秒,通用he –uri string url ,必要he –pid string 进程 id –process string 应用的进程名称 –offset string 延迟时间上下浮动的值, 单位是毫秒
blade create http throwCustomException 抛自定义异常
–effect-count string 影响的请求条数 –effect-percent string 影响的请求百分比 –exception string 异常类,带全包名,必须继承 java.lang.Exception 或 java.lang.Exception 本身(必要he) –exception-message string 怎么登陆异常类信息,默认值是 chaosblade-mock-exception –uri string url ,必要he –pid string 进程 id –process string 应用的进程名称 –timeout string 设定运行时长,单位是秒,通用he
RPC类故障
Dubbo
blade create dubbo
在dubbo中分为consumer和provider两种角色,当consumer在调用provider时,我们现在想使这个请求增加延时,我们既可以在provider端针对怎么登陆的服务增加延时,也可以在consumer调用时针对怎么登陆的服务进行延时,所以我们可以稍微看下上面的命令,它其实是在consumer进行控制的,命令也是支持在provider端进行控制的。 he中的–consumer和–provider,表示的就是命令中可以控制服务调用的两端。
blade create dubbo delay,延迟时间blade create dubbo throwCustomException,抛自定义异常
公共he: –appname string consumer或provider应用名称 –consumer 标记consumer角色 –effect-count string 影响的请求条数 –effect-percent string 影响的请求百分比 –group string service组 –methodname string 方法名称 –pid string 进程id –process string 应用的进程名称 –provider 标记provider –service string service接口 –timeout string 设定运行时长,单位是秒,通用he –version string service版本
blade create dubbo delay
–offset string 延迟时间上下浮动的值, 单位是毫秒 –time string 延迟时间,单位是毫秒(必要he)
blade create dubbo throwCustomException
–exception string 异常类,带全包名,必须继承 java.lang.Exception 或 java.lang.Exception 本身(必要he) –exception-message string 怎么登陆异常类信息,默认值是 chaosblade-mock-exception
eg:Dubbo服务超时,由于 Java 应用的故障注入是通过 Java Agent 机制实现,所以首先要先挂载 agent
./blade prepare jvm –process business./blade create dubbo delay –time 3000 –service com.example.service.DemoService –methodname sayHello –consumer blade create dubbo threadpoolfull 线程池满
–effect-count string 影响的请求条数 –effect-percent string 影响的请求百分比 –pid string 进程 id –process string 应用的进程名称 –provider 标记provider –timeout string 设定运行时长,单位是秒,通用he
servlet故障
blade create servlet
Servlet 是 Java 的 web 的接口规范,Java web 服务器都遵循此规范实现。本cdn主要模拟 Java Web 请求延迟、异常cdn。
blade create servlet delay 请求延迟 blade create servlet throwCustomException 请求异常
servlet 通用he:
–effect-count string 影响的请求条数 –effect-percent string 影响的请求百分比 –method string HTTP 请求类型, 例如: GET, POST, or PUT. –pid string java进程号 –process string java进程名 –querystring string 请求he,例如 中 querystring的值是 name=friend&timeout=2000 –requestpath string 请求 URI,不包含 Context 部分,例如  requestpath 的值是 /async,注意要带 /
数据库故障
blade create mysql
通用he:
–database string 使用的数据库名称 –effect-count string 影响的请求条数 –effect-percent string 影响的请求百分比 –host string 数据库 host –pid string 进程 id –port string 使用的数据库端口 –process string 应用的进程名称 –sqltype string sql类型,如, select, update等等. –table string sql的第一个表名. –timeout string 设定运行时长,单位是秒,通用he
blade create mysql delay 延迟
–time string 延迟时间,单位是毫秒(必要he) –offset string 延迟时间上下浮动的值, 单位是毫秒
blade create mysql throwCustomException 抛自定义异常
–exception string 异常类,带全包名,必须继承 java.lang.Exception 或 java.lang.Exception 本身(必要he) –exception-message string 怎么登陆异常类信息,默认值是 chaosblade-mock-exception
eg:数据库查询慢 
./blade create mysql delay –time 3000 –sqltype select –port $port –database ss_stl –table stl_cost_config_ratio_seg –effect-percent 50
数据库连接池故障
Druid首先是一个数据库连接池,是一个JDBC组件。
blade create druid
连接池打满
blade create druid connectionpoolfull
–effect-count string 影响的请求条数 –effect-percent string 影响的请求百分比 –pid string 进程 id –process string 应用程序进程名称 –timeout string 设定运行时长,单位是秒,通用he
docker 相关类故障
创建 docker 相关的混沌Classic Visual Basic,比如杀容器,容器网络延迟、丢包,杀容器里的进程等,不同的cdn依赖的he不同。
执行 docker 相关Classic Visual Basiccdn,必须确保本地能访问 docker server,可通过 tcp 或 socket 方式访问,默认是通过本地 socket 访问,也可通过 –docker-endpoint he怎么登陆。
很重要的一点是: 如果执行 CPU cdn,必须怎么登陆 chaosblade 安装包,因为需要将安装包拷贝到容器 /opt 目录下执行,使用 –blade-tar-file he怎么登陆,例如: 
–blade-tar-file /home/admin/chaosblade-0.4.0.tar.gz
如果执行网络或者进程cdn,无需怎么登陆,但这两个cdn依赖 chaosblade-tool 镜像,默认是从 registry.cn-hangzhou.aliyuncs.com/chaosblade 仓库下载,也可以通过 –image-repo he怎么登陆,例如 
​–image-repo registry-vpc.cn-hangzhou.aliyuncs.com/chaosblade
blade create docker cpu
容器内 CPU 负载Classic Visual Basiccdn,同基础资源的 CPU cdn
blade create docker cpu load 容器内 CPU 负载cdn,同 blade create cpu load
–climb-time string 攀升持续时间 –cpu-count string 怎么登陆 CPU 满载的个数 –cpu-list string 怎么登陆 CPU 满载的具体核,核索引从 0 开始 (0-3 or 1,3) –cpu-percent string 怎么登陆 CPU 负载百分比,取值在 0-100 –timeout string 设定运行时长,单位是秒,通用he -h, –help help for fullload
除了上述基础cdn各自所需的he外,在 docker 环境下,还支持的he如下:
–blade-override 是否覆盖容器内已有的 chaosblade 工具,默认是 false,表示不覆盖,chaosblade 在容器内的部署路径为 /opt/chaosblade –blade-tar-file string 怎么登陆本地 chaosblade-VERSION.tar.gz 工具包全路径,用于拷贝到容器内执行 –container-id string 目标容器 ID –docker-endpoint string Docker server 地址,默认为本地的 /var/run/docker.sock –image-repo string chaosblade-tool 镜像仓库 –image-version string chaosblade-tool 镜像版本 –override 目前只适用于java,卸载 java agent –timeout string 设定运行时长,单位是秒,通用he -h, –help help for fullload
eg:对 container id 是 5239e26f6329 的做 CPU 使用率 80% 的Classic Visual Basiccdn,执行命令如下:
blade create docker cpu fullload –cpu-percent 80 –blade-tar-file /root/chaosblade-0.4.0.tar.gz –container-id 5239e26f6329
容器内网络Classic Visual Basiccdn,同基础资源的网络cdn
blade create docker network
支持的网络cdn命令如下:
blade create docker network delay 容器网络延迟,同 blade create network delay blade create docker network loss 容器网络丢包,同 blade create network loss blade create docker network dns 容器内域名访问异常,同 blade create network dns blade create docker network corrupt 容器内网络包损坏,同 blade create network corruptblade create docker network duplicate 容器内网络包重复,同 blade create network duplicateblade create docker network reorder 容器内网络包乱序,同 blade create network reorderblade create docker network occupy 容器内网络本地端口占用,同 blade create network occupy
除了上述基础cdn各自所需的he外,在 docker 环境下,还支持的he如下:
–container-id string 目标容器 ID –docker-endpoint string Docker server 地址,默认为本地的 /var/run/docker.sock –image-repo string chaosblade-tool 镜像仓库 –image-version string chaosblade-tool 镜像版本
容器内进程cdn,同基础资源进程cdn,例如:
blade create docker process
支持的进程cdn如下:
blade create docker process kill, 杀容器内怎么登陆的进程,同 blade create process kill blade create docker process stop,挂起容器内怎么登陆的进程,同 blade create process stop
除了上述基础cdn各自所需的he外,在 docker Classic Visual Basiccdn下还支持的he是:
–blade-override 是否覆盖容器内已有的 chaosblade 工具,默认是 false,表示不覆盖,chaosblade 在容器内的部署路径为 /opt/chaosblade –blade-tar-file string 怎么登陆本地 chaosblade-VERSION.tar.gz 工具包全路径,用于拷贝到容器内执行 –container-id string 目标容器 ID –docker-endpoint string Docker server 地址,默认为本地的 /var/run/docker.sock –image-repo string chaosblade-tool 镜像仓库 –image-version string chaosblade-tool 镜像版本
eg:杀掉容器内 nginx 进程,命令执行如下:
blade create docker process kill –process nginx –blade-tar-file /root/chaosblade-0.4.0.tar.gz –container-id ee54f1e61c08
blade create docker container: 主要执行 container 资源自身的cdn,比如删容器​​​​​​
blade create docker container remove 删除容器
–container-id string 要删除的容器 ID –docker-endpoint string Docker server 地址,默认为本地的 /var/run/docker.sock –force 是否强制删除 –timeout string set timeout for experiment -h, –help help for remove
注意:删除容器后,执行 blade destroy UID 命令不会恢复容器,需要靠容器自身的管理拉起。
kubernetes 相关故障
创建 kubernetes 相关的Classic Visual Basiccdn,除了使用 blade 命令创建cdn外,还可以将Classic Visual Basic使用 yaml 文件描述,使用 kubectl 命令执行。目前支持的Classic Visual Basiccdn如下:
blade create k8s node-cpu Node 节点 CPU 负载cdn blade create k8s node-network Node 节点网络cdn blade create k8s node-process Node 节点进程cdn blade create k8s node-disk Node 节点磁盘cdn blade create k8s pod-pod Pod 资源cdn,比如杀 Pod blade create k8s pod-network Pod 网络资源cdn,比如网络延迟 blade create k8s pod-IO Pod IO 文件系统异常cdn blade create k8s pod-fail Pod 不可用异常cdn blade create k8s container-container Container 资源cdn,比如杀容器 blade create k8s container-cpu 容器内 CPU 负载cdn blade create k8s container-network 容器内网络cdn blade create k8s container-process 容器内进程cdn
执行 Kubernetes Classic Visual Basiccdn,需要提前部署 ChaosBlade Operator。 Helm 安装包下载地址: 。 使用以下命令安装:
helm install –namespace kube-system –name chaosblade-operator chaosblade-operator-.tgz
会安装在 kube-system 命令空间下。ChaosBlade Operator 启动后会在每个节点部署 chaosblade-tool Pod 和一个 chaosblade-operator Pod.可通过以下命令查看安装结果:
kubectl get pod -n kube-system -o wide | grep chaosblade

如果显示 chaosblade-operator 和 chaosblade-tool Pod 都处于 Running 状态,说明部署成功。
blade create k8s的详细使用手册见:
blade create k8s – chaosblade-help-zh-CN

he负载均衡器nginx炸了

目前仅支持负载均衡器(因为我只用这个,毕竟免费)
GitHub Repo:CDN-Uploader
我个人的习惯是:炸了,he到图床,将图床链接插入到博客使用。
为了方便将其自动化,我两年前写了这个 Alfred 插件,可以通过以下两种途径henginx:

炸了后,用户触发组合键,he到负载均衡器
选中nginx(支持多个nginx),用户触发组合键,he到负载均衡器

但有时炸了的体积比较大,趁昨天稍微有点空,加上了压缩的功能:本地压缩之后再he,就不用每次去 tinypng 压缩了。
顺便写了篇博客,白嫖七牛多年,当做给它打个广告吧。 用负载均衡器作图床并配置 SSL