LVS简介
LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。
LVS基于内核网络层工作,有着超强的并发处理能力,单台LVS可以承受上万的并发连接。LVS是基于4层的负载均衡软件,因此LVS在所有负载均衡软件中性能最强,稳定性最高,消耗CPU和内存少。LVS是工作在4层,所以它可以对应用层的所有协议作负载均衡,包括http、DNS、ftp等。
LVS 官网: http://www.linuxvirtualserver.org/
LVS 相关术语
VS: Virtual Server,负责调度
RS:RealServer,负责真正提供服务
集群和分布式简介
系统性能扩展方式:
1.向上扩展,增强(花钱购买提升处理能力)
2.向外扩展,增加设备,调度分配问题,Cluster
集群的概念:为解决某个特定问题将计算机组合起来形成单个系统
Cluster常见的三种类型:
LB:LoadBalancing(负载均衡)由多个主机组成,每个主机只承担一部分访问
(分摊给多个主机共同完成,减小压力)
【目的:解决单机处理不了所有请求的问题】
HA:High Availiablity(高可用)SPOF(single Point Of failure)
MTBF:Mean Time Between Failure 平均无故障时间,正常时间
MTTR:Mean Time To Restoration( repair)平均恢复前时间,故障时间
A=MTBF/(MTBF+MTTR) (0,1):99%, 99.5%, 99.9%, 99.99%, 99.999%
(计算结果越小故障时间越长)
(安排A,B两台LVS,B一般负责监督A工作,当A罢工时,B及时顶上)
【目的:阻止体系出现故障】
SLA(服务等级协议)是服务提供商与用户之间达成的正式契约,旨在明确服务性能与可用性标准,同时约定相关成本。协议执行质量通常由投入成本决定。行业惯例采用"三个9"(99.9%)或"四个9"(99.99%)等量化指标来衡量服务等级,未达标时将触发相应违约责任条款。运维工作的核心目标就是确保这些服务等级指标的达成。
停机时间可分为计划内维护与计划外故障两类,运维团队主要聚焦于预防和减少计划外停机事件。
HPC(高性能计算)作为国家战略资源,是指通过并行计算等技术实现超强运算能力的计算模式。
集群和分布式
集群:同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据
和代码都是一样的。
分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式
中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起
来,才是完整的业务。
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数
来提升效率。
对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器
完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决
定由给哪一台去完成响应,并且台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,
都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败。

LVS概念
VS:Virtual Server(调度器),内部两台机子通过vrrp实现高可用【HA】
RS:Real Server(资源主机)
CIP:Client IP(用户的IP)
VIP: Virtual serve IP VS外网的IP(客户访问的IP,也就是对外开放的IP)
DIP: Director IP VS内网的IP(调度器和资源主机联系的IP,也就是内网IP)
RIP: Real server IP(资源主机的IP)
访问流程:CIP <--> VIP == DIP <--> RIP
(用户通过自己的IP访问调度器的VIP,然后调度器使用与资源主机联系的特定IP【内网IP】访问资源主机的IP)
【NAT模式则是从资源主机(RIP)返回到用户IP(CIP)】
lvs****集群的类型
vs-nat: 修改请求报文的目标IP,多目标IP的DNAT
lvs-dr: 操纵封装新的MAC地址
lvs-tun: 在原请求IP报文之外新加一个IP首部
lvs-fullnat: 修改请求报文的源和目标IP
nat****模式
Ivs-nat:
本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和
PORT实现转发
RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
支持端口映射,可修改请求报文的目标PORT
VS必须是Linux系统,RS可以是任意OS系统
nat****模式数据逻辑

