文章目录
- [LVS 小白完整教程(Linux虚拟服务器负载均衡)](#LVS 小白完整教程(Linux虚拟服务器负载均衡))
-
- 一、核心名词(必须看懂,后面才不会懵)
- 二、四种工作模式对比
- 三、模式详解
- 四、LVS调度算法
- 五、ipvsadm命令速查表
-
- [1. 集群服务操作(定义VIP、端口、调度算法)](#1. 集群服务操作(定义VIP、端口、调度算法))
- [2. 添加/管理后端Real Server](#2. 添加/管理后端Real Server)
- 六、实战一:LVS‑NAT完整部署示例
- 七、实战二:LVS‑DR模式完整部署(生产常用)
LVS 小白完整教程(Linux虚拟服务器负载均衡)
LVS全称 Linux Virtual Server ,章文嵩博士1998年开源开发,工作在内核层 ,性能极高,用来把多台后端服务器包装成一台虚拟对外服务的集群。 LVS =
ipvs(内核模块,真正干活) +ipvsadm(命令行管理工具,没有配置文件,全部靠命令操作)。
一、核心名词(必须看懂,后面才不会懵)
| 名词 | 全称 | 通俗解释 |
|---|---|---|
| Director | 调度器 | LVS负载均衡主机,集群入口,也叫VS |
| RS | Real Server | 后端真实服务器(Nginx/Apache等),真正处理用户请求 |
| VIP | Virtual IP | 用户访问的IP,对外暴露服务的虚拟IP |
| DIP | Director IP | LVS调度器和后端RS通信的内网IP |
| RIP | Real Server IP | 后端真实服务器的IP地址 |
| CIP | Client IP | 用户客户端的IP地址 |
简单流向:客户端CIP → VIP(LVS入口) → DIP → RIP(后端服务器)
💡提示:
ipvs钩子挂在内核netfilter的INPUT链上,数据包走到这里才做负载均衡转发。- 生产环境Director不要用虚拟机,流量大CPU压力高。
二、四种工作模式对比
| 模式 | 核心原理 | 请求路径 | 优点 | 缺点 | 生产使用 |
|---|---|---|---|---|---|
| NAT | 修改数据包IP(目标IP转换) | 请求、响应全部经过LVS | 配置最简单,支持端口映射,后端可以任意操作系统 | LVS容易成为性能瓶颈 | 小规模测试、学习用 |
| DR(直接路由) | 只修改二层MAC地址,IP头不动 | 请求走LVS,响应直接后端返回客户端 | 性能最强,几乎无瓶颈 | LVS和后端RS必须同一个局域网,不能端口映射 | ✅生产99%使用 |
| TUN隧道 | 包外面再套一层IP隧道包头 | 请求走LVS,响应直回客户端 | 支持跨机房跨网段 | 需要服务器支持IP隧道,配置复杂 | 极少用 |
| FullNat | 同时改源IP+目标IP | 请求响应都走LVS | 后端可以任意网段 | 内核版本要求高 | 了解即可 |
重点掌握:NAT、DR,TUN了解概念即可。
三、模式详解
1)LVS‑NAT模式
全部流量都过LVS,类似路由器做DNAT转换。
- 用户请求:
CIP → VIP,数据包到LVS调度器 - ipvs修改数据包目标IP:VIP → RIP,转发给后端RS
- RS处理完,回复数据包源IP为RIP,目标CIP,包回到LVS
- LVS修改源IP:RIP→VIP,返回给客户端。
✅ NAT硬性条件:
- 后端RS网关必须指向LVS的DIP,否则回包不经过LVS,访问失败。
- LVS调度器必须开启内核转发
net.ipv4.ip_forward=1。 - RIP与DIP同一个网段。
2)LVS‑DR模式(生产首选)
不改IP,只改MAC地址,后端服务器直接把结果返回给用户,LVS只处理入流量,不处理返回流量,性能高很多。
数据包变化:
- IP头全程不变:源IP=CIP,目标IP=VIP
- 只修改二层MAC:目标MAC改成后端RS网卡MAC,实现局域网二层转发。
✅ DR硬性条件:
- LVS调度器和所有RS必须在同一个局域网(同一交换机)
- 所有RS本机上配置VIP(
/32掩码,绑定在虚拟网卡/dummy网卡) - ARP抑制!!关键:RS不能对外响应VIP的ARP请求,否则客户端ARP解析直接找到后端服务器,绕过LVS,负载均衡失效。
两个核心内核参数(RS上配置)
net.ipv4.conf.all.arp_ignore=1:仅当ARP请求目标IP正好是接收网卡IP才应答,虚拟网卡收到VIP的ARP不回复。net.ipv4.conf.all.arp_announce=2:ARP广播通告的时候,不使用VIP向外广播,避免ARP漂移冲突。
RS网关不能指向DIP,网关指向真实的路由器。
3)LVS‑TUN隧道模式
在原始IP数据包外面再封装一层新IP包头(外层源DIP,目标RIP),通过IP隧道把包发给跨机房RS;RS拆外层IP,处理原始请求,响应直接回客户端。 缺点:所有RS都需要支持IP隧道,配置复杂,企业极少部署。
四、LVS调度算法
分为静态算法(不看服务器负载) 、动态算法(看连接数负载)。
静态调度(固定策略,无视后端压力)
- rr 轮询:请求轮流分给每台服务器,假设所有服务器性能完全一样。
- wrr 加权轮询:给服务器设置权重,权重越大接收请求越多。服务器配置不一样首选。
- sh 源地址哈希:同一个客户端IP永远调度到同一台RS,实现会话绑定。
- dh 目标地址哈希:根据访问目标IP哈希分配,多用于缓存集群。
动态调度(根据连接数动态分配,生产推荐)
-
lc 最少连接:分配给当前活跃连接数最少的后端服务器。
-
wlc 加权最少连接(LVS默认算法⭐):结合权重+活跃连接,最通用,绝大多数生产使用。
-
SED 最短期望延迟:WLC改进,只计算活跃连接。
-
NQ永不排队
:SED改进,如果有服务器连接数为0,直接分配过去,保证空闲机器一定会收到流量。
LBLC / LBLCR:缓存集群专用,普通Web集群基本不用。
五、ipvsadm命令速查表
注意:LVS没有配置文件,规则保存在内存;重启服务器全部丢失,需要保存/恢复规则。
1. 集群服务操作(定义VIP、端口、调度算法)
# 添加虚拟集群服务(-t tcp,VIP:端口,-s 指定调度算法)
ipvsadm -A -t 10.1.1.10:80 -s rr
# 修改集群服务
ipvsadm -E -t 10.1.1.10:80 -s wrr
# 删除整个集群服务
ipvsadm -D -t 10.1.1.10:80
# 清空全部ipvs规则
ipvsadm -C
# 保存规则到文件
ipvsadm -S -n > /etc/sysconfig/ipvsadm
# 载入恢复规则
ipvsadm -R
2. 添加/管理后端Real Server
# -a 添加RS;-r 后端服务器地址;-m NAT模式;-g DR模式;-i TUN模式;-w 权重
# NAT模式添加后端(-m masquerade)
ipvsadm -a -t 10.1.1.10:80 -r 10.1.8.11 -m -w 1
# DR模式添加后端(-g gateway)
ipvsadm -a -t 10.1.8.100:80 -r 10.1.8.11:80 -g -w 1
# 修改后端权重
ipvsadm -e -t 10.1.8.100:80 -r 10.1.8.12:80 -g -w 2
# 删除某一台后端服务器
ipvsadm -d -t 10.1.8.100:80 -r 10.1.8.12:80
# 查看规则 -n数字格式,不解析主机名
ipvsadm -Ln
# 清空计数器统计
ipvsadm -Z
参数小记:
-m→ NAT模式-g→ DR模式(gateway)-i→ TUN隧道模式
六、实战一:LVS‑NAT完整部署示例
实验拓扑说明
| 主机 | IP | 网关 | 角色 |
|---|---|---|---|
| lvs调度器 | VIP:10.1.1.10;DIP:10.1.8.10 | 10.1.8.2 | LVS Director |
| web1 | 10.1.8.11 | 10.1.8.10 | 后端Nginx |
| web2 | 10.1.8.12 | 10.1.8.10 | 后端Nginx |
| web3 | 10.1.8.13 | 10.1.8.10 | 后端Nginx |
| client客户端 | 10.1.1.21 | 10.1.1.10 | 测试访问 |
⚠️关键点:所有后端web服务器网关必须指向LVS的DIP(10.1.8.10),否则回包不走LVS。
步骤1:LVS调度器配置
-
开启内核IP转发
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p -
关闭防火墙或者设置trusted区域
systemctl enable --now firewalld
firewall-cmd --set-default-zone=trusted -
安装ipvsadm
yum install -y ipvsadm
touch /etc/sysconfig/ipvsadm
systemctl enable ipvsadm -
创建LVS NAT规则
创建集群服务,轮询rr
ipvsadm -A -t 10.1.1.10:80 -s rr
添加三台后端,NAT模式(-m)
ipvsadm -a -t 10.1.1.10:80 -r 10.1.8.11 -m
ipvsadm -a -t 10.1.1.10:80 -r 10.1.8.12 -m
ipvsadm -a -t 10.1.1.10:80 -r 10.1.8.13 -m#保存规则
ipvsadm -S -n > /etc/sysconfig/ipvsadm#查看
ipvsadm -Ln
步骤2:后端web服务器配置(web1/web2/web3全部执行)
-
设置网关指向LVS DIP:
10.1.8.10 -
安装nginx,修改首页便于观察
yum install -y nginx
echo "welcome $(hostname)" > /usr/share/nginx/html/index.html
systemctl enable --now nginx
步骤3:客户端测试
#循环90次访问VIP
for i in {1..90};do curl -s 10.1.1.10;done|sort|uniq -c
输出会均衡访问三台web服务器。
📝NAT模式踩坑点: 如果客户端和后端RS同一个网段,访问失败。因为RS收到请求源IP和自己同一网段,直接回包给客户端,绕过LVS。解决:给RS添加主机路由,访问客户端网段网关强制走LVS。
七、实战二:LVS‑DR模式完整部署(生产常用)
DR模式重点:RS上绑定VIP/32 + ARP抑制,RS网关不要指向LVS。
拓扑
| 主机 | IP | 网关 | 角色 |
|---|---|---|---|
| lvs调度器 | DIP:10.1.8.10,VIP:10.1.8.100/32 | 10.1.8.20 | LVS Director |
| web1 | 10.1.8.11 | 10.1.8.20 | 后端Nginx |
| web2 | 10.1.8.12 | 10.1.8.20 | 后端Nginx |
| web3 | 10.1.8.13 | 10.1.8.20 | 后端Nginx |
| client客户端 | 10.1.1.21 | 10.1.1.20 | 测试机 |
重点:所有后端RS网关指向真实路由器
10.1.8.20,不要指向LVS。
步骤1:所有后端RS服务器(web1/web2/web3)配置
-
创建dummy虚拟网卡,绑定VIP,掩码必须32位
nmcli connection add type dummy ifname dummy con-name dummy ipv4.method manual ipv4.addresses 10.1.8.100/32
nmcli connection up dummy -
ARP抑制内核参数(非常重要,防止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
EOF
sysctl -p -
部署nginx
yum install -y nginx
echo "welcome $(hostname)" > /usr/share/nginx/html/index.html
systemctl enable --now nginx
步骤2:LVS调度器Director配置
-
绑定VIP(dummy网卡,32位掩码)
nmcli connection add type dummy ifname dummy con-name dummy ipv4.method manual ipv4.addresses 10.1.8.100/32
nmcli connection up dummy -
安装ipvsadm
yum install -y ipvsadm
touch /etc/sysconfig/ipvsadm
systemctl enable ipvsadm -
创建DR模式LVS规则(
‑g代表DR模式)ipvsadm -C
ipvsadm -A -t 10.1.8.100:80 -s rr
ipvsadm -a -t 10.1.8.100:80 -r 10.1.8.11:80 -g -w 1
ipvsadm -a -t 10.1.8.100:80 -r 10.1.8.12:80 -g -w 1
ipvsadm -a -t 10.1.8.100:80 -r 10.1.8.13:80 -g -w 1#保存规则
ipvsadm -S -n > /etc/sysconfig/ipvsadm#查看,Forward列显示Route,代表DR模式
ipvsadm -Ln
步骤3:客户端测试
for i in {1..90};do curl -s 10.1.8.100;done|sort|uniq -c
📝DR踩坑清单:
- RS上VIP掩码必须是
/32,不能写/24,否则路由异常。- ARP参数忘记配置:访问偶尔通偶尔不通,ARP漂移。
- LVS与RS不在同一个二层局域网,DR直接无法工作。
- DR模式不支持端口映射 ,LVS的端口必须和后端RS端口完全一致。
/etc/sysconfig/ipvsadm
#查看,Forward列显示Route,代表DR模式
ipvsadm -Ln