LVS 小白完整教程(Linux虚拟服务器负载均衡)

LVS 小白完整教程(Linux虚拟服务器负载均衡)

LVS全称 Linux Virtual Server,章文嵩博士1998年开源开发,工作在内核层,性能极高,用来把多台后端服务器包装成一台虚拟对外服务的集群。 LVS = ipvs(内核模块,真正干活) + ipvsadm(命令行管理工具,没有配置文件,全部靠命令操作)。

一、核心名词(必须看懂,后面才不会懵)

名词全称通俗解释
Director调度器LVS负载均衡主机,集群入口,也叫VS
RSReal Server后端真实服务器(Nginx/Apache等),真正处理用户请求
VIPVirtual IP用户访问的IP,对外暴露服务的虚拟IP
DIPDirector IPLVS调度器和后端RS通信的内网IP
RIPReal Server IP后端真实服务器的IP地址
CIPClient 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转换。

  1. 用户请求:CIP → VIP,数据包到LVS调度器
  2. ipvs修改数据包目标IP:VIP → RIP,转发给后端RS
  3. RS处理完,回复数据包源IP为RIP,目标CIP,包回到LVS
  4. LVS修改源IP:RIP→VIP,返回给客户端。

✅ NAT硬性条件:

  1. 后端RS网关必须指向LVS的DIP,否则回包不经过LVS,访问失败。
  2. LVS调度器必须开启内核转发 net.ipv4.ip_forward=1
  3. RIP与DIP同一个网段。

2)LVS‑DR模式(生产首选)

不改IP,只改MAC地址,后端服务器直接把结果返回给用户,LVS只处理入流量,不处理返回流量,性能高很多。

数据包变化:

  • IP头全程不变:源IP=CIP,目标IP=VIP
  • 只修改二层MAC:目标MAC改成后端RS网卡MAC,实现局域网二层转发。

✅ DR硬性条件:

  1. LVS调度器和所有RS必须在同一个局域网(同一交换机)
  2. 所有RS本机上配置VIP(/32掩码,绑定在虚拟网卡/dummy网卡)
  3. 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调度算法

分为静态算法(不看服务器负载)动态算法(看连接数负载)

静态调度(固定策略,无视后端压力)

  1. rr 轮询:请求轮流分给每台服务器,假设所有服务器性能完全一样。
  2. wrr 加权轮询:给服务器设置权重,权重越大接收请求越多。服务器配置不一样首选。
  3. sh 源地址哈希:同一个客户端IP永远调度到同一台RS,实现会话绑定。
  4. dh 目标地址哈希:根据访问目标IP哈希分配,多用于缓存集群。

动态调度(根据连接数动态分配,生产推荐)

  1. lc 最少连接:分配给当前活跃连接数最少的后端服务器。

  2. wlc 加权最少连接(LVS默认算法⭐):结合权重+活跃连接,最通用,绝大多数生产使用。

  3. SED 最短期望延迟:WLC改进,只计算活跃连接。

  4. 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.1010.1.8.2LVS Director
web110.1.8.1110.1.8.10后端Nginx
web210.1.8.1210.1.8.10后端Nginx
web310.1.8.1310.1.8.10后端Nginx
client客户端10.1.1.2110.1.1.10测试访问

⚠️关键点:所有后端web服务器网关必须指向LVS的DIP(10.1.8.10),否则回包不走LVS。

步骤1:LVS调度器配置

  1. 开启内核IP转发
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
  1. 关闭防火墙或者设置trusted区域
systemctl enable --now firewalld
firewall-cmd --set-default-zone=trusted
  1. 安装ipvsadm
yum install -y ipvsadm
touch /etc/sysconfig/ipvsadm
systemctl enable ipvsadm
  1. 创建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全部执行)

  1. 设置网关指向LVS DIP:10.1.8.10
  2. 安装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/3210.1.8.20LVS Director
web110.1.8.1110.1.8.20后端Nginx
web210.1.8.1210.1.8.20后端Nginx
web310.1.8.1310.1.8.20后端Nginx
client客户端10.1.1.2110.1.1.20测试机

重点:所有后端RS网关指向真实路由器10.1.8.20不要指向LVS

步骤1:所有后端RS服务器(web1/web2/web3)配置

  1. 创建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
  1. 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
  1. 部署nginx
yum install -y nginx
echo "welcome $(hostname)" > /usr/share/nginx/html/index.html
systemctl enable --now nginx

步骤2:LVS调度器Director配置

  1. 绑定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
  1. 安装ipvsadm
yum install -y ipvsadm
touch /etc/sysconfig/ipvsadm
systemctl enable ipvsadm
  1. 创建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踩坑清单:

  1. RS上VIP掩码必须是/32,不能写/24,否则路由异常。
  2. ARP参数忘记配置:访问偶尔通偶尔不通,ARP漂移。
  3. LVS与RS不在同一个二层局域网,DR直接无法工作。
  4. DR模式不支持端口映射,LVS的端口必须和后端RS端口完全一致。
    /etc/sysconfig/ipvsadm
    #查看,Forward列显示Route,代表DR模式
    ipvsadm -Ln
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值