news 2026/8/27 13:30:53

LVS(Linux Virtual Server)负载均衡全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LVS(Linux Virtual Server)负载均衡全解析

📘 LVS(Linux Virtual Server)负载均衡全解析

一、LVS 核心概念

1.1 什么是 LVS?

LVS(Linux Virtual Server)是 Linux 内核中的四层负载均衡软件,由章文嵩博士于 1998 年创建。它工作在内核空间(通过 netfilter 框架),能将大量并发请求按调度算法分发到后端真实服务器(Real Server),从而实现高可用、高并发的服务集群。

1.2 关键术语

术语说明
VS(Virtual Server)负载均衡器,对外提供虚拟服务
VIP虚拟 IP,客户端访问的入口 IP
DIP与后端 RS 通信的 IP(Director IP)
RS(Real Server)真正处理业务请求的后端服务器
CIP客户端 IP
RIP后端服务器的实际 IP
ipvsadm用户空间工具,用于管理 LVS 规则
ipvs内核模块,真正执行包转发

⚠️ LVS 没有统一配置文件,所有规则通过ipvsadm命令动态管理。


二、LVS 工作原理(简述)

  1. 客户端请求到达 Director Server(VS)的 VIP。
  2. 数据包经过内核 PREROUTING 链,发现目标是本机,送往 INPUT 链。
  3. INPUT 链上的 ipvs 模块根据预设的集群服务规则,修改数据包的目标地址/端口或封装新头部。
  4. 修改后的包经 POSTROUTING 链转发给选中的 RS。
  5. RS 处理请求后,根据工作模式决定响应路径(可能经 VS 返回,也可能直接返回客户端)。

三、LVS 三种工作模式对比

3.1 NAT 模式(Network Address Translation)

  • 特点:请求和响应都经过 VS,VS 需做源/目标 NAT。
  • 优点:RS 可使用私有 IP,支持端口映射,配置简单。
  • 缺点:VS 容易成为瓶颈,适合小规模集群。
  • 关键要求:RS 的网关必须指向 DIP。

3.2 DR 模式(Direct Routing) ★★★★★

  • 特点:请求经 VS 转发,响应直接由 RS 返回客户端。
  • 优点:性能最高,VS 几乎无瓶颈,生产环境最常用。
  • 缺点:VS 与 RS 必须在同一二层网络(同一交换机),不支持端口映射。
  • 关键要求
    • RS 的 lo 或 dummy 网卡配置 VIP(掩码 32)。
    • 关闭 RS 对 VIP 的 ARP 响应(修改内核参数)。

3.3 TUN 模式(Tunneling)

  • 特点:VS 封装 IP 隧道(额外 IP 头)将请求转发给 RS。
  • 优点:VS 和 RS 可以跨网段。
  • 缺点:隧道开销大,配置复杂,很少使用。

四、调度算法

静态算法(不关心后端负载)

  • RR(Round Robin):轮询
  • WRR(Weighted RR):加权轮询
  • SH(Source Hashing):源地址哈希
  • DH(Destination Hashing):目标地址哈希

动态算法(依据后端连接数等)

  • LC(Least Connections):最少连接数
  • WLC(Weighted LC,默认算法):加权最少连接
  • SED(Shortest Expected Delay):最短期望延迟
  • NQ(Never Queue):永不排队
  • LBLC(Locality-Based LC):基于局部性的最少连接
  • LBLCR(LBLC with Replication):带复制的局部性最少连接

五、实验环境总览

实验使用 VMware 虚拟机,划分两个网段:

  • 10.1.1.0/24(模拟外网客户端网段)
  • 10.1.8.0/24(内网服务器网段)

路由器(router)负责双网段互通,开启 IP 转发。


六、NAT 模式实验(含注释)

6.1 网络拓扑与角色

主机名IP 地址网关角色
client210.1.1.2110.1.1.10客户端
lvs10.1.1.10 (ens36)
10.1.8.10 (ens33)
10.1.8.2LVS(Director)
web1~web310.1.8.11~1310.1.8.10Real Server(Nginx)

⚠️ NAT 模式下,RS 的网关必须指向 LVS 的 DIP(10.1.8.10)。

6.2 基础配置(省略重复部分)

