目录
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的优势:
- 均在均衡和高可用性:LVS通过IP负载均衡(如NAT、DR和TUN等模式)将客户请求分发到多台真实服务器(Real servers),防止单台服务器过载。同时,它支持主备路由器配置,确保系统在故障时无缝切换,避免服务被断。
- 高性能和可拓展性;作为内核级实现,LVS处理Layer 4流量时开销低,支持数千并发连接,适用于Web、邮件、数据库等高负载场景。它能轻松拓展到数据中心级别,甚至跨数据中心均衡流量。
- 开源免费且灵活:LVS是免费开源软件,不需要昂贵的硬件负载均衡器(如F5或Cisco),可以通过软件配置实现复杂功能。同时,它于keepalived等工具结合使用,便于监控服务健康状态。
- 安全性于兼容性:LVS支持服务健康检查(如Pulse),能自动剔除故障服务器,并兼容多种网络协议和环境,如趋势科技的负载均衡配置。
LVS负载均衡四种工作模式
LVS一共4种工作模式,其中前三种最常用。
- LVS-NAT(network address translation) 地址转换模式,使用频率高。
- LVS-DR(direct routing)直接路由模式,使用频率最高。
- LVS-TUN(IP tunneling) 隧道模式,使用频率低。
- 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 直接回客户端
- 客户端 CIP → VIP 请求到达 VS;
- VS 只修改目标 MAC 地址,替换为选中 RS 的 MAC,三层 IP(CIP/VIP)完全不动;
- RS 收到数据包,本机配置了 VIP(lo 网卡虚拟 IP),识别数据包是发给自己;
- RS 直接回包:VIP → CIP,不经过 VS,走内网网关直达客户端。
关键约束
- VS 和 所有 RS必须同网段;
- RS 本地 lo 网卡绑定 VIP,且关闭 ARP 响应(防止 ARP 冲突,客户端 ARP 广播抢到 RS 机器);
- 回包不经过 VS,彻底解决 VS 带宽瓶颈,性能极强;
- 不支持端口映射,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.可以做端口映射。
快速记忆特点(小口诀)
- DR:只改MAC,同网段,性能天花版,线上首选;
- NAT:该目标IP,双向过调度,适合小规模;
- TUN:IP包套壳,跨机房专用;
- 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