Nginx故障转移效率测试需模拟可控突发崩溃,结合被动检查(max_fails/fail_timeout)与主动探测(nginx_upstream_check_module),观测首挫延迟、零失败窗口、误恢复风险等指标。
要测试 Nginx 在后端服务突发崩溃时的自动故障转移效率,核心是模拟真实故障场景,并观察 Nginx 从检测失败、剔除节点、重试请求到流量完全绕过的全过程耗时与成功率。关键不在于“是否能切”,而在于“多快切稳、是否误切、会不会反复试探坏节点”。
避免用 kill -9 随机中断进程——这可能导致连接未及时断开、Nginx 无法立即感知。推荐方式:
iptables -A INPUT -s 192.168.1.10 -p tcp --dport 8080 -j REJECT,模拟网络层瞬断watch -n 0.2 'curl -s -o /dev/null -w "%{http_code}n" http://gateway/api/test'),实时观察响应码变化被动检查依赖真实请求失败,其效率直接受 max_fails 和 fail_timeout 控制。例如配置 max_fails=3 fail_timeout=20s:
proxy_next_upstream error timeout http_502,Nginx 会在单次请求失败后立刻换节点重试,用户侧感知延迟 ≈ 单次超时时间(如 proxy_connect_timeout 3s)仅靠被动机制,首次失败请求必然失败,且需凑够失败次数。对低频请求业务尤其不友好。建议加装 nginx_upstream_check_module:
check interval=2 rise=1 fall=2 timeout=1 type=http:每 2 秒探一次 /health,连续 2 次失败即下线,1 次成功即恢复curl "http://nginx-ip:8080/upstream_check?format=json" 可实时查看各节点状态和最近探测结果不能只看“最后是否通”,要抓取中间态数据:
rise=2 和延长 timeout 缓解)error_log /var/log/nginx/error.log notice;,搜索 "upstream temporarily disabled" 和 "no live upstreams" 等关键词确认状态变更时机