当前位置: 首页 > news >正文

LVS四种工作模式深度解析

LVS(linux virual server)LVS四种工作模式深度解析

LVS-NAT模式

四台虚拟机
火墙关闭
关闭火墙 systemctl stop firewalldsystemctl disable firewalld关闭开机自启火墙
1.clientimage-20250714200302872eth0= IP:172.25.254.100
2.lvsimage-20250714200324604 image-20250714200340203eth0=ip :172.25.254.200; eth1=ip:192.168.0.200
rs1image-20250714200355748 eth0=ip:192.168.0.10
re2image-20250714200414373 eth0=ip:192.168.0.20
网络配好在rs1和rs2安装httpd功能所用命令dnf/yum install httpd -y

事例

image-20250714200916442屏幕截图 2025-07-14 200914

然后在rs1操作:
[root@RS1 ~]# systemctl disable --now firewalld   #禁用并停止 firewalld 服务[root@RS1 ~]# echo RS1 - 192.168.0.10 > /var/www/html/index.html #创建并写入内容到 index.html 文件:[root@RS1 ~]# systemctl enable --now http d     #启用并启动 Apache HTTP 服务
#rs2相同操作

事例image-20250714202038383

查看RS1和RS2网关
[root@RS1 ~]# cd /etc/NetworkManager/system-connections/ #切换目录
[root@RS1 system-connections]# ls
eth0.nmconnection
#查看网卡
[root@RS1 system-connections]# vim eth0.nmconnection  #修改网卡

屏幕截图 2025-07-15 102103

[root@RS1 system-connections]# nmcli connection reload #重启端口 
[root@RS1 system-connections]# nmcli connection up eth0 #激活网口

=

lvs虚拟机操作
[root@lvs ~]# sysctl  -a | grep ip_forward
net.ipv4.ip_forward = 0 #net.ipv4.ip_forward = 0:这意味着当前 IPv4 数据包转发功能被禁用了(值为0表示禁用,1表示启用)
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0
[root@lvs ~]# echo net.ipv4.ip_forward=1 > /etc/sysctl.conf #这条命令将 net.ipv4.ip_forward=1 写入到了 /etc/sysctl.conf 配置文件中,使得系统在启动时启用 IPv4 转发。
[root@lvs ~]# sysctl -p #使用 sysctl -p 使配置立即生效。
net.ipv4.ip_forward = 1
用这个命令查一下需要安装的lvs安装包:dnf search lvsimage-20250714203208570

用命令安装[root@lvs ~]# dnf/yum install ipvsadm -yimage-20250714203256637

用命令watch -n1 ipvsadm -Ln 查看策略调度机制image-20250714203832469
输入命令[root@lvs ~]# ipvsadm -A -t

172.25.254.200:80 -s rr #这条命令使用 ipvsadm 工具配置一个虚拟服务 172.25.254.200:80,并使用 轮询(Round Robin) 调度算法(-S rr)来分发流量到后端服务器image-20250714204317689

[root@lvs ~]# ipvsadm -E -t 172.25.254.200:80 -s wrr #-E表示更改为wrr机制
TCP 172.25.254.200:80 wrr

[root@lvs ~]# ipvsadm -E -t 172.25.254.200:80 -s wrr -p 360 #-p设置持久连接超时规定时间内同一来源请求调度到同一realserver-----这里时间设为360

TCP 172.25.254.200:80 wrr persistent 360

[root@lvs ~]# ipvsadm -A -f 66 -s rr #设置火墙TCP  172.25.254.200:80 wrr persistent 360
FWM  66 rr
删除机制 #模式不能混用
[root@lvs ~]# ipvsadm -D -f 66 #删除火墙-D[root@lvs ~]# ipvsadm -C          #全部删除[root@lvs ~]# ipvsadm -A -t 172.25.254.200:80 -s rr
[root@lvs ~]# ipvsadm -a -t 172.25.254.200:80 -r 192.168.0.10:80 -g
[root@lvs ~]# ipvsadm -a -t 172.25.254.200:80 -r 192.168.0.20:80 -g
#-g为直连路由

image-20250714210732327

[root@lvs ~]# ipvsadm -a -t 172.25.254.200:80 -r 192.168.0.20:80 -m
[root@lvs ~]# ipvsadm -a -t 172.25.254.200:80 -r 192.168.0.10:80 -m
#-m为nat模式

image-20250714210900139

