3、负载均衡入门:负载均衡的作用、四层负载均衡(LVS/HAProxy)、七层负载均衡(Nginx)

各位同学,咱们今天聊聊负载均衡。

说实话,我刚开始做架构那会儿,觉得负载均衡不就是个流量分发器嘛,有啥好讲的?直到有一次线上事故,单机扛不住流量,直接挂了。那时候我才真正意识到——负载均衡不是锦上添花,而是高可用的命根子

3.1 负载均衡到底在解决什么问题?

说白了,负载均衡就干三件事:

  • 分摊压力:把用户请求分散到多台服务器上,别让一台机器累死。
  • 提高可用性:某台机器挂了,流量自动切到其他机器,用户无感知。
  • 弹性伸缩:流量大了加机器,流量小了减机器,负载均衡自动适配。

我遇到过最典型的场景:双十一大促,流量突然暴涨10倍。如果没有负载均衡,单机直接被打趴,用户全得骂娘。有了它,后端加几台机器,流量一分,稳如老狗。

核心观点:负载均衡是高可用的第一道防线。没有它,后面谈什么容灾、限流、降级都是扯淡。

3.2 四层负载均衡:LVS 和 HAProxy

四层负载均衡,工作在 OSI 模型的传输层(TCP/UDP)。它不关心你的请求内容是什么,只看 IP 和端口。

你想想看,它就像一个快递分拣员,只看包裹上的地址(IP:端口),不看里面装的是啥。所以速度极快,性能极高。

3.2.1 LVS(Linux Virtual Server)

LVS 是 Linux 内核自带的负载均衡方案。我个人的习惯是,只要对性能要求极高,首选 LVS

它有三种工作模式:

模式 原理 特点
NAT 修改目标IP,转发给后端 简单,但后端响应要经过LVS,容易成瓶颈
DR 修改MAC地址,直接路由 性能最高,后端响应直接返回客户端
TUN IP隧道封装 适合跨机房、跨网络场景

我在项目中用得最多的是 DR 模式。记得有一次,客户要求单机 QPS 达到 10 万以上,我直接上了 LVS DR,后端挂 4 台 Nginx,轻松搞定。

避坑指南:我曾经在配置 LVS DR 模式时,忘了设置后端服务器的 lo 接口 VIP,结果流量死活转发不过去。嗯,这个细节一定要记住——后端机器必须配置 VIP 到 lo 接口,并且关闭 ARP 响应。

3.2.2 HAProxy

HAProxy 是另一个四层负载均衡利器。它比 LVS 更灵活,支持更丰富的健康检查和调度算法。

我建议你在以下场景用 HAProxy:

  • 需要精细化的健康检查(比如检查 HTTP 状态码)
  • 需要 SSL 卸载(把 HTTPS 解密交给 HAProxy)
  • 需要更灵活的流量控制(比如按权重分配)

一个简单的 HAProxy 配置示例:

frontend web-front
    bind *:80
    default_backend web-back

backend web-back
    balance roundrobin
    server web1 192.168.1.10:80 check
    server web2 192.168.1.11:80 check
    server web3 192.168.1.12:80 check backup

你看,配置很直观。balance roundrobin 就是轮询,check 表示健康检查,backup 表示备用服务器。我一般会配一个 backup,万一主服务器全挂了,至少还有个兜底的。

3.3 七层负载均衡:Nginx

七层负载均衡,工作在应用层(HTTP/HTTPS)。它不仅能看 IP 和端口,还能看请求的 URL、Header、Cookie 甚至请求体内容。

说白了,四层是「快递分拣员」,七层就是「智能客服」——它能根据你的问题内容,把你转给对应的专家。

3.3.1 Nginx 的核心能力

Nginx 是我个人最常用的七层负载均衡。它有几个杀手锏:

  • URL 路由:根据请求路径分发到不同后端
  • 会话保持:通过 Cookie 或 IP hash 保证同一用户请求到同一台机器
  • 限流限速:防止恶意流量打垮后端
  • 缓存加速:静态资源直接缓存,减少后端压力

举个例子,假设你的系统有用户服务和订单服务,用 Nginx 可以这样配置:

upstream user_srv {
    server 192.168.1.20:8080;
    server 192.168.1.21:8080;
}

upstream order_srv {
    server 192.168.1.30:8080;
    server 192.168.1.31:8080;
}

server {
    listen 80;
    
    location /user/ {
        proxy_pass http://user_srv;
    }
    
    location /order/ {
        proxy_pass http://order_srv;
    }
}

这样,/user/ 开头的请求去用户服务,/order/ 开头的去订单服务。是不是很清晰?

3.3.2 四层 vs 七层,怎么选?

很多同学问我:到底该用四层还是七层?我一般这样回答:

场景 推荐方案 原因
纯 TCP/UDP 流量 四层(LVS/HAProxy) 性能高,延迟低
HTTP 应用,需要路由 七层(Nginx) 灵活,能按 URL 分发
超高并发(百万级) 四层 + 七层组合 LVS 扛流量,Nginx 做路由
需要 SSL 卸载 七层(Nginx/HAProxy) 后端不用处理 HTTPS,减轻压力

注意:我曾经见过一个团队,所有流量都走七层 Nginx,结果 QPS 到 5 万就扛不住了。后来在前面加了一层 LVS,直接干到 20 万。记住——四层负责「快」,七层负责「聪明」,两者配合才是王道。

3.4 小结

今天咱们聊了负载均衡的入门知识。总结一下:

  • 负载均衡的核心是分摊压力、提高可用性、弹性伸缩
  • 四层负载均衡(LVS/HAProxy)性能高,适合 TCP/UDP 流量
  • 七层负载均衡(Nginx)灵活,适合 HTTP 应用
  • 实际生产环境,往往是四层 + 七层组合使用

下一章,我会带大家深入 Nginx 的配置细节,包括健康检查、会话保持、限流等实战技巧。到时候咱们再细聊。

一句话记住:四层管「通不通」,七层管「去哪通」。搞懂这个,负载均衡你就入门了。