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

文章目录

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转换。

  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.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调度器配置

  1. 开启内核IP转发

    echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
    sysctl -p

  2. 关闭防火墙或者设置trusted区域

    systemctl enable --now firewalld
    firewall-cmd --set-default-zone=trusted

  3. 安装ipvsadm

    yum install -y ipvsadm
    touch /etc/sysconfig/ipvsadm
    systemctl enable ipvsadm

  4. 创建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/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)配置

  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

  2. 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

  3. 部署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

  2. 安装ipvsadm

    yum install -y ipvsadm
    touch /etc/sysconfig/ipvsadm
    systemctl enable ipvsadm

  3. 创建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
复制代码
相关推荐
秦渝兴1 小时前
LVS-DR 高可用集群实战:NFS + Web + DNS + Keepalived 全套架构
linux·服务器·网络·lvs
江湖有缘1 小时前
跨平台AI终端Wave:智能SSH与文件管理
运维·人工智能·ssh
夏贰四1 小时前
管控数据加载调度如何规避任务冲突?数据加载运维监控体系该如何搭建?
java·大数据·运维
搬砖的小码农_Sky1 小时前
LANDrop 在 Ubuntu 上的安装方法
linux·运维·计算机网络·ubuntu
raindayinrain2 小时前
深入理解Linux内核--内存架构,页框分配器,性能优化
linux·numa·水位·区域·页框分配
Mortalbreeze2 小时前
深入理解 TCP 协议(二):TCP 可靠传输与高效通信机制详解
linux·服务器·网络·网络协议·tcp/ip
sel_92 小时前
【Linux】Linux 常用命令手册
linux·服务器
bksczm2 小时前
细谈传输层TCP协议API接口的底层原理
服务器·网络·tcp/ip
Zguigo2 小时前
lesson27-29计算机网络第三章精讲:交换机与VLAN的工作原理、区别与实战应用
网络·计算机网络·负载均衡