[root@lvs ~]# ipvsadm -e -t 172.25.254.200:80 -r 192.168.0.20:80 -i
[root@lvs ~]# ipvsadm -e -t 172.25.254.200:80 -r 192.168.0.10:80 -i
#-e为切换模式 -i为ipip隧道模式

image-20250714211134855

设置权重
[root@lvs ~]# ipvsadm -e -t 172.25.254.200:80 -r 192.168.0.10:80 -i -w 2
#-w 后面跟数字代表权重这里设置2--权重不是所有模式一定生效

image-20250714211820038

计数器[root@lvs ~]# watch -n1 ipvsadm -Ln --rate #后面加–tate -Z清楚计数器

image-20250714211905008

保存策略
[root@lvs ~]# ipvsadm-save -n > /mnt/ipvsadm.rule如果用ipvsadm -C删除后用命令
ipvsadm-restore < /mnt/ipvsadm.rule
恢复策略
永久保存  #开机时加载策略
ipvsadm-save -n > /etc/sysconfig/ipvsadm

LVS技术-DR模式

实验环境拓扑
clienteth0=ip 172.25.254.111
路由器eth0=ip 172.25.254.100 eth1=ip192.168.0.100
DR-LVSeth0=ip 192.168.0.200
RS1eth0=ip192.168.0.10
RS2eth0=ip 192.168.0.20
客户端 clent网络设置
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address1=172.25.254.111/24,172.25.254.100
dns=8.8.8.8
路由器网络设置
2. 路由器网络设置
(1) eth0 配置
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address1=172.25.254.100/24
(2) eth1 配置
[connection]
id=eth1
type=ethernet
interface-name=eth1[ipv4]
method=manual
address1=192.168.0.100/24
(3) 激活网口
nmcli connection reload
nmcli connection up eth0
nmcli connection up eth1
(4) 开启路由转发功能

打开路由内核功能

[root@luyou ~] vim /etc/sysctl.conf  #编辑文件开启内核路由功能net.ipv4.ip_forward=1开启内核路由功能[root@luyou ~] sysctl -p  #激活

image-20250716181122844

开启防火墙并开启伪装(MASQUERADE)
[root@luyou system-connections] systemctl enable --now firewalld.service

image-20250716181253815

打开路由地址伪装
[root@luyou system-connections] firewall-cmd --permanent  --add-masquerade
Warning: ALREADY_ENABLED: masquerade
success
LVS主机设置
网口设置
网口eth0.nmconnection
[root@dr-lvs system-connections] cat eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address1=192.168.0.200/24,192.168.0.100
address2=192.168.0.220/24
dns=8.8.8.8[root@dr-lvs system-connections]# nmcli connection reload   #重启
[root@dr-lvs system-connections]# nmcli connection up eth0 #激活
网口设置回环接口lo.nmconnection
[root@dr-lvs system-connections] cat lo.nmconnection
[connection]
id=lo
type=loopback
interface-name=lo[ipv4]
pmethod=manual#静态
address1=127.0.0.1/8
address2=192.168.0.220/32不对外相应32
[root@dr-lvs system-connections]# nmcli connection reload   #重启
[root@dr-lvs system-connections]# nmcli connection up lo #激活
RS1/RS2 设置(后端真实服务器)
RS1设置
[root@RS1 system-connections]# cat eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address1=192.168.0.10/24,192.168.0.100
dns=8.8.8.8
[root@RS1 system-connections]# cat lo.nmconnection
[connection]
id=lo
type=loopback
interface-name=lo[ipv4]
method=manual
address1=127.0.0.1/8
address2=192.168.0.220/32
设置VIP相应管控
[root@RS1 ~] sysctl -a | grep arp  #搜索arp相关设置[root@RS1 ~] echo net.ipv4.conf.lo.arp_ignore =1 >> /etc/sysctl.conf[root@RS1 ~] echo net.ipv4.conf.lo.arp_announce = 2 >> /etc/sysctl.conf[root@RS1 ~] echo net.ipv4.conf.all.arp_ignore = 1 >> /etc/sysctl.conf[root@RS1 ~] echo net.ipv4.conf.all.arp_announce = 2 >> /etc/sysctl.conf[root@RS1 ~] sysctl  -p  #生效
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
vnet.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
RS2设置
[root@RS2 system-connections]# cat eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
method=manual
address1=192.168.0.20/24,192.168.0.100
dns=8.8.8.8
[root@RS2 system-connections]# cat lo.nmconnection
[connection]
id=lo
type=loopback
interface-name=lo[ipv4]
method=manual
address1=127.0.0.1/8
address2=192.168.0.220/32
设置VIP相应管控
[root@RS2 ~] sysctl -a | grep arp  #搜索arp相关设置[root@RS2 ~] echo net.ipv4.conf.lo.arp_ignore =1 >> /etc/sysctl.conf[root@RS2 ~] echo net.ipv4.conf.lo.arp_announce = 2 >> /etc/sysctl.conf[root@RS2 ~] echo net.ipv4.conf.all.arp_ignore = 1 >> /etc/sysctl.conf[root@RS2 ~] echo net.ipv4.conf.all.arp_announce = 2 >> /etc/sysctl.conf[root@RS2 ~] sysctl  -p  #生效
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
vnet.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

