别再死记 LVS!一文吃透 LVS 负载均衡:发展史、4 种工作模式 + 完整实操命令
2026/7/20 12:16:01 网站建设 项目流程

目录

LVS是什么?

LVS发展史

特点优势是什么?

LVS负载均衡四种工作模式

LVS-NAT

LVS-DR(生产环境最常用)

LVS-TUN

LVS-FullNAT(内核2.6.28新增)

快速记忆特点(小口诀)

LVS基本操作

规划安排

开始创建集群

查看

开始增加服务器

删除集群及服务器

查看规则

查看连接情况

保存规则

真正的保存规则到相应文件

清空规则

重启自动加载


LVS是什么?

LVS(Linux Virtual Server,linu虚拟服务器)是一个开源的负载均衡软件项目,主要用于Linux内核中实现网络服务的负载均衡和高可用性。它由章文嵩博士于 1998 年启动,作为一个免费开源项目,旨在通过集群技术构建高性能、高可用的服务器系统。LVS的出现是为了解决这些问题,通过IP负载均衡技术将流量分发到多个后端服务器,从而实现可扩展的网络服务。项目早期聚焦于Layer 4交换(传输层负载均衡),并逐步集成到Linux内核中,成为Red Hat等企业级发行版的标准组件。如今,LVS已经被广泛应用于大型网站,作为高流量负载均衡器。

LVS发展史

  • 1998年5月LVS第一个版本发布,Linux kernel 2.0 上的第一个patch,只支持VS/NAT,实现round-robin调度算法。
  • 1998年11月实现了VS/IPTunneling机制。
  • 1999年5月实现了VS/Direct Routing机制,移植到Linux kernel 2.2。
  • 2000年5月开始移植到Linux Kernel 2.4。
  • 2002年9月份开始移植到 linux kernel 2.5。
  • 2003年10月收录到Linux Kernel 2.5开发版。
  • 2003年11月Linux Kernel 2.4.23 包含LVS。
  • 2003年12月Linux Kernel 2.6.0 包含LVS。
  • 2008年11月Google工程师帮着实现了IPv6支持。
  • 2010年2月实现了SCTP传输层协议支持。

特点优势是什么?

LVS的核心优势在于其高效、可靠和开源特性,主要用于构建大规模、可拓展性的服务器集群,适用于需要成本效益高、性能优越的负载均衡场景,尤其在云计算和大数据时代,它已成为构建弹性基础设施的首选工具。以下是LVS的优势:

  1. 均在均衡和高可用性:LVS通过IP负载均衡(如NAT、DR和TUN等模式)将客户请求分发到多台真实服务器(Real servers),防止单台服务器过载。同时,它支持主备路由器配置,确保系统在故障时无缝切换,避免服务被断。
  2. 高性能和可拓展性;作为内核级实现,LVS处理Layer 4流量时开销低,支持数千并发连接,适用于Web、邮件、数据库等高负载场景。它能轻松拓展到数据中心级别,甚至跨数据中心均衡流量。
  3. 开源免费且灵活:LVS是免费开源软件,不需要昂贵的硬件负载均衡器(如F5或Cisco),可以通过软件配置实现复杂功能。同时,它于keepalived等工具结合使用,便于监控服务健康状态。
  4. 安全性于兼容性:LVS支持服务健康检查(如Pulse),能自动剔除故障服务器,并兼容多种网络协议和环境,如趋势科技的负载均衡配置。

LVS负载均衡四种工作模式

LVS一共4种工作模式,其中前三种最常用。

  1. LVS-NAT(network address translation) 地址转换模式,使用频率高。
  2. LVS-DR(direct routing)直接路由模式,使用频率最高。
  3. LVS-TUN(IP tunneling) 隧道模式,使用频率低。
  4. LVS-FullNAT(完全NAT模式),使用频率很低。

在理解这四种原理之前,我们先了解基础角色:

术语

全称

中文含义

出现位置

作用说明

CIP

Client IP

客户端 IP

客户端

服务请求的来源地址。

VIP

Virtual IP

虚拟服务 IP

LVS 调度器(对外)

外部访问 LVS 的入口 IP,代表整个集群服务。

VS / LB

Virtual Server

虚拟服务器

LVS 调度器

VIP + 端口组合,LVS 对外暴露的“虚拟服务实例”。

DIP

Director IP

