LVS集群

集群

集群分类

  • 按分发器类型分 -- LVS集群 -- Nginx集群 -- haproxy集群 -- F5集群

  • 按业务类型分 -- web集群 -- 数据库集群 -- 缓存集群 -- ...

  • 按功能分类:

    • 负载均衡集群 -- LBC: 分担服务的总体压力

    • 高可用集群 -- HAC: 尽可能的保障服务状态的可用性

    • 高性能运算集群 -- HPC: 提供单台服务器提供不了的计算能力

LVS

LVS是Linux Virtual Server 的简称,也就是 Linux 虚拟服务器。

实现4层负载均衡,性能强大,适合日常处理大并发的大型网络架构使用;

所谓四层负载均衡 ,也就是主要通过报文中的目标地址和端口,实现负载均衡;

七层负载均衡 ,也称为"内容交换",也就是主要通过报文中的真正有意义的应用层内容。

LVS和Nginx和区别

LVS优缺点

LVS的优点

  • 抗负载能力强、是工作在传输层上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的,对内存和 cpu 资源消耗比较低。

  • 配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率。

  • 工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案,如 LVS+Keepalived。

  • 无流量,LVS 只分发请求,而流量并不从它本身出去,这点保证了均衡器 IO 的性能不会受到大流量的影响。

  • 应用范围比较广,因为 LVS 工作在传输层,所以它几乎可以对所有应用做负载均衡,包括 http、数据库、在线聊天室等等。

LVS的缺点

  • 软件本身不支持正则表达式处理,不能做动静分离;而现在许多网站在这方面都有较强的需求,这个是 Nginx、HAProxy+Keepalived 的优势所在。

  • 如果是网站应用比较庞大的话,LVS/DR+Keepalived 实施起来就比较复杂了,相对而言,Nginx/HAProxy+Keepalived就简单多了。

Nginx 负载均衡

Nginx 负载均衡主要是对七层网络通信模型中的第七层应用层上的 http、https 进行支持。

Nginx 是以反向代理的方式进行负载均衡的。反向代理(Reverse Proxy)方式是指以代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

Nginx 实现负载均衡的分配策略有很多,Nginx 的 upstream 目前支持以下几种方式:

  • 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

  • weight:指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。

  • ip_hash:每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。

  • fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配。

  • url_hash(第三方):按访问 url 的 hash 结果来分配请求,使每个 url 定向到同一个后端服务器,后端服务器为缓存时比较有效。

Nginx 的优点

  • 跨平台:Nginx 可以在大多数 Unix like OS编译运行,而且也有 Windows 的移植版本

  • 配置异常简单:非常容易上手。配置风格跟程序开发一样,神一般的配置

  • 非阻塞、高并发连接:官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数

  • 事件驱动:通信机制采用 epoll 模型,支持更大的并发连接

  • Master/Worker 结构:一个 master 进程,生成一个或多个 worker 进程

  • 内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个 Nginx 进程才消耗150M 内存(15M*10=150M)

  • 内置的健康检查功能:如果 Nginx 代理的后端的某台 Web 服务器宕机了,不会影响前端访问

  • 节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头

  • 稳定性高:用于反向代理,宕机的概率微乎其微

Nginx 的缺点

  • Nginx 仅能支 持http、https 和 Email 协议,这样就在适用范围上面小些,这个是它的缺点。

  • 对后端服务器的健康检查,只支持通过端口来检测,不支持通过 ur l来检测。

  • 不支持 Session 的直接保持,但能通过 ip_hash 来解决。

LVS四种模式

  • NAT模式:

    • 使用IP地址转换,将源IP和目标IP进行转换,实现负载均衡;

    • 请求(入)和响应(出)都会经过负载均衡器;

    • 负载均衡器会成为一个流量的瓶颈;建议10台以内的服务器使用;

  • TUN模式:隧道模式,报文封装,实现负载均衡;

    • 请求会经过负载均衡器,响应直接返回给客户端;

    • 但是需要每台后端真实服务器都要有独立的公网IP;

    • 适合跨机房,跨网段的负载均衡;

  • DR模式(最常用):直接路由模式,使用MAC替换,实现负载均衡;

    • 可以实现100+服务器的负载均衡;

    • 请求会经过负载均衡器,响应直接返回给客户端;

    • 不需要独立IP

  • FULLNAT模式:多层地址转换,超大型架构的负载均衡;(基于NAT实现,LVS 本身不支持,需要额外对内核打补丁后才能使用)

    • 通过双重地址转换实现负载均衡,客户端和后端服务器双向请求都经过负载均衡器;

    • 提供了跨网段负载均衡功能。

