LVS和Nginx负载均衡有什么区别?一篇讲清四层和七层负载均衡

一、前言

在后端系统中,只要单台服务器扛不住访问量,就需要把请求分发到多台服务器上,这就是负载均衡

常见的负载均衡方案有很多,比如LVS、Nginx、HAProxy、云厂商SLB等。本文主要讲两个最经典的方案:LVS和Nginx

一句话先给结论:

LVS主要做四层负载均衡,性能强,适合入口流量转发;Nginx主要做七层负载均衡,功能灵活,适合HTTP反向代理、动静分离、接口转发等场景。

LVS是Linux Virtual Server的缩写,官方项目目标是基于真实服务器集群构建高可扩展、高可用的服务系统。
Nginx官方文档也明确提到,Nginx可以作为HTTP负载均衡器,把请求分发到多个应用服务器,从而提升性能、扩展性和可靠性。

二、什么是LVS?

LVS,全称是Linux Virtual Server,本质上是Linux内核层面的负载均衡方案。它工作在网络协议栈较底层的位置,通常用于四层负载均衡,也就是根据IP、端口、TCP/UDP连接等信息进行转发。

可以这样理解:

客户端
  |
  | 请求VIP
  v
LVS负载均衡器
  |
  | 根据调度算法转发
  v
真实服务器1 / 真实服务器2 / 真实服务器3

这里有几个核心概念:

VIP:Virtual IP,虚拟IP,对外暴露的入口地址。

Director:LVS负载均衡器,负责接收请求并转发。

Real Server:真实业务服务器,真正处理请求。

IPVS:LVS的核心模块,工作在Linux内核中。

ipvsadm:用户态管理工具,用来配置LVS规则。

从定位上看,LVS更像一个高性能流量分发器。它不关心HTTP路径、不关心请求头、不关心Cookie,也不理解具体业务接口,它只负责把连接高效地转发到后端机器。

三、什么是Nginx?

Nginx最常见的定位是Web服务器、反向代理服务器和七层负载均衡器

它通常工作在应用层,也就是第七层,可以理解HTTP协议内容,比如:

请求路径:/api/user
请求头:Host、Cookie、User-Agent
请求方法:GET、POST
请求参数:query、body

因此Nginx不仅可以做负载均衡,还可以做很多LVS不擅长的事情:

反向代理:把客户端请求转发给后端服务。

动静分离:静态资源走Nginx,动态请求走后端应用。

路径转发:不同URL转发到不同服务。

HTTPS终止:统一处理SSL证书。

限流、缓存、压缩:提升系统稳定性和访问性能。

Nginx官方文档中,反向代理的核心流程就是:接收客户端请求,将请求发送到指定代理服务器,获取响应后再返回给客户端。

四、LVS和Nginx最大的区别:四层 vs 七层

LVS和Nginx最核心的区别是工作层次不同

对比项 LVS Nginx
工作层次 四层负载均衡 七层负载均衡为主
主要依据 IP、端口、连接 URL、Header、Cookie、请求内容
性能 很高,接近内核转发 较高,但需要解析HTTP
灵活性 较弱 很强
典型场景 大流量入口、TCP转发 Web代理、接口转发、动静分离
是否理解HTTP 不理解 理解
配置复杂度 相对偏运维 相对更容易上手

LVS强在性能,Nginx强在灵活。

LVS适合站在系统最前面承接大流量;Nginx适合靠近业务层,根据HTTP规则做精细化转发。

五、Nginx负载均衡配置示例

最简单的Nginx负载均衡配置如下:

http {
    upstream backend {
        server 192.168.1.101:8080;
        server 192.168.1.102:8080;
        server 192.168.1.103:8080;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://backend;
        }
    }
}

这个配置的意思是:

客户端访问Nginx的80端口,Nginx会把请求转发到backend这个服务组中的后端服务器。

默认情况下,Nginx使用轮询方式进行负载均衡;官方文档也列出了Nginx开源版支持Round Robin、Least Connections、IP Hash和Generic Hash等负载均衡方式。