1.发出请求【客户端向调度器发送请求包,请求包里包含客户端的IP、目标IP(调度器对外联系的VIP)以及自己的端口号】
2.调度并修改请求报文【调度器接收到客户端发送的请求包后,将目标IP改为某台资源主机的IP,端口号改为对应资源主机的端口号,打包起来通过交换机发送给对应资源主机】
3.响应报文【资源主机在回应调度器时,将包中的发送方IP改成自己的IP,将目的IP改成客户端IP,然后打包通过交换机发送给调度器】
4.修改响应报文【调度器接受到来自资源主机的包后,将发送方改为自己对外链接的IP(VIP),目标IP不变,依旧是客户机;但是,将原来资源主机的端口号改为原来与客户机通信的端口号;打包发送给客户端】
5.接收响应【客户端收到调度器发送的通过报文响应的数据包】
nat模式的弊端:由于进出口都依靠于中间的调度器,大量的进出口会到达调度器的极限,影响客户的使用,建议资源主机尽量不要超过10台。【DR(直连路由模式)可解决该模式的弊端,在资源主机收到包后,将修改后的数据包直接跨过调度器之间发送到客户端,可大大减少了调度器的工作量】【DR只需要走两层结构,物理层,数据链路层,用的是mac地址,减少了时间的损耗】
nat模式的实现:

环境搭建:
镜像:rhel9
nat模式:172.25.254....
仅主机模式:192.168.0....
全网通:
在VS中设置内核路由功能,使同一个网卡都可以互相通信
查看参数:
sysctl -a | grep ip_forward

vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
、
查看配置:
sysctl -p

编写防火墙规则:
安装ipvsadm:
yum install ipvsadm -y
iptables -t nat -A POSTROUTING -o ens224 -j SNAT --to-source 172.25.254.100
查看:
iptables -t nat -nL

修改RS1,RS2的网关为VS的网关:
vim /etc/NetworkManager/system-connections/
nmcli connection reload
nmcli connection up ens160

测试:
[root@client ~]# ping 192.168.0.102

在VS中添加调度策略:
ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.101:80
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.101:80 -m
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.102:80 -m
查看:
ipvsadm -Ln

【如果出现下图现象:

请使用该命令全部修改为Masq:
ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.101:80 -m
】
关闭防火墙,打开阿帕奇(httpd):
systemctl stop firewalld
systemctl start httpd
在RS1,RS2网页中写入内容:
echo "RS1 server - 192.168.0.101" > /var/www/html/index.html
echo "RS2 server - 192.168.0.102" > /var/www/html/index.html
客户机访问RS1,RS2:
[root@client ~]# curl 192.168.0.101
RS1 server - 192.168.0.101
[root@client ~]# curl 192.168.0.102
RS2 server - 192.168.0.102

查看:
cat /proc/net/ip_vs

cat /proc/net/ip_vs_conn

保存VS的规则:
ipvsadm -Sn
ipvsadm-save > /etc/sysconfig/ipvsadm

删除所有规则:
ipvsadm -C
查看是否删除:
ipvsadm -Ln

重新加载规则:
ipvsadm-restore > /etc/sysconfig/ipvsadm
查看规则是否恢复:
ipvsadm -Ln

以上操作均为0时,如果想开机启动,请执行以下命令:
systemctl enable --now ipvsadm.service
客户机测试:
for N in {1..6};do curl 172.25.254.100;done

VS修改为权重调用算法:
ipvsadm -E -t 172.25.254.100:80 -s wrr
ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.101:80 -m -w 2
ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.102:80 -m -w 1
客户机测试:
for N in {1..6};do curl 172.25.254.100;done

部署DR模式集群案例:
1.客户端发送数据帧给vs调度主机帧中内容为客户端IP+客户端的MAC+VIP+VIP的MAC
2.VS调度主机接收到数据帧后把帧中的VIP的MAC该为RS1的MAC,此时帧中的数据为客户端IP+客户端的MAC+VIP+RS1的MAC
3.RS1得到2中的数据包做出响应回传数据包,数据包中的内容为VIP+RS1的MAC+客户端IP+客户端IP的 MAC
环境搭建:
镜像:rhel9
nat模式:172.25.254....
仅主机模式:192.168.0....


配置环境:
关闭防火墙,开启阿帕奇服务(httpd):
systemctl stop firewalld
systemctl start httpd
修改lvs,RS1,RS2的网关:
vim /etc/NetworkManager/system-connections/ens160.nmconnection

重启网络服务:
nmcli connection up ens160
nmcli connection up ens160
将客户机的网关改为172.25.254.100
查看:

【目的是客户机将所有请求给路由器】
删除router的所有网关:
vim /etc/NetworkManager/system-connections/
在lvs,RS1,RS2中设定vip:
ip addr add dev lo 192.168.0.100/32