最后通过客户端client用户访问image-20250716191143080

屏幕截图 2025-07-16 191139

防火墙标记解决轮询调度问题

先在RS1和RS2上安装httpd

[root@RS1 ~]# yum install  mod_ssl -y[root@RS2 ~]# dnf install mod_ssl -y[root@RS1 ~]# systemctl  restart  httpd[root@RS2 ~]# systemctl  restart  httpdv在LVS主机上操作[root@dr-lvs ~]# ipvsadm -C  #清除机制
[root@dr-lvs ~]# iptables -t mangle -A PREROUTING -d 192.168.0.220 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 666 

LVS技术-TUN模式


一、实验案例环境

本案例采用LVS负载均衡技术中的TUN(IP隧道)模式,适用于后端Real Server与调度器不在同一二层网络的场景。

网络拓扑简述
Client||          +-------------------+|          |  lvs-tun主机      ||          |  eth0: 192.168.0.100|          +-------------------+|                /      \|               /        \|      +-------------------+   +-------------------+|      |   rs1主机         |   |   rs2主机         ||      |   eth0:192.168.0.10|   |   eth0:192.168.0.20||      +-------------------+   +-------------------+
  • lvs-tun:调度器,虚拟服务IP:192.168.0.100
  • rs1/rs2:真实服务器,分别为 192.168.0.10 和 192.168.0.20

二、系统安装与准备
1. LVS相关软件安装

在 lvs-tun 主机上:

dnf search lvs
dnf install -y ipvsadm
2. RealServer需安装并启动web服务(如httpd/nginx)

(以httpd为例)

yum install -y httpd
systemctl enable --now httpd
echo "RS1-192.168.0.10" > /var/www/html/index.html  # rs1配置
echo "RS2-192.168.0.20" > /var/www/html/index.html  # rs2配置

三、LVS-TUN模式配置

1. 配置IPVS调度

在 lvs-tun 主机上:

ipvsadm -A -t 192.168.0.100:80 -s rr
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.10:80 -i
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.20:80 -i

image-20250719152451649

参数说明:

  • -A 添加虚拟服务
  • -t 指定虚拟IP和端口
  • -s rr 采用轮询调度
  • -a 添加真实服务器
  • -r 真实服务器IP:端口
  • -i TUN模式(IP隧道)

2. 加载IP隧道内核模块(所有主机)

modprobe ipip

可写入 /etc/modules-load.d/ipip.conf,确保开机自动加载。


四、RealServer配置(rs1与rs2)

1. ARP优化参数(防止虚拟IPARP冲突)

echo "net.ipv4.conf.lo.arp_ignore = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.lo.arp_announce = 2" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
sysctl -p
2. 配置虚拟IP地址到lo接口
ip addr add 192.168.0.100/32 dev lo
3. 安装并配置arptables,防止ARP欺骗
yum install -y arptables.x86_64
arptables -A INPUT -d 192.168.0.100 -j DROP 
arptables -A OUTPUT -s 192.168.0.100 -j mangle --mangle-ip-s 192.168.0.2
arptables-save > /etc/sysconfig/arptables
4. 检查并允许IPIP协议(防火墙)

如用 firewalld:

firewall-cmd --permanent --add-protocol=ipip
firewall-cmd --reload

4五、客户端测试案例

在 Client 主机上:

curl 192.168.0.100
# RS1-192.168.0.10curl 192.168.0.100
# RS2-192.168.0.20curl 192.168.0.100
# RS1-192.168.0.10
总结
  1. ARP参数与arptables必须配置,防止RealServer响应VIP的ARP请求,避免网络异常。
  2. IPVS调度器和RealServer都需加载ipip隧道模块。
  3. 虚拟IP须绑定至RealServer的lo接口,且为/32掩码。
  4. 防火墙需允许IPIP协议(协议号4)。
  5. 建议将相关配置写入系统启动脚本,防止重启失效。
  6. 每台RealServer需配置独立的index.html,便于验证调度效果。
  7. LVS-TUN模式适合DDoS防护、异地容灾等跨网段负载均衡场景。

lvs-fullnat模式(不常用)

通过同时修改请求报文的源IP地址和目标IP地址进行转发;此类型默认不支持;

(1) VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP;
(2) RS收到的请求报文源地址是DIP,因此,只能响应给DIP;但Director还要将其发往Client;
(3) 请求和响应报文都经由Director;
(4) 支持端口映射

LVS(Linux Virtual Server)四种工作模式和13种调度算法详解

一、LVS 四种工作模式

1. NAT(Network Address Translation)模式

工作原理

  • 客户端请求到达 LVS 调度器(Director)。
  • LVS 修改请求报文的目标 IP(VIP → Real Server IP),并转发给后端真实服务器(Real Server)。
  • 真实服务器处理请求后,将响应返回给 LVS。
  • LVS 修改响应报文的源 IP(Real Server IP → VIP),再返回给客户端。

特点
✅ 支持端口映射(VIP 和 Real Server 端口可以不同)。
✅ 真实服务器可以位于不同网络(跨 VLAN)。
性能瓶颈:进出流量都要经过 LVS,LVS 容易成为性能瓶颈。
网关依赖:真实服务器必须将默认网关指向 LVS,否则无法回包。

适用场景

  • 适用于小型集群,对性能要求不高。
  • 需要端口映射(如 VIP:80 → Real Server:8080)的场景。

2. DR(Direct Routing)模式

工作原理

  • 客户端请求到达 LVS 调度器(Director)。
  • LVS 仅修改请求报文的 MAC 地址(目标 MAC → Real Server MAC),不修改 IP。
  • 真实服务器直接响应客户端(不经过 LVS),但源 IP 仍然是 VIP(需要配置 lo:VIP)。
  • 客户端收到响应后,认为数据来自 VIP,不会感知 LVS 的存在。

特点
高性能:响应数据不经过 LVS,仅请求经过。
低延迟:适用于高并发场景。
ARP 问题:需要抑制真实服务器的 VIP ARP 响应(arp_ignore=1arp_announce=2)。
网络限制:LVS 和 Real Server 必须在同一 LAN(不能跨 VLAN)。

适用场景

  • 高性能 Web 服务器集群(如电商、金融交易系统)。
  • 需要低延迟、高吞吐量的应用。

3. TUN(IP Tunneling)模式

工作原理

  • LVS 将客户端请求封装在 IP 隧道(如 IPIP/GRE)中,转发给真实服务器。
  • 真实服务器解封装后处理请求,并直接响应客户端(源 IP 仍是 VIP)。
  • 响应数据不经过 LVS。

特点
跨网络支持:LVS 和 Real Server 可以不在同一网络(跨机房)。
高性能:响应数据不经过 LVS。
配置复杂:需要 Real Server 支持 IP 隧道协议(如 ipip 模块)。
额外开销:IP 封装/解封装增加 CPU 负担。

适用场景

  • 跨数据中心负载均衡(如异地容灾)。
  • 需要高可用但 Real Server 不在同一 LAN 的场景。

4. FULLNAT 模式

工作原理

  • LVS 同时修改请求报文的源 IP 和目标 IP(CIP → LVS IP,VIP → RIP)。
  • 真实服务器看到的源 IP 是 LVS 的 IP,而不是客户端的 IP。
  • LVS 在返回响应时,再修改源 IP(RIP → VIP)和目标 IP(LVS IP → CIP)。

特点
跨 VLAN 支持:Real Server 可以位于不同网络。
隐藏客户端 IP:Real Server 看不到客户端的真实 IP(需通过 TOA 模块获取)。
性能影响:所有流量都要经过 LVS,类似 NAT 模式。

适用场景

  • 需要隐藏客户端 IP 的场景(如安全防护)。
  • 大规模跨 VLAN 负载均衡(如云环境)。

二、LVS 13 种调度算法

静态调度算法(不感知服务器负载)

