备用节点接管测试关键在于切换的精准性、快速性和无损性,需验证vip漂移≤2秒、http响应不中断、无脑裂,且主恢复后行为合规,并验证upstream降级逻辑生效。

测试备用节点接管表现,关键不是“能不能切”,而是验证切换是否精准、快速、无损。重点看三件事:VIP是否准时漂移、请求是否持续可通、连接是否不中断。
准备基础可观测性
没监控就测等于盲测。先在两台Nginx服务器上确认以下几项可实时查看:
- 执行 ip addr show,盯住虚拟IP(如 192.168.1.100)落在哪台机器上
- 用 tail -f /var/log/nginx/access.log 和 error.log 观察请求流向和错误标记
- 在客户端开持续 curl 测试:while true; do curl -s -o /dev/null -w "%{http_code}\n" http://192.168.1.100/health; sleep 0.5; done
- 备节点启用 nginx -t 和 systemctl is-active nginx 确保配置合法、服务就绪
模拟主节点宕机的几种典型场景
单一 kill nginx 进程不够全面,要覆盖真实故障面:
- 进程级故障:在主节点执行 systemctl stop nginx 或 kill -9 $(pgrep nginx)
- 配置级故障:临时改坏 nginx.conf(比如删掉一个分号),再 nginx -s reload,触发 master 退出
- 系统级故障:直接 systemctl stop keepalived(跳过健康检查脚本,测试 VRRP 协议兜底能力)
- 网络隔离:在主节点执行 iptables -A OUTPUT -p vrrp -j DROP 模拟心跳丢包(需后续清理)
观察与判定标准
每次触发故障后,紧盯 5 秒内发生什么:
- VIP 漂移时间 ≤ 2 秒:从主节点 ip addr 中消失,到备节点出现该 VIP,间隔应 ≤ 2 秒(VRRP 默认 advert_int=1,加上检测延迟)
- HTTP 响应不中断:curl 输出中最多出现 1 次 000 或超时,之后立即恢复 200;连续失败超过 2 次说明切换卡顿或备节点未就绪
- 无脑裂:用另一台机器同时运行 ip addr show,确认 VIP 在任意时刻只出现在一台节点上
- 主恢复后行为合规:若配置为 nopreempt,主重启 nginx 和 keepalived 后 VIP 不应回切;若为抢占模式,回切过程应平滑,不引发重复 502 或连接重置
补充验证:后端全挂时 backup 节点是否启用
光测 VIP 漂移不够,还得验证 Nginx upstream 层的降级逻辑是否生效:
- 临时停掉所有主后端服务(如 systemctl stop tomcat),保留 backup 节点服务运行
- 访问业务接口,确认返回来自 backup 节点(可通过响应头、页面标识或日志中的 upstream_addr 判断)
- 故意让 backup 节点也失败一次(如临时关掉它的服务),观察 error_page 是否触发本地降级响应(如返回预设 JSON)