在RS1和RS2中解决响应问题:
[root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@rs2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@rs2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@rs2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
在lvs中配置策略:
安装:
yum install ipvsadm.x86_64
ipvsadm -A -t 192.168.0.100:80 -s wrr
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.101:80 -g
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.102:80 -g
查看:
ipvsadm -Ln

客户机测试:
for N in {1..6};do curl 192.168.0.100;done

TUN****模式数据传输过程
TUN(IP Tunnel)模式是 LVS(Linux Virtual Server)的三种负载均衡模式之一(另外两种是 NAT 和 DR)。它通过 IP 隧道(IPIP 封装) 实现请求转发,适用于跨网络(如不同机房)的负载均衡场景。
TUN 模式的定义
-
TUN(IP Tunnel):
-
采用 IP-over-IP 封装(类似 VPN),将客户端请求封装后转发给 Real Server(后端服务器)。
-
Real Server 直接响应客户端(不经过 LVS 调度器),适用于高并发、跨网络的负载均衡。
-
要求 Real Server 支持 TUN 设备,并配置 VIP(Virtual IP)。
-

1.客户端发送请求数据包,包内有源IP+vip+dport
2.到达vs调度器后对客户端发送过来的数据包重新封装添加IP报文头,新添加的IP报文头中包含
TUNSRCIP(DIP)+TUNDESTIP(RSIP1)并发送到RS1
3.RS收到VS调度器发送过来的数据包做出响应,生成的响应报文中包含SRCIP(VIP)+DSTIP(CIP) +port,响应数据包通过网络直接回传给client
【
1.DR模式的加强版,与DR模式相似
2.方式复杂,排错较为麻烦,容易仅仅因为router一个设备问题,导致系统崩溃
3.只有在需要跨VLAN时才会使用
】
TUN****模式特点
1.DIP, VIP, RIP都应该是公网地址
2.RS的网关一般不能指向DIP
3.请求报文要经由Director,但响应不能经由Director
4.不支持端口映射
5.RS的OS须支持隧道功能
总结
-
TUN 模式 适用于 跨网络、高并发 的负载均衡场景。
-
数据流向 :
客户端 → LVS(封装) → Real Server(解封装并直接响应) → 客户端 -
优点:调度器压力小,支持跨机房。
-
缺点:Real Server 需支持 TUN,配置较复杂。
如果需要跨公网部署负载均衡,TUN 模式是最佳选择之一!
TUN 模式 vs DR 模式 vs NAT 模式:

fullnet****模式
什么是 FULLNAT 模式?
FULLNAT(Full Network Address Translation)是 LVS(Linux Virtual Server)的一种负载均衡模式,由 阿里云团队 在标准 NAT 模式基础上扩展而来,用于解决传统 NAT 模式的局限性。
核心特点:
-
双向地址转换:
-
请求时 :修改 源 IP(CIP → LVS 内网 IP) 和 目标 IP(VIP → RIP)。
-
响应时 :修改 源 IP(RIP → VIP) 和 目标 IP(LVS 内网 IP → CIP)。
-
-
透明代理:后端服务器(Real Server)无需感知客户端真实 IP,所有流量看似来自 LVS。

fullnat:通过同时修改请求报文的源IP地址和目标IP地址进行转发
CIP --> DIP
VIP --> RIP
1.VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP
2.RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
3.请求和响应报文都经由Director
4.支持端口映射
FULLNAT 模式的核心特点

FULLNAT vs 传统 NAT:

适用场景
-
云计算平台(如阿里云 SLB):多租户隔离,后端服务器无需暴露公网 IP。
-
跨机房负载均衡:Real Server 可分布在不同的网络环境中。
-
安全隔离需求:隐藏客户端真实 IP,防止直接攻击后端服务。
总结
-
FULLNAT 是 NAT 的增强版,通过双向地址转换解决传统 NAT 的网络限制。
-
优点:部署灵活,支持复杂网络拓扑,后端无需特殊配置。
-
缺点:性能略低于 DR/TUN,需额外模块支持。
如果需要 跨网络、高安全性 的负载均衡方案,FULLNAT 是最佳选择之一!