LVS常用缩写解释

名称 含义
LB(Load Balancer) 负载均衡
HA(High Available) 高可用
Cluster 集群
DS(Director Server) 前端负载均衡节点服务器
RS(Real SERVER) 后端真实服务器
CIP(Client IP) 客户端IP地址
VIP(Virtual IP) 负载均衡对外提供访问的IP地址,一般负载均衡IP都会通过Viirtual IP实现高可用
RIP(RealServer IP) 负载均衡后端的真实服务器IP地址
DIP(Director IP) 主要用于和内部主机通讯的 IP 地址

LVS负载均衡集群-ipvsadm

javascript 复制代码
# 安装ipvsadm工作
yum install ipvsadm -y或者
apt install ipvsadm -y
# 查看是否在内核中
lsmod |grep ip_vs 
# 加载ip_vs内核模块,提供负载均衡的功能,如果上面的命令没有反应可以使用
modprobe手动添加
modprobe ip_vs
# 如果编译lvs,需要使用内核,先查看内核版本
uname -r
# 会显示以下版本3.10.0-1160.71.1.el7.x86_64
# 使用 yum 包管理器安装内核开发包
yum install kernel-devel -y
# 创建软链接,将当前内核源码目录链接到/usr/src/linux
ln -s /usr/src/kernels/3.10.0-1160.114.2.el7.x86_64 /usr/src/linux
​
ls -l /usr/src/
总用量 0
drwxr-xr-x. 2 root root   6 4月  11 2018 debug
drwxr-xr-x. 5 root root 113 4月   2 08:16 kernels
lrwxrwxrwx  1 root root  45 4月   4 18:12 linux ->  /usr/src/kernels/3.10.0-1160.71.1.el7.x86_64
安装完成之后会生成一个同名的命令工具,我们需要使用该命令来配置LVS和算法
​
# 用法
ipvsadm   选项  服务器地址   -s  算法
ipvsadm   选项  服务器地址   -r  真是服务器地址   [工作模式]  [权重]
​
# 选项
-A      添加一个虚拟服务器
-E      编辑一个虚拟服务器
-D      删除一个虚拟服务器
-C      清空虚拟服务器列表
-R      从标准输入中还原虚拟服务器规则
-S      将虚拟服务器规则保存至标准输出
-a      添加一个真实服务器
-e      编辑一个真实服务器
-d      删除一个真实服务器
-l/L    查看分发列表
-t      使用tcp协议
-u      使用udp协议
-s      指定算法
-r      设置真实服务器的IP地址和端口信息
-g      DR模式
-i      tun模式
-m      nat模式
-w      设置真实服务器的权重
-c      查看连接状态,需要配合L使用
-n      以数字形式输出
​
# 比如,添加一个虚拟服务器,算法为rr,所有使用tcp协议访问192.168.221.10:80
的请求,最终都被NAT模式转发给了192.168.221.20和192.168.221.30的80端口
ipvsadm -A -t 192.168.221.10:80 -s rr
ipvsadm -a -t 192.168.221.10:80 -r 192.168.221.20:80 -m
ipvsadm -a -t 192.168.221.10:80 -r 192.168.221.30:80 -m
# 查看规则
ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  localhost.localdomain:http rr
  -> 192.168.221.20:http          Masq    1      0          0     
  -> 192.168.221.30:http          Masq    1      0          0    
ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.221.10:80 rr
  -> 192.168.221.20:80            Masq    1      0          0     
  -> 192.168.221.30:80            Masq    1      0          0     
# 查看调度状态
[root@zuolaoshi ~]# ipvsadm -lnc
IPVS connection entries
pro expire state     source         virtual         destination

NAT模式

