轮询算法本身不感知状态,优雅关机和流量摘除依赖Nginx配置与后端协同:通过weight=0/down摘流、健康检查自动识别退出、draining参数保障请求完成、后端主动关闭新请求并等待连接归零。
轮询算法本身不感知状态,优雅关机和流量摘除靠的是 Nginx 配置机制与后端行为协同实现,不是轮询自己“变聪明”,而是通过权重控制、健康检查、连接管理与后端退出节奏四者对齐。
这是最直接、零延迟生效的方式,适用于计划内下线:
server 10.0.0.5:8080 down;),哈希计算自动跳过该节点,老连接不受影响nginx -s reload 生效;若使用 nginx-upsync-module 或 OpenResty 的 resty.etcd,可免 reload 动态更新让 Nginx 在后端真正停机前就停止派发新请求,避免依赖人工操作:
nginx_upstream_check_module(OpenResty 已内置,原生需编译),配置 HTTP 探活:check interval=3 rise=2 fall=3 timeout=1 type=http;
/health/ready 或 /actuator/health 接口返回 503 Service Unavailable,触发 fall 计数,连续失败后自动标记为不可用proxy_next_upstream error timeout http_503;,确保打到异常节点的请求能立即重试其他健康节点摘流只是开始,真正零丢失取决于是否给后端留足处理时间:
keepalive 32 减少重建压力Nginx 是协调者,不是执行者。安全下线的最终判断权在后端:
stub_status 监控 Active connections 确认是否降为 0TimeoutStopSec=90 并在 ExecStop 中调用 nginx -s quit 协同不复杂但容易忽略的是:Nginx reload 不会中断已有连接,但真正的“优雅”必须由后端自身 graceful shutdown 能力兜底。配置只是桥梁,协作才是关键。