Skip to content
Nginx 进阶路由与代理治理 · 第 3 篇 / 共 3 篇
领域运维与部署
专题容器与站点部署专题
当前序列Nginx 进阶路由与代理治理
阅读位置第 3 篇 / 共 3 篇当前专题第 3 个序列 / 共 4 个序列

负载均衡、健康检查和会话保持怎么设计

Nginx 做反向代理时,这三个点经常一起出现,但它们分别解决不同问题:负载均衡负责分流,健康检查负责摘除故障节点,会话保持负责减少有状态请求漂移。

先说结论

  • 先保证节点能被及时摘除,再谈流量分配策略
  • 业务能无状态就尽量无状态,少依赖会话保持
  • 负载策略要和后端处理能力、连接模型一起看,不能只图“均匀”
  • 健康检查不能只看端口通不通,最好能覆盖接口级探活和超时治理

一、先分清这三件事分别在解决什么

负载均衡在解决什么

它解决的是请求如何分配到多个上游节点。常见策略有轮询、加权轮询、least_connip_hash。没有绝对最优,只有更适合当前流量模型。

健康检查在解决什么

健康检查负责及时发现坏节点,避免请求继续打到已经超时、假活或半故障的实例上。没有健康检查的负载均衡,往往只能做到“平均分发错误”。

会话保持什么时候才需要

只有当后端还依赖本地 Session、粘性缓存或节点本地状态时,才需要考虑会话保持。更理想的做法通常是把状态外置到 Redis、数据库或统一会话服务。

二、实战里怎么设计

先决定后端是否无状态

如果能做到无状态,优先放弃 session stickiness,系统扩容、缩容和故障切换都会简单很多。

再选负载策略

  • 请求耗时接近时,轮询或加权轮询就够用
  • 长连接多、请求耗时差异大时,可以考虑 least_conn
  • 必须按来源保持稳定路由时,才考虑 ip_hash

最后补健康检查与超时治理

健康检查不能只看端口通不通,最好结合接口级探活、失败阈值和超时配置。很多节点“能连上”不代表“还能正常服务”。

三、几种常见场景更适合怎么选

1. 普通 Web 服务

大多数情况下,轮询或加权轮询就够用,重点放在超时、失败摘除和无状态化。

2. 长连接或耗时差异很大的服务

更适合考虑 least_conn,避免少数节点被长请求长期占住。

3. 还没做无状态改造的旧系统

可以短期用 ip_hash 或上游会话保持兜底,但要明确这是过渡方案,不是长期目标。

四、常见误区

只配 upstream,不配失败摘除

节点挂了还持续分流,故障会迅速放大。

把会话保持当成默认方案

这会让后端越来越难做弹性扩容,也会让单节点热点更明显。

负载均衡策略一劳永逸

上线初期适合轮询,业务增长后未必还合适。要根据连接数、RT 和失败率持续调整。

五、上线后至少看哪些指标

  • 上游节点 RT
  • 5xx 比例
  • upstream 失败次数
  • 节点连接数分布
  • 会话漂移或登录异常比例

总结

先保证故障节点能快速摘除,再根据流量模型选负载策略,最后尽量把会话状态从应用节点剥离出去,这套顺序更稳。

延伸阅读相关文章优先当前专题,再补跨专题关联。
同一序列 · 回看前文会更完整大 Header、buffer、timeout 问题怎么排查适合把 location 匹配、缓冲区和负载均衡放在一起看。容器与站点部署专题 · Nginx 进阶路由与代理治理同一序列 · 回看前文会更完整location、rewrite、try_files 怎么一起理解适合把 location 匹配、缓冲区和负载均衡放在一起看。容器与站点部署专题 · Nginx 进阶路由与代理治理同专题其他序列 · 共享标签:部署交付多阶段构建之外还有哪些瘦身手段适合把镜像分层、镜像瘦身、时区日志、静态缓存和 WebSocket 代理放进一条容器交付主线上看。容器与站点部署专题 · 容器镜像与站点交付细节同专题其他序列 · 共享标签:部署交付反向代理 WebSocket 时最容易漏哪些配置适合把镜像分层、镜像瘦身、时区日志、静态缓存和 WebSocket 代理放进一条容器交付主线上看。容器与站点部署专题 · 容器镜像与站点交付细节跨专题关联 · 同场景:部署交付标签基数为什么会拖垮 Prometheus适合把 Prometheus、Grafana、标签治理和告警分级放在一起看。可观测性专题 · 指标与告警体系设计跨专题关联 · 同场景:部署交付多环境发布怎么设计:开发、测试、预发、生产不只是名字不同适合沿着流水线设计、自动部署、发布策略、数据库变更和多环境治理这条线往下读。CI/CD 与发布治理专题 · CI/CD 与发布治理
继续阅读Nginx 进阶路由与代理治理当前序列第 3 篇 / 共 3 篇当前专题第 3 个序列 / 共 4 个序列
往前看
上一篇大 Header、buffer、timeout 问题怎么排查回到当前序列上一章上一序列Docker 镜像与网络存储细节从第 1 篇开始:镜像层和构建缓存是怎么工作的
往后看
下一序列容器镜像与站点交付细节从第 1 篇开始:镜像分层为什么会影响构建速度和回滚

把零散经验整理成可查、可复用、可持续更新的企业级知识门户