客户端请求(CIP、VIP)-> 负载均衡器(VIP、RIP)-> 真实服务器(RIP、VIP)-> 负载均衡器(VIP、CIP)-> 客户端

负载均衡器使用NAT模式需要两张网卡:

  • A网卡让客户端访问,B网内网访问;

  • LVS实现地址转换;

配置一个LVS NAT的web集群(需要三台机器)

配置两个网卡(在192.168.221.10上配置)

* 192.168.221.10 NAT

* 192.168.1.128 仅主机,且为内部网关

真实服务器(两个)

192.168.221.20

192.168.221.30

javascript 复制代码
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 临时关闭SELinux
setenforce 0
# 永久关闭SELinux,编辑配置文件
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 挂载光盘
mount /dev/cdrom /media
​
## 配置LVS(192.168.221.10)
# 安装ipvsadm软件包
yum install ipvsadm -y
# 开启ip转发(NAT模式必需)
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
# 生效配置
sysctl -p  
# 如果报错,添加ip_conntrack模块
modprobe ip_conntrack
# 配置第二张网卡(添加一个仅主机的网络)
ens33=192.168.221.10
ens36=192.168.1.128
其中网络配置文件可以修改成:
vim /etc/sysconfig/network-scripts/ifcfg-ens36
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=no       # 通常第二块网卡不作为默认路由,设为no
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=no
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens36        # 改为第二块网卡名称
DEVICE=ens36      # 设备名,与文件名一致
ONBOOT=yes
IPADDR=192.168.1.128   # 第二块网卡IP
NETMASK=255.255.255.0
#GATEWAY=192.168.1.2   # 若该网段需要网关,取消注释并填写(如仅主机模式网关)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# 两台真实服务器也需要同时把网络从NAT模式修改成仅主机模式
192.168.221.20 ------------> 192.168.1.20
192.168.221.30 ------------> 192.168.1.30
网关直接改成192.168.1.128,原本的注释掉
#或者可以直接写:
[root@RS1 ~]# route add default gw 192.168.1.128
[root@RS2 ~]# route add default gw 192.168.1.128
​
## 配置LVS NAT规则
# 如果需要清空之前的请输入
ipvsadm -C
# 设置入口ip地址:VIP(在192.168.221.10)
ipvsadm -A -t 192.168.221.10:80 -s rr
ipvsadm -a -t 192.168.221.10:80 -r 192.168.1.20:80 -m
ipvsadm -a -t 192.168.221.10:80 -r 192.168.1.30:80 -m
# 保存规则(可以省略)
ipvsadm -S > /etc/sysconfig/ipvsadm
# 启动服务
systemctl start ipvsadm && systemctl enable ipvsadm  
​
# 在两个后端真实服务器上安装web服务,生成测试页面
RS1
yum install httpd -y
echo "<h1>RS1 - 192.168.221.20</h1>" > /var/www/html/index.html
systemctl start httpd
RS2重复同样步骤

客户端多次访问curl 192.168.221.10

浏览器访问192.168.221.10

TUN隧道模式

原理:客户端请求源地址(CIP,VIP)-> LVS负载均衡器(DIP【CIP,VIP】,RIP)-> 真实服务器(CIP,VIP)

虚拟机 虚拟机ip
VIP------ens37 192.168.221.128
LVS------ens33 192.168.221.10
真实服务器1 192.168.221.20
真实服务器2 192.168.221.30

一、配置 LVS 负载均衡器(Director)

javascript 复制代码
# 1.安装软件
yum install -y ipvsadm 
# 2. 加载IP隧道模块
modprobe ipip
echo "ipip" >> /etc/modules-load.d/ipvs.conf
# 3. 配置VIP
# 添加VIP
ip addr add 192.168.221.128/32 dev tunl0
# 启用tunl0接口
ip link set dev tunl0 up
# 配置路由(可选,视网络环境而定)
ip route add 192.168.221.128/32 dev tunl0
# 4.配置LVS规则
# 清除现有规则
ipvsadm -C
# 添加虚拟服务
ipvsadm -A -t 192.168.221.128:80 -s rr
# 添加后端真实服务器(TUN模式)
ipvsadm -a -t 192.168.221.128:80 -r 192.168.221.20:80 -i
ipvsadm -a -t 192.168.221.128:80 -r 192.168.221.30:80 -i
# 保存配置
ipvsadm -S > /etc/sysconfig/ipvsadm
# 5.配置系统参数
# 启用IP转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
# 禁用ICMP重定向
echo "net.ipv4.conf.all.send_redirects = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.default.send_redirects = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.ens33.send_redirects = 0" >> /etc/sysctl.conf
# 应用配置
sysctl -p
# 6.设置开机自启
systemctl enable ipvsadm
systemctl start ipvsadm

