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