9.10.7 故障演练与应急响应
故障演练与应急响应围绕 Nacos 可用性与服务治理稳定性展开,目标是验证架构韧性、提升故障发现与恢复效率、降低配置与注册中心异常对业务的影响。
原理草图:故障注入—监控—处置闭环
flowchart LR
A[客户端] -->|心跳/拉取| B[Nacos集群]
B --> C[(MySQL)]
B --> D[监控/告警]
D --> E[应急指挥]
E --> F[处置脚本/回滚]
F --> B
演练目标与范围
- 验证注册发现、配置管理、持久化、集群选主在故障下的可用性。
- 覆盖网络抖动、节点宕机、存储异常、配置误操作、权限异常、客户端异常。
- 明确 RTO/RPO 与 SLA 阈值,建立演练基线与验收标准。
演练场景与实施示例(含命令)
1) 节点故障演练:单节点宕机
目标:验证集群容错与客户端自动切换
前置:3 节点集群,开启健康检查与监控
- 故障注入
# 在 nacos-node-1 上停止服务
sudo systemctl stop nacos
# 期望:客户端能在 30s 内切换到其他节点
- 观测验证
# 观察集群健康(示例接口/页面)
curl -s http://nacos-node-2:8848/nacos/v1/ns/operator/metrics | head -n 20
# 期望:healthyInstanceCount 不下降为 0,心跳成功率保持 >99%
- 排错要点
- 若客户端大量断连,检查客户端配置的 server-addr 是否包含多节点;
- 检查 nacos-client 日志中是否反复重试同一节点。
2) 网络抖动演练:客户端与 Nacos 间高延迟
目标:验证超时与重试策略
- 故障注入(Linux tc)
# 在客户端机器上模拟 300ms 延迟与 2% 丢包
sudo tc qdisc add dev eth0 root netem delay 300ms loss 2%
# 恢复
sudo tc qdisc del dev eth0 root netem
- 观测验证
- 监控配置推送耗时、心跳成功率、客户端重试次数。
3) 存储故障演练:数据库连接池耗尽
目标:验证 Nacos 持久化异常处理
- 故障注入(限制 MySQL 连接数)
# MySQL 侧临时调整连接数(需要权限)
mysql -uroot -p -e "SET GLOBAL max_connections=50;"
- 观测验证
- Nacos 日志出现获取连接超时;
- 服务注册/配置发布失败率上升。
- 应急处置
- 临时提升连接池、排查慢查询与锁等待。
4) 配置误操作演练:错误配置下发
目标:验证灰度与回滚机制
- 演练步骤(示例配置)
# 错误配置(模拟上线)
# dataId: app.yaml
app:
feature_x: "true"
timeout_ms: 5 # 过低导致超时
# 回滚配置(恢复)
app:
feature_x: "false"
timeout_ms: 2000
- 观测验证
- 配置推送耗时、客户端错误日志是否增加。
- 回滚命令(示例,使用 nacos-cli)
# 发布回滚配置(示例命令)
nacos-cli config publish \
--serverAddr=127.0.0.1:8848 \
--dataId=app.yaml --group=DEFAULT_GROUP \
--type=yaml --content="$(cat /opt/conf/app-rollback.yaml)"
5) 权限异常演练:token 过期
目标:验证认证失败告警与恢复流程
- 故障注入
- 手动更换服务端 token 或密钥,导致客户端鉴权失败。
- 排错要点
- 客户端日志出现 403/401;
- 检查 nacos.auth.system.type 与 jwt.secret。
演练实施流程(可直接执行)
1. 预演准备:冻结变更窗口、备份数据、确认回滚脚本与告警接入。
2. 故障注入:按场景控制注入,记录注入时间与影响面。
3. 观察验证:监控指标、日志、告警是否准确触发。
4. 应急处置:隔离、切换、回滚与降级。
5. 复盘总结:输出影响评估、恢复时长与修复措施。
应急响应分级与职责
- P0:核心业务不可用,立即启动应急指挥,负责人到场处理。
- P1:关键功能异常,30 分钟内完成定位与缓解。
- P2:非核心异常,4 小时内恢复。
- 明确指挥、执行、沟通、回滚、验证角色与备份人选。
关键恢复手段(含脚本示例)
- 集群侧:故障节点摘除与恢复
# 将节点从负载均衡中摘除(示例:Nginx upstream)
sed -i 's/server nacos-node-1:8848;/# &/g' /etc/nginx/conf.d/nacos_upstream.conf
nginx -s reload
# 期望:请求不再打到故障节点
- 存储侧:慢查询排查
# 查看慢查询
mysql -uroot -p -e "SHOW VARIABLES LIKE 'slow_query%';"
mysql -uroot -p -e "SHOW GLOBAL STATUS LIKE 'Slow_queries';"
# 期望:慢查询数量可控,耗时 SQL 可定位
- 配置侧:配置快照恢复(本地备份示例)
# 备份配置文件(客户端缓存)
cp -a /opt/nacos/config-cache /opt/backup/config-cache-$(date +%F)
# 期望:客户端可在服务端异常时使用本地缓存
- 客户端侧:降级与本地配置
# 启用本地配置兜底(示例:application.yml)
spring:
cloud:
nacos:
config:
enabled: true
refresh-enabled: true
# 本地文件兜底路径
file-extension: yaml
监控与告警(关键指标与阈值示例)
- 请求延迟 p95 < 200ms
- 心跳成功率 > 99.5%
- 配置推送耗时 p95 < 1s
- DB 连接池使用率 < 80%
排错清单(常用命令)
# Nacos 服务状态
systemctl status nacos
# 端口与进程
ss -lntp | grep 8848
ps -ef | grep nacos
# Nacos 日志定位
tail -n 200 /opt/nacos/logs/nacos.log
grep -n "ERROR" /opt/nacos/logs/nacos.log | tail -n 20
练习(可重复执行)
1) 通过 tc 注入 200ms 延迟,记录心跳成功率变化,恢复后观察指标回落。
2) 停止单节点服务,验证客户端是否自动切换;恢复后观察健康实例数。
3) 发布错误配置并回滚,记录推送耗时与业务错误日志数量。
演练输出与持续改进
- 输出应急手册、演练记录、指标对比与改进计划。
- 定期评估预案有效性,完善自动化演练与故障注入机制。
- 形成标准化应急流程模板,纳入日常运维与变更管理。