二、配置后端 Web 服务器(Real Server)

在所有 Web 服务器上执行以下操作

javascript 复制代码
1、安装 Web 服务器

yum install -y httpd
systemctl enable httpd
systemctl start httpd
2、创建测试页面(区分不同服务器)

# 在192.168.221.20上
echo "<h1>Web Server 1 (192.168.221.20)</h1>" > /var/www/html/index.html
​
# 在192.168.221.30上
echo "<h1>Web Server 2 (192.168.221.30)</h1>" > /var/www/html/index.html
3、加载 IP 隧道模块

modprobe ipip
echo "ipip" >> /etc/modules-load.d/ipvs.conf
4、配置 VIP(注意:不设置 ARP 响应)

# 添加VIP到tunl0接口
ip addr add 192.168.221.128/32 dev tunl0
# 启用tunl0接口
ip link set dev tunl0 up
# 关闭tunl0的ARP响应
echo "1" > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/tunl0/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
配置系统参数

# 禁用反向路径过滤
echo "net.ipv4.conf.all.rp_filter = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.default.rp_filter = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.tunl0.rp_filter = 0" >> /etc/sysctl.conf
echo "net.ipv4.conf.ens33.rp_filter = 0" >> /etc/sysctl.conf
​
# 应用配置
sysctl -p

三、验证配置

在 LVS 服务器上查看 IPVS 配置

javascript 复制代码
ipvsadm -Ln
从浏览器访问 VIP(192.168.221.128),多次刷新页面,应该能看到不同 Web 服务器
的内容,证明负载均衡生效。

# 使用curl测试
curl http://192.168.221.20
curl 192.168.221.30
# 如果遇到问题,可以查看系统日志排查:
tail -f /var/log/messages

四、注意事项

  1. TUN 模式要求所有服务器都支持 IP 隧道(IPIP)

  2. 确保防火墙规则允许相关流量通过(80 端口、IPIP 协议)

  3. 所有服务器必须能够相互通信

  4. 对于生产环境,建议添加监控和故障转移机制

  5. 可以根据需要调整 LVS 的调度算法(当前使用的是 rr - 轮询)

通过以上步骤,你应该已经成功在 CentOS 上部署了基于 LVS TUN 模式的 Web 集群。

LVS-DR模式

DR直接路由模式:不修改客户请求的源地址和目标地址,直接通过MAC将请求转发给RS(真实服务器),RS需要设置ARP抑制;

虚拟机 虚拟机ip
VIP------ens37 192.168.221.128
LVS------ens33 192.168.221.10
真实服务器1 192.168.221.20
真实服务器2 192.168.221.30

我是直接在TUN基础上改的

javascript 复制代码
# 在LVS负载均衡上(192.168.221.10)配置
ipvsadm -C
ipvsadm -A -t 192.168.221.128:80 -s rr
ipvsadm -a -t 192.168.221.128:80 -r 192.168.221.20:80 -g
ipvsadm -a -t 192.168.221.128:80 -r 192.168.221.30:80 -g
# 查看LVS规则,看看TUN是否变成了Route
ipvsadm -ln
​
# 真实服务器设置(192.168.221.20和192.168.22.30同样设置)
# 配置 VIP 到回环接口
ifconfig lo:0 192.168.221.128 netmask 255.255.255.255 up
# 设置内核参数以关闭 ARP 响应(临时设置)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
# 或者可以永久设置(临时设了的话这个就省略)
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
最后执行sysctl -p立即生效
# 然后浏览器测试两个真实服务器能不能正常提供页面
# 最后浏览器测试LVS能不能访问到真实服务器
浏览器输入192.168.221.128