调度器内网 IP

LVS 调度器(对内)

LVS 与真实服务器之间通信的 IP。

RIP

Real Server IP

真实服务器 IP

RS 节点

RS 接收 LVS 转发请求的 IP。

RS

Real Server

真实服务器

应用服务器

真正处理业务请求并返回响应。

LVS-NAT

核心原理

数据包进出都经过 VS,双向流量都由 VS 转发,靠修改 IP 地址实现负载。

1.客户端请求 CIP → VIP 到达 VS;

2.VS 修改目标 IP:把 VIP 换成某一台 RIP,转发给对应 RS;

3.RS 收到请求,回包时目标 IP 是 CIP,源 IP 是 RIP;

4.回包必须经过 VS,VS 修改源 IP:把 RIP 换回 VIP,再发给客户端。

关键特点

1.RS 网关必须指向 DIP(调度器内网 IP),否则回包绕开 VS 直接丢包;

2.所有流量双向经过 VS,VS 网卡带宽是瓶颈

3.RS 和 VS 必须在同一网段

4.配置简单,支持端口映射(80→8080);

5.适合中小规模集群,并发量不高场景。

LVS-DR(生产环境最常用)

核心原理

只改二层 MAC 地址,三层 IP 全程不变,只有入站流量走 VS,出站流量 RS 直接回客户端

  1. 客户端 CIP → VIP 请求到达 VS;
  2. VS 只修改目标 MAC 地址,替换为选中 RS 的 MAC,三层 IP(CIP/VIP)完全不动;
  3. RS 收到数据包,本机配置了 VIP(lo 网卡虚拟 IP),识别数据包是发给自己;
  4. RS 直接回包:VIP → CIP,不经过 VS,走内网网关直达客户端。

关键约束

  1. VS 和 所有 RS必须同网段
  2. RS 本地 lo 网卡绑定 VIP,且关闭 ARP 响应(防止 ARP 冲突,客户端 ARP 广播抢到 RS 机器);
  3. 回包不经过 VS,彻底解决 VS 带宽瓶颈,性能极强;
  4. 不支持端口映射,RS 端口必须和 VIP 访问端口一致。

LVS-TUN

核心原理

1.客户端 CIP → VIP 到 VS;

2.VS 新建 IP 隧道头,把原数据包整体封装,外层目标 IP 为 RIP,转发给 RS;

3.RS 解封装隧道,取出原始请求包(CIP→VIP);

4.RS 直接回复 VIP→CIP,不经过 VS。

关键特点

1.VS 和 RS可以跨网段、跨机房、跨公网

2.RS 内核必须开启 IPIP 隧道模块;

3.RS lo 网卡绑定 VIP,关闭 ARP;

4.仅入站流量过 VS,无带宽瓶颈。

LVS-FullNAT(内核2.6.28新增)

核心原理

双向完整 NAT,同时修改源 IP + 目标 IP,彻底打破同网段限制。

1.客户端 CIP→VIP 到达 VS;

2.VS 修改两处:

目标 IP:VIP → RIP

源 IP:CIP → DIP(调度器内网 IP)

3.RS 收到请求,看到来源是 DIP,回包目标为 DIP;

4.回包回到 VS,再次双向转换:源 RIP→VIP,目标 DIP→CIP,发回客户端。

关键特点

1.VS 与 RS不需要同一网段,无网段限制;

2.双向流量全部经过 VS,带宽瓶颈和普通 NAT 一样;

3.RS 不需要配置 VIP,无需处理 ARP,配置最简单;

4.可以做端口映射。

快速记忆特点(小口诀)

  1. DR:只改MAC,同网段,性能天花版,线上首选;
  2. NAT:该目标IP,双向过调度,适合小规模;
  3. TUN:IP包套壳,跨机房专用;
  4. FullNAT:双选全改IP,无网段限制,但性能最差。

LVS基本操作

规划安排

LVS 192.168.57.100/24

RS1 192.168.57.101/24 web1

RS2 192.168.57.102/24 web2

安装LVS操作

yum install -y ipvsadm

Ipvsadm --help

echo "hello 57.101 Nginx1" > /usr/share/nginx/html/index.html

echo "hello 57.102 Nginx2" > /usr/share/nginx/html/index.html

两个都启动nginx

systemctl start nginx

ss -tunlp |grep nginx