① 开启 LVS 的 IP 转发及防火墙
# 开启路由转发echo"net.ipv4.ip_forward = 1">>/etc/sysctl.confsysctl-p# 配置防火墙(允许伪装)systemctlenablefirewalld--nowfirewall-cmd --set-default-zone=trusted firewall-cmd --add-masquerade--permanentfirewall-cmd --add-masquerade
② 部署后端 Nginx(web1~web3)
# 安装 Nginxyuminstall-ynginx# 生成测试主页(显示主机名)echo"welcome to$(hostname)">/usr/share/nginx/html/index.html systemctlenablenginx--now
③ 安装 ipvsadm(LVS 上)
yuminstall-yipvsadmtouch/etc/sysconfig/ipvsadm systemctlenableipvsadm--now

6.3 配置 LVS NAT 负载均衡(带注释)

# 1. 添加一个虚拟服务:VIP = 10.1.1.10,端口 80,使用轮询算法(rr)ipvsadm-A-t10.1.1.10:80-srr# 2. 添加真实服务器:使用 NAT 模式(-m),权重为 1(默认)ipvsadm-a-t10.1.1.10:80-r10.1.8.11-mipvsadm-a-t10.1.1.10:80-r10.1.8.12-mipvsadm-a-t10.1.1.10:80-r10.1.8.13-m# 3. 保存规则到文件(以便开机恢复)ipvsadm-save-n>/etc/sysconfig/ipvsadm# 4. 查看规则ipvsadm-Ln

输出示例:

Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward weight ActiveConn InActConn TCP 10.1.1.10:80 rr -> 10.1.8.11:80 Masq 1 0 0 -> 10.1.8.12:80 Masq 1 0 0 -> 10.1.8.13:80 Masq 1 0 0

6.4 验证 NAT 模式

在客户端(10.1.1.21)执行循环测试:

foriin{1..90};docurl-s10.1.1.10;done|sort|uniq-c

结果示例(轮询):

30 welcome to web1.laogao.cloud 30 welcome to web2.laogao.cloud 30 welcome to web3.laogao.cloud

6.5 动态修改调度算法为 WRR

# 修改虚拟服务的调度算法为加权轮询ipvsadm-E-t10.1.1.10:80-swrr# 修改权重:web2 权重 2,web3 权重 3(web1 保持默认 1)ipvsadm-e-t10.1.1.10:80-r10.1.8.12-m-w2ipvsadm-e-t10.1.1.10:80-r10.1.8.13-m-w3

再次测试,请求比例应为 1:2:3(web1:web2:web3)。

6.6 NAT 模式的坑 & 解决

问题client1(10.1.8.21)无法通过 VIP 10.1.1.10 访问后端?
原因:client1 发出的请求经过 LVS 转发到 RS,RS 看到源 IP 是 10.1.8.21(同网段),会直接将响应发回 client1,而不是经过 LVS。client1 收到的响应源 IP 是 RS 的真实 IP(10.1.8.11),而非 VIP,导致连接混乱。
解决方法:在每台 RS 上添加静态路由,强制将发往 client1 的响应包路由到 LVS:

nmcli connection modify ens33 ipv4.routes'10.1.8.21 255.255.255.255 10.1.8.10'nmcli connection up ens33

更通用的做法是让 RS 的默认网关指向 LVS,这样所有响应包都经过 LVS 做源 NAT。


七、DR 模式实验(生产环境首选,含详细注释)

7.1 网络拓扑与角色

主机名IP 地址网关VIP角色
client210.1.1.2110.1.1.20外网客户端
client110.1.8.2110.1.8.20内网客户端
lvs10.1.8.1010.1.8.2010.1.8.100Director
web1~web310.1.8.11~1310.1.8.2010.1.8.100Real Server

路由器配置略(类似 NAT 模式,需开启转发)。

7.2 Real Server 关键配置(所有 RS 执行)

① 创建 dummy 网卡并绑定 VIP(掩码 32)
# 添加 dummy 虚拟网卡,设置 IP 为 10.1.8.100/32(仅自己可见)nmcli connectionaddtypedummy ifname dummy con-name dummy\ipv4.method manual ipv4.addresses10.1.8.100/32 nmcli connection up dummy
② 修改 ARP 内核参数(防止 RS 响应 VIP 的 ARP 请求)
cat>>/etc/sysctl.conf<<EOF net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.dummy.arp_ignore = 1 net.ipv4.conf.dummy.arp_announce = 2 EOFsysctl-p

参数解释

参数含义
arp_ignore1仅当 ARP 请求的目标 IP 与接收网卡的主 IP 完全匹配时才响应
arp_announce2发送 ARP 通告时,使用与目标 IP 同子网的本地 IP 作为源 IP,否则不发送

🎯 目的:避免 RS 上的 VIP 被广播出去,导致路由器将流量直接发给 RS 而非 LVS。

7.3 Director(LVS)配置