HAProxy

一款性能强大的负载均衡软件,同时支持四层和七层负载均衡;

javascript 复制代码
# 直接在Ubuntu(192.168.221.21)安装
apt install haproxy -y
vim /etc/haproxy/haproxy.cfg
+++++++++++++++++++++++++++++输入O在文本最后添加
# 定义前端和后端设置
frontend test
  bind 192.168.221.21:80
  stats uri /haproxy?stats
  default_backend web-servers
​
backend web-servers
   balance roundrobin   # 轮询算法
   server web1 192.168.221.20:80
   server web2 192.168.221.30:80
​
# stats auth 指令为登录用户指定用户名和密码,在浏览器访问的时候加上8080端口
即可输入用户名和密码
listen stats
  bind *:8080
  stats enable
  stats uri /
  stats refresh 5s
  stats realm Haproxy\ Statistics
  stats auth test:root123
+++++++++++++++++++++++++++++++++++++++++++
systemctl restart haproxy

最后弹出是这个界面就对了

HAProxy 支持两种代理模式 TCP(四层)和HTTP(七层),也是支持虚拟主机的。

HAProxy 的优点能够补充 Nginx 的一些缺点,比如支持 Session 的保持,Cookie 的引导;同时支持通过获取指定的 url 来检测后端服务器的状态。

HAProxy 跟 LVS 类似,本身就只是一款负载均衡软件;单纯从效率上来讲 HAProxy 会比 Nginx 有更出色的负载均衡速度,在并发处理上也是优于 Nginx 的。

HAProxy 支持 TCP 协议的负载均衡转发,可以对 MySQL 读进行负载均衡,对后端的 MySQL 节点进行检测和负载均衡,大家可以用 LVS+Keepalived 对 MySQL 主从做负载均衡。

HAProxy 负载均衡策略非常多:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)。

Haproxy有8种负载均衡算法(balance)

分别如下:

1.balance roundrobin # 轮询,软负载均衡基本都具备这种算法

2.balance static-rr # 根据权重,建议使用

3.balance leastconn # 最少连接者先处理,建议使用

4.balance source # 根据请求源IP,建议使用

5.balance uri # 根据请求的URI

6.balance url_param,# 根据请求的URl参数'balance url_param' requires an URL parameter name

7.balance hdr(name) # 根据HTTP请求头来锁定每一次HTTP请求

8.balance rdp-cookie(name) # 根据据cookie(name)来锁定并哈希每一次TCP请求

LVS四种模式的区别

特性 NAT 模式 DR 模式 TUN 模式 FULLNAT 模式
核心原理 修改目标IP地址 修改目标MAC地址 IP隧道封装 双向修改IP地址(源和目标)
请求/响应路径 都必须经过LVS 请求经过LVS,响应直接从RS返回给用户 请求经过LVS,响应直接从RS返回给用户 都必须经过LVS
LVS压力 大(处理所有出入流量) 小(只处理入站请求) 中(需要封装/解封装) 最大(处理所有流量,且需额外转换)
Real Server配置 网关必须指向LVS的DIP 必须在同一个物理网络,配置VIP在lo口,且抑制ARP 必须支持IP隧道,拥有公网IP 无特殊要求,网关指向其原路由器即可
网络要求 LVS和RS在同一个LAN LVS和RS在同一个广播域(通常同一个LAN) LVS和RS可以跨机房、跨地域 LVS和RS可以在任意网络环境
性能 较低(有往返流量瓶颈) 最高(响应不经LVS,无瓶颈) 高(响应不经LVS,但隧道有开销) 较低(同NAT,且有额外开销)
典型应用场景 早期或小规模应用,RS数量不多 最常用、性能要求高的生产环境 异地容灾、全局负载均衡 云环境或网络结构复杂,无法更改RS路由的场景

各模式工作流程简述与关键点

1. NAT 模式
  • 工作流程

客户端发送请求到 LVS 的 VIP。

LVS 收到请求,通过负载均衡算法选择一个 Real Server,将请求包的目标 IP 从 VIP 改为 RS 的 IP,然后转发。

RS 处理请求,准备返回响应。注意:因为RS的网关指向LVS,所以响应包会发回给LVS