LVS访问web测试

[root@LVS ~]# curl 192.168.57.101

hello 57.101 Nginx1

[root@LVS ~]# curl 192.168.57.102

hello 57.102 Nginx2

开始创建集群

查看版本信息

[root@LVS ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

LVS默认模式DR

默认算法WLC,这里换成rr

[root@LVS ~]# ipvsadm -A -t 192.168.57.100:80 -s rr

查看

[root@LVS ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.57.100:80 rr

开始增加服务器

[root@LVS ~]# ipvsadm --add-server --tcp-service 192.168.57.100:80 --real-server 192.168.57.101:80 --masquerading

[root@LVS ~]# ipvsadm --add-server --tcp-service 192.168.57.100:80 --real-server 192.168.57.102:80 --masquerading

查看

[root@LVS ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.57.100:80 rr

-> 192.168.57.101:80 Masq 1 0 0

-> 192.168.57.102:80 Masq 1 0 0

删除集群及服务器

[root@LVS ~]# ipvsadm -d -t 192.168.57.100:80 -r 192.168.57.101:80

[root@LVS ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.57.100:80 rr

-> 192.168.57.102:80 Masq 1 0 0

[root@LVS ~]#

或者带全称

[root@LVS ~]# ipvsadm --delete-server --tcp-service 192.168.57.100:80 --real-server 192.168.57.102:80

查看规则

[root@LVS ~]# ipvsadm -Ln

还有其他语句但是我没有列出来

或者查看文件

[root@LVS ~]# cat /proc/net/ip_vs

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP C0A83964:0050 rr

-> C0A83965:0050 Masq 1 0 0

查看连接情况

[root@LVS ~]# cat /proc/net/ip_vs_conn

Pro FromIP FPrt ToIP TPrt DestIP DPrt State Expires PEName PEData

保存规则

注意:默认规则是在内存中,重启则清空

打印规则,不是真的保存,展示

[root@LVS ~]# ipvsadm-save

-A -t LVS:http -s rr

-a -t LVS:http -r 192.168.57.101:http -m -w 1

-a -t LVS:http -r 192.168.57.102:http -m -w 1

[root@LVS ~]# ipvsadm-save -n

-A -t 192.168.57.100:80 -s rr

-a -t 192.168.57.100:80 -r 192.168.57.101:80 -m -w 1

-a -t 192.168.57.100:80 -r 192.168.57.102:80 -m -w 1

真正的保存规则到相应文件

[root@LVS ~]# ipvsadm-save -n > ipvs1001.rules

[root@LVS ~]# ls

anaconda-ks.cfg ipvs1001.rules

[root@LVS ~]# cat ipvs1001.rules

-A -t 192.168.57.100:80 -s rr

-a -t 192.168.57.100:80 -r 192.168.57.101:80 -m -w 1

-a -t 192.168.57.100:80 -r 192.168.57.102:80 -m -w 1

清空规则

[root@LVS ~]# ipvsadm -C

[root@LVS ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

导入规则

[root@LVS ~]# ipvsadm-restore -n < ipvs1001.rules

[root@LVS ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.57.100:80 rr

-> 192.168.57.101:80 Masq 1 0 0

-> 192.168.57.102:80 Masq 1 0 0

重启自动加载

pvsadm服务自身参数配置,不存转发规则 /etc/sysconfig/ipvsadm-config

ipvsadm.service默认读取/写入的配置文件 /etc/sysconfig/ipvsadm 这个文件不会自动生成,需要手动执行保存命令,否则文件是空 / 不存在

[root@LVS ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm

[root@LVS ~]# cat /etc/sysconfig/ipvsadm

-A -t 192.168.57.100:80 -s rr

-a -t 192.168.57.100:80 -r 192.168.57.101:80 -m -w 1

-a -t 192.168.57.100:80 -r 192.168.57.102:80 -m -w 1

[root@LVS ~]# cat /etc/sysconfig/ipvsadm-config

IPVS_MODULES_UNLOAD="yes"

IPVS_SAVE_ON_STOP="yes"

IPVS_SAVE_ON_RESTART="yes"

IPVS_STATUS_NUMERIC="yes"

[root@LVS ~]# echo 'ipvsadm-restore < /etc/sysconfig/ipvsadm' >> /etc/rc.local

[root@LVS ~]# chmod +x /etc/rc.local

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询