例如,使用最少连接算法:

upstream backend {
    least_conn;

    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
}

使用IP Hash,让同一个客户端尽量访问同一台后端机器:

upstream backend {
    ip_hash;

    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
}

这个适合一些需要会话保持的场景,但真正的分布式系统里,更推荐把Session放到Redis等外部存储中,而不是依赖单机内存Session。

六、LVS负载均衡配置示例

LVS通常通过ipvsadm配置。下面是一个简单示例:

# 创建一个虚拟服务,VIP为192.168.1.100,端口为80,调度算法为rr
ipvsadm -A -t 192.168.1.100:80 -s rr

# 添加真实服务器
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.101:80 -m
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.102:80 -m

# 查看LVS规则
ipvsadm -Ln

这里的几个参数含义:

-A:添加虚拟服务
-t:指定TCP服务
-s:指定调度算法
-a:添加真实服务器
-r:指定Real Server
-m:使用NAT模式
-Ln:查看当前规则

LVS常见调度算法包括:

算法 含义
rr Round Robin,轮询
wrr Weighted Round Robin,加权轮询
lc Least Connection,最少连接
wlc Weighted Least Connection,加权最少连接
sh Source Hash,源地址哈希
dh Destination Hash,目标地址哈希

其中wlc在很多场景下比较常见,因为它会综合考虑服务器权重和连接数。

七、LVS常见工作模式

LVS常见有三种模式:

1.NAT模式

请求和响应都经过LVS。

客户端 -> LVS -> Real Server
客户端 <- LVS <- Real Server

优点是配置简单,真实服务器可以在内网。

缺点是所有响应流量也经过LVS,LVS可能成为瓶颈。

2.DR模式

请求经过LVS,响应由Real Server直接返回客户端。

客户端 -> LVS -> Real Server
客户端 <- Real Server

优点是性能很高,适合大流量场景。

缺点是配置更复杂,对网络环境有要求。

3.TUN模式

通过IP隧道转发请求,Real Server可以不在同一个局域网。

这种模式用得相对少,适合跨网络、跨机房场景。

实际生产中,如果只是学习,可以先理解NAT模式;如果是高并发入口,重点理解DR模式。

八、LVS和Nginx能不能一起用?

可以,而且这是非常经典的架构。

常见组合是:

客户端
  |
  v
LVS / Keepalived
  |
  v
Nginx集群
  |
  v
后端应用服务集群

这个架构里,每一层职责不同:

LVS:负责最前面的四层流量分发,抗大流量。

Keepalived:负责LVS高可用,防止单点故障。

Nginx:负责七层反向代理、路径转发、HTTPS、限流、缓存。

后端服务:负责真正的业务逻辑处理。

这也是很多人容易混淆的地方:LVS和Nginx不是互相替代关系,而是可以上下游配合。

九、什么时候选LVS?什么时候选Nginx?

如果你的需求是:

只需要高性能转发TCP/UDP流量
入口流量很大
希望负载均衡器尽量少消耗CPU
不需要解析HTTP内容

优先考虑LVS。

如果你的需求是:

根据URL路径转发不同服务
做反向代理
处理HTTPS证书
做动静分离
做限流、缓存、压缩
需要读取请求头、Cookie

优先考虑Nginx。

如果是中大型系统,可以组合使用:

LVS负责入口高性能转发
Nginx负责七层业务路由
后端服务负责业务处理

总结

LVS和Nginx都是负载均衡方案,但它们解决的问题不完全一样。

LVS偏底层,工作在四层,核心优势是性能强、吞吐高,适合作为大流量入口。

Nginx偏应用层,工作在七层,核心优势是灵活,适合做HTTP反向代理、路径转发、动静分离、HTTPS终止等。

简单记忆:

LVS:四层,高性能,少干预,只管转发
Nginx:七层,高灵活,懂HTTP,适合业务代理

真正的生产架构里,两者经常不是二选一,而是组合使用:

LVS抗流量,Nginx做规则,应用服务做业务。

这才是理解LVS和Nginx最关键的一点。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