LVS 收到 RS 的响应包,将源 IP 从 RS 的 IP 改回 VIP,然后返回给客户端。

  • 关键点 :LVS 是进出流量的瓶颈。RS 必须和 LVS 在同一个 LAN,且网关要指向 LVS。
2. DR 模式 - 最常用
  • 工作流程

客户端发送请求到 LVS 的 VIP。

LVS 收到请求,通过负载均衡算法选择一个 Real Server。它不修改IP地址,而是修改目标MAC地址为选定RS的MAC地址,然后转发。

RS 的网卡上配置了VIP(通常是在lo回环接口上),它收到目标MAC是自己的、目标IP是VIP的包,会进行处理。

RS 处理完请求后,直接 将响应包源IP设为VIP,目标IP设为客户端IP,通过本地路由发送出去,不再经过LVS

  • 关键点响应不经过LVS,性能极高。但要求所有 RS 和 LVS 必须在同一个广播域(二层可达),且 RS 需要特殊配置以隐藏 VIP,避免ARP冲突。
3. TUN 模式
  • 工作流程

客户端发送请求到 LVS 的 VIP。

LVS 收到请求,将原始IP包封装在一个新的IP包中(IP over IP),新的IP包的目标IP是远端的RS的公网IP,然后转发。

RS 收到封装包后,进行解封装,得到原始请求包(目标IP是VIP)。因为RS的lo口也配置了VIP,所以它会处理这个请求。

RS 处理完请求后,直接将响应包返回给客户端。

  • 关键点:解决了 DR 模式的跨网络限制,适合异地容灾。但 RS 必须支持 IP隧道 协议,且拥有公网IP,封装和解封装有额外CPU开销。
4. FULLNAT 模式 - 非标准模式,但非常实用
  • 工作流程

客户端发送请求到 LVS 的 VIP。

LVS 收到请求,不仅将目标IP从VIP改为RS的IP,还将源IP从客户端的IP改为LVS的内部IP

RS 收到请求,看到源IP是LVS的内部IP,目标IP是自己的IP。它处理请求并将响应发回给"源IP"(即LVS)。

LVS 收到响应后,再将目标IP从LVS的内部IP改回客户端的真实IP,源IP从RS的IP改回VIP。

  • 关键点解耦了LVS和RS的网络部署。RS 可以处在任何网络位置,完全不需要知道LVS的存在。这是阿里云等大型云厂商对LVS的重要贡献。缺点是破坏了客户端的真实源IP(需要通过TOA等技术在第七层弥补)。

总结与选择建议

  • 追求极致性能,且网络可控 :首选 DR 模式

  • RS在异地或跨复杂网络 :考虑 TUN 模式

  • 云环境或网络结构复杂,不想改动RS配置 :使用 FULLNAT 模式(需要支持该特性的LVS版本)。

  • NAT 模式:一般只作为理解原理或临时测试使用,生产环境较少见。

相关推荐
Yyyy4822 小时前
LVS三种模式及原理
服务器·php·lvs
Yyyy4822 小时前
LVS、Nginx、HAProxy 的区别
运维·nginx·lvs
AAA修煤气灶刘哥2 小时前
Nginx 为什么这么强?10 万并发压不垮,这 3 个黑科技藏不住了!
后端·nginx·架构
eddy-原3 小时前
Nginx高并发原理与Tomcat实战全解析:从IO模型到HTTPS配置与故障排查(第七周)
nginx·https·tomcat
岁岁种桃花儿13 小时前
详解 Kubernetes 命令:kubectl exec -it nginx -- bash 及实战场景
运维·nginx·kubernetes
VueVirtuoso13 小时前
前后端部署 + Nginx 配置 + Cloudflare 全攻略(通俗易懂版)
运维·nginx
小白银子14 小时前
零基础从头教学Linux(Day 42)
linux·运维·服务器·网络·nginx
初学者_xuan14 小时前
零基础新手小白快速了解掌握服务集群与自动化运维(七)Nginx模块--Nginx反向代理与缓存功能(二)
运维·nginx·自动化
看好多桂花树14 小时前
Nginx SSL/TLS 配置
网络·nginx·ssl