技术类
更新时间 2026-02-11 10:46:44
最近更新时间: 2026-02-11 10:46:44
本章节主要介绍故障演练服务技术类问题。
故障演练的实现原理是什么?
不同类型的故障动作实现原理各不相同,详细说明请参考故障动作库中的具体文档,下表简要概述了各类动作的核心原理:
| 分类 | 资源类型 | 动作类型 | 动作 | 简介 | 原理描述 |
| 计算 | 云主机 | 主机资源 | 主机宕机 | 使用云主机接口对实例进行关机 | 通过调用云主机关机OpenAPI触发关机 |
| CPU资源 | CPU高负载 | 使用内部自研工具实施CPU高负载 | 预先在探针管理处将内部自研Agent安装至云主机上,使用管控通道下发动作执行命令 原理是启动自定义程序,空跑for循环来消耗CPU时间片 | ||
| 内存资源 | 内存高负载 | 使用内部自研工具实施内存高负载 | 预先在探针管理处将内部自研Agent安装至云主机上,使用管控通道下发动作执行命令 原理是启动自定义程序不断申请内存,模拟主机内存负载升高 注意:设置高负载的内存故障注入后,可能会使得机器无法登入与控制,请谨慎使用 | ||
| 磁盘资源 | IO高负载 | 使用内部自研工具实施磁盘IO高负载 | 预先在探针管理处将内部自研Agent安装至云主机上,使用管控通道下发动作执行命令 原理是先通过dd命令将数据写入文件中,然后再通过循环读写文件占用磁盘带宽 | ||
| IO Hang | 模拟磁盘产生IO Hang效果 | 预先在探针管理处将内部自研Agent安装至云主机上,使用管控通道下发动作执行命令 原理是通过fsfreeze命令模拟磁盘夯死表现 注意:设置磁盘夯死故障注入后,可能会导致应用无法读写文件产出异常,请谨慎使用 | |||
| 磁盘填充 | 使用内部自研工具实施磁盘填充 | 预先在探针管理处将内部自研Agent安装至云主机上,使用管控通道下发动作执行命令 原理是通过dd命令将数据写入文件 | |||
| 网络资源 | 网络丢包 | 使用TC和Netem模拟主机内网络丢包 | 预先在探针管理处将内部自研Agent安装至云主机上,使用管控通道下发动作执行命令 原理是通过增加TC和Netem规则模拟主机内网络丢包 注意:只对出方向流量生效,不会影响入流量;如果系统已配置有TC规则,动作执行会失败 | ||
| 网络延迟 | 使用TC和Netem模拟主机内网络延迟 | 预先在探针管理处将内部自研Agent安装至云主机上,使用管控通道下发动作执行命令 原理是通过增加TC和Netem规则模拟主机内网络延迟 注意:只对出方向流量生效,不会影响入流量;如果系统已配置有TC规则,动作执行会失败 | |||
| 网络包重复 | 使用TC和Netem模拟主机内网络包重复 | 预先在探针管理处将内部自研Agent安装至云主机上,使用管控通道下发动作执行命令 原理是通过增加TC和Netem规则模拟主机内网络包重复 注意:只对出方向流量生效,不会影响入流量;如果系统已配置有TC规则,动作执行会失败 | |||
| 网络包乱序 | 使用TC和Netem模拟主机内网络包乱序 | 预先在探针管理处将内部自研Agent安装至云主机上,使用管控通道下发动作执行命令 原理是通过增加TC和Netem规则模拟主机内网络包乱序 注意:只对出方向流量生效,不会影响入流量;如果系统已配置有TC规则,动作执行会失败 | |||
| 网络包损坏 | 使用TC和Netem模拟主机内网络包损坏 | 预先在探针管理处将内部自研Agent安装至云主机上,使用管控通道下发动作执行命令 原理是通过增加TC和Netem规则模拟主机内网络包损坏 注意:只对出方向流量生效,不会影响入流量;如果系统已配置有TC规则,动作执行会失败 | |||
| 端口占用 | 模拟指定端口占用 | 预先在探针管理处将内部自研Agent安装至云主机上,使用管控通道下发动作执行命令 原理是启动自定义程序, 创建Socket对象并绑定到指定端口 | |||
| DNS篡改 | 篡改指定域名解析到指定IP | 预先在探针管理处将内部自研Agent安装至云主机上,使用管控通道下发动作执行命令 原理是通过修改本地DNS解析文件实现 | |||
| DNS不可用 | DNS解析不可用 | 预先在探针管理处将内部自研Agent安装至云主机上,使用管控通道下发动作执行命令 原理是通过修改本地DNS解析文件或防火墙规则实现 注意:该动作风险较大,请谨慎操作 | |||
| JVM故障 | JVM延迟 | 向特定JVM进程注入方法调用延迟故障 | 预先在探针管理处将内部自研Agent安装至云主机上,使用管控通道下发动作执行命令 原理是通过Java Agent在JVM进程内插入sleep代码来实现 | ||
| 中间件 | Redis | 集群资源 | 主从切换 | Redis主从切换 | 通过调用Redis主从切换OpenAPI,触发Redis集群实例进行主从切换 |
| 节点资源 | Redis节点故障 | Redis节点发生故障 | 通过调用Redis停止Redis服务OpenAPI,模拟Redis节点故障,故障会触发Redis HA机制进行自动恢复 | ||
| Proxy节点故障 | Proxy节点发生故障 | 通过调用Redis停止Proxy服务OpenAPI,模拟Proxy节点不可用 | |||
| 节点主机宕机 | Redis节点关机 | 通过关闭节点主机,模拟节点宕机 | |||
| CPU高负载 | Redis节点CPU高负载 | 在节点启动自定义程序,空跑for循环来消耗CPU时间片 | |||
| 内存高负载 | Redis节点内存高负载 | 在节点启动自定义程序不断申请内存,模拟主机内存负载升高 注意:设置高负载的内存故障注入后,可能会使得机器无法登入与控制,请谨慎使用 | |||
| 磁盘IO高负载 | Redis节点磁盘IO高负载 | 在节点先通过dd命令将数据写入文件中,然后再通过循环读写文件占用磁盘带宽 | |||
| 磁盘IO Hang | Redis节点磁盘IO Hang | 在节点通过fsfreeze命令模拟磁盘夯死表现 | |||
| 网络丢包 | Redis节点网络丢包 | 在节点通过增加TC和Netem规则模拟主机内网络丢包 注意:只对出方向流量生效,不会影响入流量;如果系统已配置有TC规则,动作执行会失败 | |||
| Kafka | 节点资源 | Broker节点主机宕机 | Broker节点关机 | 指定或随机一个Broker节点进行关机 | |
| Broker节点CPU高负载 | Broker节点CPU高负载 | 指定或随机一个Broker节点启动自定义程序,空跑for循环来消耗CPU时间片 | |||
| Broker节点磁盘IO高负载 | Broker节点磁盘IO高负载 | 指定或随机一个Broker节点先通过dd命令将数据写入文件中,然后再通过循环读写文件占用磁盘带宽 | |||
| 分区Leader不可用 | 分区Leader发生故障 | 指定一个或多个分区Leader,通过调用Kafka模拟Leader故障OpenAPI,触发Leader重新选举 | |||
| RCC | 集群资源 | 停止服务 | 注册配置中心集群服务故障 | 通过调用RCC停止集群OpenAPI,模拟RCC集群服务故障 | |
| 节点资源 | 停止节点 | 注册配置中心节点故障 | 通过调用RCC停止节点OpenAPI,模拟RCC节点故障 | ||
| 云容器 | 容器集群 | 节点资源 | 托管Master节点宕机 | 关闭云容器引擎Master节点主机 | 通过关闭云容器引擎Master节点主机,模拟Master节点宕机(支持托管版本和智算版) |
| 节点宕机 | 关闭云容器引擎纳管的节点主机 | 通过关闭云容器引擎纳管的节点主机,模拟节点宕机(支持Worker节点或专有版容器Master节点) | |||
| Etcd节点宕机 | 停止Etcd服务,模拟Etcd节点宕机 | 通过停止Etcd节点上的服务,模拟Etcd节点宕机 | |||
| 集群Node | CPU资源 | CPU高负载 | 使用内部自研工具实施CPU高负载 | 启动自定义程序,空跑for循环来消耗CPU时间片 | |
| 内存资源 | 内存高负载 | 使用内部自研工具实施内存高负载 | 启动自定义程序不断申请内存,模拟主机内存负载升高 注意:设置高负载的内存故障注入后,可能会使得机器无法登入与控制,请谨慎使用 | ||
| 磁盘资源 | IO高负载 | 使用内部自研工具实施磁盘IO高负载 | 先通过dd命令将数据写入文件中,然后再通过循环读写文件占用磁盘带宽 | ||
| 磁盘填充 | 使用内部自研工具实施磁盘填充 | 通过dd命令将数据写入文件 | |||
| 网络资源 | 网络丢包 | 使用TC和Netem模拟Node内网络丢包 | 通过增加TC和Netem规则模拟Node内网络丢包 注意:只对出方向流量生效,不会影响入流量;如果系统已配置有TC规则,动作执行会失败 | ||
| 网络延迟 | 使用TC和Netem模拟Node内网络延迟 | 通过增加TC和Netem规则模拟Node内网络延迟 注意:只对出方向流量生效,不会影响入流量;如果系统已配置有TC规则,动作执行会失败 | |||
| 网络包重复 | 使用TC和Netem模拟Node内网络包重复 | 通过增加TC和Netem规则模拟Node内网络包重复 注意:只对出方向流量生效,不会影响入流量;如果系统已配置有TC规则,动作执行会失败 | |||
| 网络包乱序 | 使用TC和Netem模拟Node内网络包乱序 | 通过增加TC和Netem规则模拟Node内网络包乱序 注意:只对出方向流量生效,不会影响入流量;如果系统已配置有TC规则,动作执行会失败 | |||
| 网络包损坏 | 使用TC和Netem模拟Node内网络包损坏 | 通过增加TC和Netem规则模拟Node内网络包损坏 注意:只对出方向流量生效,不会影响入流量;如果系统已配置有TC规则,动作执行会失败 | |||
| DNS篡改 | 篡改指定域名解析到指定IP | 通过修改本地DNS解析文件实现 | |||
| 应用进程 | 进程停止 | 终止节点上的指定进程 | 通过kill -9停止节点上的指定进程 | ||
| 进程挂起 | 挂起节点上的指定进程 | 通过kill -STOP挂起节点上的指定进程 | |||
| 集群Pod | CPU资源 | CPU高负载 | 使用内部自研工具实施CPU高负载 | 启动自定义程序,空跑for循环来消耗CPU时间片 | |
| 内存资源 | 内存高负载 | 使用内部自研工具实施内存高负载 | 启动自定义程序不断申请内存,模拟主机内存负载升高 注意:设置高负载的内存故障注入后,可能会使得机器无法登入与控制,请谨慎使用 | ||
| 磁盘资源 | IO高负载 | 使用内部自研工具实施磁盘IO高负载 | 先通过dd命令将数据写入文件中,然后再通过循环读写文件占用磁盘带宽 | ||
| 磁盘填充 | 使用内部自研工具实施磁盘填充 | 通过dd命令将数据写入文件 | |||
| 网络资源 | 网络丢包 | 使用TC和Netem模拟Pod内网络丢包 | 通过增加TC和Netem规则模拟Pod内网络丢包 注意:只对出方向流量生效,不会影响入流量;如果系统已配置有TC规则,动作执行会失败 | ||
| 网络延迟 | 使用TC和Netem模拟Pod内网络延迟 | 通过增加TC和Netem规则模拟Pod内网络延迟 注意:只对出方向流量生效,不会影响入流量;如果系统已配置有TC规则,动作执行会失败 | |||
| 网络包重复 | 使用TC和Netem模拟Pod内网络包重复 | 通过增加TC和Netem规则模拟Pod内网络包重复 注意:只对出方向流量生效,不会影响入流量;如果系统已配置有TC规则,动作执行会失败 | |||
| 网络包乱序 | 使用TC和Netem模拟Pod内网络包乱序 | 通过增加TC和Netem规则模拟Pod内网络包乱序 注意:只对出方向流量生效,不会影响入流量;如果系统已配置有TC规则,动作执行会失败 | |||
| 网络包损坏 | 使用TC和Netem模拟Pod内网络包损坏 | 通过增加TC和Netem规则模拟Pod内网络包损坏 注意:只对出方向流量生效,不会影响入流量;如果系统已配置有TC规则,动作执行会失败 | |||
| DNS篡改 | 篡改指定域名解析到指定IP | 通过修改本地DNS解析文件实现 | |||
| Pod资源 | Pod删除 | 删除指定Pod | 调用云容器引擎K8S API删除Pod | ||
| 应用进程 | 进程停止 | 终止节点上的指定进程 | 通过kill -9停止节点上的指定进程 | ||
| 进程挂起 | 挂起节点上的指定进程 | 通过kill -STOP挂起节点上的指定进程 | |||
| JVM故障 | JAVA方法调用延迟 | 指定JVM进程与方法增加调用延迟 | 通过Java Agent拦截指定JVM进程内方法,增加sleep操作模拟调用延迟 | ||
| JAVA方法抛自定义异常 | 指定JVM进程与方法抛出自定义异常 | 通过Java Agent拦截指定JVM进程内方法,增加thow操作模拟抛出异常 | |||
| 容器镜像 | Harbor服务 | Harbor服务不可用 | 停止Harbor服务,模拟容器镜像仓库不可用 | 通过调用容器镜像服务OpenAPI,停止Harbor服务,模拟容器镜像仓库不可用 |