算法名称说明
rr轮询(Round Robin)按顺序依次分配请求,不考虑服务器负载。
wrr加权轮询(Weighted RR)按权重比例分配请求(如权重 3:2:1)。
sh源地址哈希(Source Hashing)相同源 IP 的请求固定分配到同一服务器(会话保持)。
dh目标地址哈希(Destination Hashing)相同目标 IP 的请求固定分配到同一服务器(CDN 场景)。

动态调度算法(感知服务器负载)

算法名称说明
lc最少连接(Least Connections)选择当前连接数最少的服务器。
wlc加权最少连接(Weighted LC)默认算法,考虑权重 + 连接数。
lblc基于局部性的最少连接类似 dh + lc,适用于缓存服务器。
lblcr带复制的基于局部性最少连接优化 lblc,允许请求在相似服务器间分配。
sed最短期望延迟(Shortest Expected Delay)选择 (活动连接 + 1) / 权重 最小的服务器。
nq永不排队(Never Queue)优先选择空闲服务器,否则使用 sed
lt最小流量(Least Traffic)选择当前流量最少的服务器。
wlt加权最小流量(Weighted LT)考虑权重的 lt 算法。
wrt加权响应时间(Weighted Response Time)选择平均响应时间最短的服务器。

三、总结对比

模式性能跨网络配置复杂度适用场景
NAT简单小型集群、端口映射
DR中等高性能 Web 服务
TUN复杂跨机房负载均衡
FULLNAT中等云环境、安全防护

调度算法选择

  • 默认推荐 wlc(加权最少连接)。
  • 需要会话保持sh(源地址哈希)。
  • 缓存服务器优化lblc / lblcr
  • 低延迟优先sed / nq

LVS 的灵活模式 + 多种调度算法使其适用于各种高可用、高性能负载均衡场景。 看看嘛

           |

| wlt | 加权最小流量(Weighted LT) | 考虑权重的 lt 算法。 |
| wrt | 加权响应时间(Weighted Response Time) | 选择平均响应时间最短的服务器。 |


三、总结对比

模式性能跨网络配置复杂度适用场景
NAT简单小型集群、端口映射
DR中等高性能 Web 服务
TUN复杂跨机房负载均衡
FULLNAT中等云环境、安全防护

调度算法选择

  • 默认推荐 wlc(加权最少连接)。
  • 需要会话保持sh(源地址哈希)。
  • 缓存服务器优化lblc / lblcr
  • 低延迟优先sed / nq

LVS 的灵活模式 + 多种调度算法使其适用于各种高可用、高性能负载均衡场景。 看看嘛

http://www.lryc.cn/news/593460.html

相关文章:

  • Go 语言核心机制深度剖析:指针、defer、多态与空接口实战指南
  • 使用 go-redis-entraid 实现 Entra ID 无密钥认证
  • Go-Redis × RediSearch 全流程实践
  • leetcode_121 买卖股票的最佳时期
  • 力扣经典算法篇-26-长度最小的子数组(暴力求解法,左右指针法)
  • 【Java】【力扣】48.旋转图像
  • FPGA自学——整体设计思路
  • Redis数据库基础与持久化部署
  • 使用CCS6.2为C2000(DSP28335)生成.bin文件和.hex文件
  • 【LeetCode 热题 100】437. 路径总和 III——(解法一)递归递归!
  • CCF编程能力等级认证GESP—C++7级—20250628
  • STM32_Hal库学习ADC
  • IntelliJ IDEA中Mybatis的xml文件报错解决
  • SSM框架——注入类型
  • aws(学习笔记第四十九课) ECS集中练习(1)
  • Streamlit 官翻 5 - 部署、社区云 Deploy
  • Python绘制数据(三)
  • Matplotlib 30分钟精通
  • 人该怎样活着呢?55
  • Windows11下编译好的opencv4.8-mingw,可下载后直接用
  • Apache Kafka 学习笔记
  • 详细阐述 TCP、UDP、ICMPv4 和 ICMPv6 协议-以及防火墙端口原理优雅草卓伊凡
  • Python高级数据类型:字典(Dictionary)
  • Datawhale 7月学习
  • RK3568 Linux驱动学习——SDK安装编译
  • Oracle为什么需要临时表?——让数据处理更灵活
  • DAY 18 推断聚类后簇的类型
  • 【Project】kafka+flume+davinci广告点击实时分析系统
  • MySQL(145)如何升级MySQL版本?
  • 在服务器(ECS)部署 MySQL 操作流程