LVS四种工作模式深度解析

发布于:2025-07-20 ⋅ 阅读:(21) ⋅ 点赞:(0)

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

LVS-NAT模式

四台虚拟机
火墙关闭
关闭火墙 systemctl stop firewalld
 systemctl disable firewalld关闭开机自启火墙
 
1.client image-20250714200302872eth0= IP:172.25.254.100
2.lvs image-20250714200324604 image-20250714200340203eth0=ip :172.25.254.200; eth1=ip:192.168.0.200
rs1 image-20250714200355748 eth0=ip:192.168.0.10
re2 image-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模式

实验环境拓扑
client eth0=ip 172.25.254.111
路由器 eth0=ip 172.25.254.100 eth1=ip192.168.0.100
DR-LVS eth0=ip 192.168.0.200
RS1 eth0=ip192.168.0.10
RS2 eth0=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.10

curl 192.168.0.100
# RS2-192.168.0.20

curl 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 的灵活模式 + 多种调度算法使其适用于各种高可用、高性能负载均衡场景。 看看嘛


网站公告

今日签到

点亮在社区的每一天
去签到