① 绑定 VIP(可选,用于本机接收报文)
# 同样添加 dummy 网卡绑定 VIP(也可直接配置在物理网卡上)nmcli connectionaddtypedummy ifname dummy con-name dummy\ipv4.method manual ipv4.addresses10.1.8.100/32 nmcli connection up dummy
② 安装 ipvsadm 并配置 DR 模式规则
yuminstall-yipvsadmtouch/etc/sysconfig/ipvsadm systemctlenableipvsadm--now# 清除旧规则ipvsadm-C# 添加虚拟服务(VIP:80,调度算法 rr)ipvsadm-A-t10.1.8.100:80-srr# 添加真实服务器,使用 DR 模式(-g),权重默认 1ipvsadm-a-t10.1.8.100:80-r10.1.8.11-gipvsadm-a-t10.1.8.100:80-r10.1.8.12-gipvsadm-a-t10.1.8.100:80-r10.1.8.13-g# 保存规则ipvsadm-save-n>/etc/sysconfig/ipvsadm

查看规则:

ipvsadm-Ln# Forward 列显示 "Route" 表示 DR 模式Prot LocalAddress:Port Scheduler ->RemoteAddress:Port Forward weight ActiveConn InActConn TCP10.1.8.100:80 rr ->10.1.8.11:80 Route100->10.1.8.12:80 Route100->10.1.8.13:80 Route100

7.4 验证 DR 模式

从客户端(client1 或 client2)访问 VIP:

foriin{1..90};docurl-s10.1.8.100;done|sort|uniq-c

输出应为均匀轮询(每个 RS 30 次)。
此时用tcpdump抓包可见:请求包源 IP 为客户端,目标 IP 为 VIP(10.1.8.100),MAC 目标为 LVS 的 MAC;响应包直接从 RS 返回客户端,源 IP 为 VIP,不经过 LVS。

7.5 DR 模式一键脚本(RS 端)

#!/bin/bash# 文件名: rs_dr.sh# 描述: 配置 Real Server 的 VIP 及 ARP 参数VIP=10.1.8.100case$1instart)echo-n"Start LVS Real Server ... "# 添加 dummy 网卡绑定 VIPifnmcli connection|grep-qdummy;thennmcli connection modify dummy ipv4.method manual ipv4.addresses$VIP/32elsenmcli connectionaddtypedummy ifname dummy con-name dummy\ipv4.method manual ipv4.addresses$VIP/32finmcli connection up dummy# 关闭 ARP 响应和通告echo1>/proc/sys/net/ipv4/conf/all/arp_ignoreecho2>/proc/sys/net/ipv4/conf/all/arp_announceecho1>/proc/sys/net/ipv4/conf/dummy/arp_ignoreecho2>/proc/sys/net/ipv4/conf/dummy/arp_announceecho"OK";;stop)echo-n"Stop LVS Real Server ... "nmcli connection delete dummyecho0>/proc/sys/net/ipv4/conf/all/arp_ignoreecho0>/proc/sys/net/ipv4/conf/all/arp_announceecho"OK";;*)echo"Usage:$0{start|stop}"exit1esac

7.6 DR 模式一键脚本(Director 端)

#!/bin/bash# 文件名: lvs_dr.sh# 描述: 配置 LVS Director 的 VIP 和 ipvs 规则VIP=10.1.8.100PORT=80RS_LIST="10.1.8.11 10.1.8.12 10.1.8.13"SCHEDULER="rr"# 可改为 wrr, wlc 等# 安装 ipvsadm(若未安装)rpm-qipvsadm||yuminstall-yipvsadmcase$1instart)echo-n"Start LVS Director Server ... "# 绑定 VIP 到 dummy 网卡(或物理网卡别名)if!ipaddr|grep-q$VIP;thennmcli connection modify ens33 +ipv4.addresses$VIP/32 nmcli connection up ens33fi# 清空所有规则ipvsadm-C# 添加虚拟服务ipvsadm-A-t${VIP}:${PORT}-s$SCHEDULER# 添加真实服务器(DR 模式 -g)forrsin$RS_LIST;doipvsadm-a-t${VIP}:${PORT}-r$rs-gdoneecho"OK";;stop)echo-n"Stop LVS Director Server ... "ipvsadm-Cnmcli connection modify ens33-ipv4.addresses$VIP/32 nmcli connection up ens33echo"OK";;*)echo"Usage:$0{start|stop}"exit1esac

八、LVS 常用命令速查表

