软件负载均衡器 SLB 的核心作用是在多个后端服务节点之间合理分配客户端请求,避免单一服务器成为性能瓶颈或故障单点。与硬件负载均衡设备相比,SLB 以普通服务器上运行的软件形态提供能力,具备成本低、弹性扩展快、配置灵活的特点。常见的 SLB 实现包括基于四层的 LVS、基于七层的 Nginx 与 HAProxy,它们均通过虚拟 IP 或监听端口接收流量,再依据设定算法转发至真实服务器组。

SLB 的基础网络结构与虚拟服务配置
在部署 SLB 之前,需要先明确整体网络拓扑。通常分为三部分:客户端、负载均衡器、后端真实服务器池。负载均衡器持有对外服务的虚拟 IP(VIP),后端节点使用私有地址并运行相同业务。以 LVS 的 NAT 模式为例,管理员要在均衡器上配置 VIP 监听端口,并把真实服务器地址加入转发规则表。这种结构下,客户端只感知 VIP,后端扩容或缩容对调用方透明。
下面给出一段 LVS 使用 ipvsadm 工具配置虚拟服务的示例。该代码在负载均衡器主机执行,先添加 VIP 的 TCP 监听,再将两台真实服务器以轮询算法加入。注意真实服务器地址应替换为实际内网 IP,网关需指向均衡器内网口。
# 添加虚拟服务,VIP 为 192.168.0.100:80,调度算法为轮询 rr ipvsadm -A -t 192.168.0.100:80 -s rr # 添加真实服务器 RS1,使用 NAT 模式 -m ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.11:80 -m # 添加真实服务器 RS2 ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.12:80 -m # 查看当前配置 ipvsadm -L -n
如果采用 Nginx 作为七层 SLB,则通过 http 块中的 upstream 指令定义后端组,并在 server 块内用 proxy_pass 指向该组。七层转发能基于 URL 或请求头做路由,适合微服务场景。与 LVS 不同,Nginx 不需要单独配置 VIP,只需将域名解析到 Nginx 所在机器,由 Nginx 完成应用层分发。
健康检查机制与故障切换策略
健康检查是 SLB 保证高可用的关键。没有有效的探测,均衡器可能持续把请求发给已宕机的节点,造成大量超时。LVS 本身不内置应用层健康检查,一般配合 keepalived 实现 VRRP 与探测脚本;Nginx 商业版有主动健康检查,开源版可通过第三方模块或结合 Consul 自动摘流。探测频率设置过低会增加网络开销,过高则故障发现慢,通常建议 TCP 探测间隔 2 到 5 秒,HTTP 状态码探测间隔 5 到 10 秒。
以下 Nginx 配置片段展示开源版利用 max_fails 与 fail_timeout 实现的被动健康检查。当某后端在 30 秒内出现 3 次连接失败,Nginx 会暂停向其转发 30 秒,之后再次尝试。这种方式不需额外模块,但只能发现转发时已发生的错误,无法主动预知节点不可用。
upstream backend {
server 192.168.0.11:80 max_fails=3 fail_timeout=30s;
server 192.168.0.12:80 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
对于要求严格的业务,应部署独立探测组件。例如用 keepalived 执行自定义脚本定时访问后端接口,脚本返回非 0 时自动将 VIP 漂移到备用均衡器,或调用接口从 LVS 规则中移除故障 RS。这种主动切换能把用户感知的中断控制在秒级。同时需要在后端服务中暴露轻量健康接口,避免探测本身消耗过多业务资源。
调度算法选择与会话保持实践
SLB 支持多种调度算法,不同算法适用场景差异明显。轮询(rr)将请求依次分给每个节点,适合节点性能相近的无状态服务;加权轮询(wrr)可给高配机器更高权重,提升整体吞吐;最小连接(lc)优先发给当前连接最少的节点,适合长连接或请求耗时不均的场景;源地址哈希(sh)则根据客户端 IP 计算固定后端,实现简单会话保持。
当业务必须绑定用户会话(如未接入外部 Session 存储的登录系统),可在 SLB 开启会话保持。LVS 的 -p 参数指定持久连接时间,Nginx 可通过 ip_hash 指令或借助 sticky 模块下发 Cookie。但会话保持会降低负载均衡效果,节点扩缩容可能导致部分用户重新登录,因此更推荐把会话数据放到 Redis 等共享存储,让 SLB 回归纯无状态转发。
upstream backend {
ip_hash;
server 192.168.0.11:80;
server 192.168.0.12:80;
}
实际配置中还应结合监控观察各节点流量曲线。若发现加权轮询下低权重节点长期空闲,说明权重配比不合理;若最小连接算法引发某节点突增,可能是该节点处理快但带宽受限。通过逐步调参并配合灰度发布,才能让 SLB 在复杂生产环境中稳定承担流量入口职责。