命令说明
ipvsadm -A -t VIP:port -s rr添加 TCP 虚拟服务,调度算法 rr
ipvsadm -a -t VIP:port -r RIP -g添加 DR 模式真实服务器
ipvsadm -a -t VIP:port -r RIP -m添加 NAT 模式真实服务器
ipvsadm -E -t VIP:port -s wrr修改调度算法为 wrr
ipvsadm -e -t VIP:port -r RIP -w 2修改某 RS 权重为 2
ipvsadm -d -t VIP:port -r RIP删除某 RS
ipvsadm -D -t VIP:port删除整个虚拟服务
ipvsadm -C清空所有规则
ipvsadm -Ln查看当前规则(数字格式)
ipvsadm -Lcn查看持久连接表
ipvsadm-save -n保存规则(标准输出)

九、总结与最佳实践

  1. 生产环境首选 DR 模式:性能最高,配置也最复杂(需处理 ARP 问题)。
  2. NAT 模式适合小规模或混合云场景:RS 可以私有 IP,但 LVS 压力大。
  3. 调度算法选择
    • 长连接服务(如数据库) → WLC / LC
    • 短连接无状态服务(如 HTTP) → RR / WRR
    • 需要会话保持 → SH(源地址哈希)或启用持久连接(-p
  4. 高可用:LVS 自身需配合 Keepalived 实现主备(VRRP),否则 LVS 单点故障会导致整个集群不可用。
  5. 监控:建议对 LVS 的ipvsadm -Ln输出、连接数、后端 RS 健康状态进行监控。

通过本实验,可以完全掌握 LVS 的核心原理和两种主流模式的部署方法,为搭建高并发、高可用的 Web 或数据库集群打下坚实基础。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/27 13:28:11

亚太赛C题实战复盘:数据驱动下的全球变暖建模与预测

1. 项目概述&#xff1a;一次完整的亚太赛C题实战复盘去年带队打完亚太赛&#xff0c;C题“全球是否在变暖&#xff1f;”给我留下了挺深的印象。这题看起来是个老生常谈的话题&#xff0c;但组委会出得相当巧妙&#xff0c;它不是一个简单的“是或否”判断题&#xff0c;而是一…

作者头像 李华
网站建设 2026/8/27 13:25:11

AI大模型,新的风口,高薪且竞争相对较小

前言 近两年来&#xff0c;随着大厂频繁裁员的消息不断传出&#xff0c;大厂的光环似乎不再那么耀眼。然而&#xff0c;尽管如此&#xff0c;大厂的薪资水平仍然远超小厂&#xff0c;仍然是众多求职者的首选。在这样的背景下&#xff0c;AI大模型作为新兴技术领域&#xff0c;正…

作者头像 李华
网站建设 2026/8/27 13:25:03

解密Prompt系列16. LLM对齐经验之数据越少越好?LTD LIMA AlpaGasus

前言 LLM Agent中间插个队&#xff0c;总结下指令微调、对齐数据相关的方案&#xff0c;已经凑够7篇论文可以召唤神龙啦&#xff01;论文都是以优化指令样本为核心&#xff0c;Data-Centric的观点比较一致&#xff1a;指令微调也就是对齐阶段的数据质量>>数量&#xff0…

作者头像 李华
网站建设 2026/8/27 13:24:42

隐藏控制状态:大模型内部的安全开关与防御指南

如果只看输入和输出&#xff0c;大模型就像一个黑盒&#xff1a;你给它一段问题&#xff0c;它给你一段答案&#xff0c;过程是否正确&#xff0c;模型内部到底在“想”什么&#xff0c;往往没人知道。最近前沿AI&#xff08;Frontier AI&#xff09;社区里频繁讨论一个概念——…

作者头像 李华
网站建设 2026/8/27 13:24:28

微信小程序测试-与app区别、测试流程

app与小程序的区别 入口&#xff1a; app&#xff1a;appstore或者android应用商城从搜索微信小程序&#xff1a;从微信中搜索即可 安装卸载 app&#xff1a;需要安装卸载测试微信小程序&#xff1a;不需要 注册登陆 app&#xff1a;需要注册登陆测试微信小程序&#xff1a;不需…

作者头像 李华
网站建设 2026/8/27 13:23:55

Python自动化Excel多列相关性分析:从暴力遍历到图论社区发现

1. 项目概述&#xff1a;从“算一列”到“算所有列”的自动化思维跃迁 在日常的数据分析工作中&#xff0c;我们经常拿到一个结构未知的Excel文件&#xff0c;里面可能包含几十甚至上百列数据。老板或业务方抛来一个看似简单的问题&#xff1a;“帮我看看这些指标之间哪些相关性…

作者头像 李华