一.背景
1. LVS概述
LVS(Linux Virtual Server)是由章文嵩博士发起的开源负载均衡项目,通过在Linux内核中实现高性能四层交换能力,将多台物理服务器组织成单一虚拟服务。它能够处理百万级并发连接,同时保持线性扩展能力,主要解决单服务器性能瓶颈问题。相比应用层负载均衡(如Nginx),LVS在内核空间直接处理数据包,避免了用户态-内核态切换开销,性能提升可达10倍以上。
LVS 官网:LVS官网
LVS工作原理
VS根据请求报文的目IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS
LVS 相关术语
VS: Virtual Server,负责调度
RS:RealServer,负责真正提供服务
LVS概念
VS:Virtual Server
RS:Real Server
CIP:Client IP
VIP: Virtual serve IP VS外网的IP
DIP: Director IP VS内网的IP
RIP: Real server IP
访问流程
CIP <--> VIP == DIP <--> RIP
LVS集群的类型
lvs-nat
修改请求报文的目标IP,多目标IP的DNAT
lvs-dr
操纵封装新的MAC地址
lvs-tun
在原请求IP报文之外新加一个IP首部
lvs-fullnat
修改请求报文的源和目标IP
2. 核心架构
LVS集群采用三层分层架构:
负载调度层(Director) :运行ipvs内核模块的调度节点,接收所有客户端请求,通过调度算法分发至后端。
关键IP包括:
VIP(Virtual IP) :对外服务IP,客户端访问入口
DIP(Director IP) :与后端通信的内部IP
真实服务器层(Real Server, RS) :实际处理请求的服务节点(如Web/DB服务器),通过RIP(Real IP) 标识。
共享存储层 :为RS提供一致性数据源(如NFS/GFS),避免本地存储导致内容差异。
3. 核心组件
IPVS(IP Virtual Server) :
工作于内核空间的Netfilter INPUT链,执行核心转发逻辑。通过直接修改数据包目标地址(NAT)或MAC地址(DR),实现零拷贝转发59。
ipvsadm :
用户空间配置工具,定义集群服务(VIP:Port)与RS关联规则。例如添加VIP的80端口服务:ipvsadm -A -t 192.168.1.100:80 -s wlc。
4. 工作原理
数据包处理流程分四步:
PREROUTING链 :接收客户端请求,目标IP为VIP。
INPUT链 :IPVS比对请求是否匹配集群服务。
转发决策 :按调度算法选择RS,修改数据包:
DR模式:重写目标MAC为RS MAC
NAT模式:修改目标IP为RIP
POSTROUTING链 :转发至选定RS。
二、理论
1. LVS工作模式详解
| 特性 | DR模式 | NAT模式 | TUN模式 |
| 工作层 | 二层(MAC层) | 四层(IP层) | 三层(IP隧道) |
| 修改内容 | 目标MAC地址 | 目标IP地址 | 新增IP头部封装 |
| RS配置要求 | 绑定VIP至lo接口 | 网关指向DIP | 支持IP隧道协议 |
| 性能 | 最优 | 受限 | 中等 |
| 扩展性 | 同一局域网(≤交换机) | 受限(≤10节点) | 跨地域(WAN支持) |
| 典型场景 | 高并发Web集群 | 小型私有集群 | 异地容灾部署 |
DR模式工作流:

关键约束:所有RS需配置ARP抑制(arp_ignore=1,arp_announce=2),避免响应VIP的ARP请求。
NAT模式工作流:

瓶颈:进出流量均经Director,需处理双向数据包改写。
TUN模式工作流:

适用场景:云环境跨VPC调度或异地多活部署。
LVS的工作模式以及优缺点:
LVS支持多种工作模式,主要包括以下几种:
NAT(Network Address Translation)模式:
原理:负载均衡器修改客户端请求的目标IP地址,将其转发到后端服务器。后端服务器的响应通过负载均衡器返回给客户端。
优点:配置简单,后端服务器只需要将网关设置为负载均衡器即可。
缺点:负载均衡器需要处理所有进出流量,可能成为性能瓶颈。
DR(Direct Routing)模式:
原理:负载均衡器和后端服务器共享一个虚拟IP地址,后端服务器直接将响应发送给客户端,无需经过负载均衡器。
优点:后端服务器直接响应客户端请求,减少了负载均衡器的负担,提高了性能。
缺点:需要在同一物理网络中,后端服务器需要配置虚拟IP地址。
TUN(Tunneling)模式:
原理:负载均衡器将客户端请求封装在IP隧道中,发送到后端服务器。后端服务器解封装后处理请求,响应直接返回给客户端。
优点:后端服务器可以位于不同的网络中,灵活性高。
缺点:需要额外的封装和解封装操作,可能会增加一些延迟。
2. LVS调度算法解析
静态算法(不考虑实时负载):
RR(轮询) :均等分发请求,适用RS性能一致场景。
WRR(加权轮询) :按预设权重分配(如性能强RS权重=3,弱=1)。
SH(源地址散列) :固定CIP映射至同RS,保持会话粘滞。
动态算法(基于实时连接数):
LC(最少连接) :
计算方式:Overhead = Active×256 + Inactive
选择值最小RS。
WLC(加权最少连接) :
Overhead = (Active×256 + Inactive) / Weight
默认推荐算法。
SED(最短期望延迟) :
Overhead = (Active+1)×256 / Weight
避免新请求涌入空闲RS。
三.总结与应用
1.选择lvs的优势
高性能:LVS基于Linux内核实现,性能高效,能够处理大量的并发请求。
高可用性:通过负载均衡和故障转移机制,确保系统的高可用性。
灵活性:支持多种工作模式和负载均衡算法,可以根据实际需求进行配置。
开源免费:LVS是开源软件,用户可以根据自己的需求进行定制和优化。
2.模式选择
追求性能 → DR模式(机房内部)
简化配置 → NAT模式(小型集群)
跨地域扩展 → TUN模式(云环境)
3.典型场景
Web高并发:DR + WLC算法
会话敏感服务:DR + SH算法
混合云部署:TUN + SED算法
LVS的应用场景:
Web服务器集群:通过LVS将客户端的HTTP请求分发到多个Web服务器,提高网站的响应速度和可靠性。
数据库集群:将数据库读写请求分发到多个数据库服务器,提高数据库的性能和可用性。
企业级应用:在企业级应用中,LVS可以用于负载均衡中间件、应用服务器等,确保系统的高可用性。
4.局限性
LVS无应用层解析(HTTP/HTTPS),需结合Nginx/Haproxy实现七层负载。
依赖Linux:LVS只能运行在Linux操作系统上,对于非Linux环境的支持有限。
维护成本:在大规模集群中,LVS的维护和管理需要专业的技术人员。
四.注意事项
1.时间同步
各节点间的时间偏差应不大于1秒,建议使用统一的NTP服务器进行时间更新、
2.DR模式
VIP的MAC广播问题:在DR模型中,每个节点均要配置VIP,存在VIP的MAC广播问题。需要设置内核参数arp_ignore为1和arp_announce为2,以管理MAC广播。
回环接口配置:需要在所有真实服务器(RealServer)上配置lo:0回环接口的VIP,并设置对应的路由。
网络要求:DR模式要求负载均衡器(Director)和真实服务器必须在同一个局域网内。
连接哈希表大小:DR模式的瓶颈在于连接哈希表的大小及处理对应连接的内存大小。对于低版本Linux内核(小于3.0),需要重新编译内核才能修改连接哈希表大小;对于较新的内核(如CentOS 7的kernel 3.10),可以在加载ip_vs内核模块时加参数修改连接哈希表。
3.TUN模式
VIP绑定:必须在所有真实服务器上绑定VIP的IP地址。
网络要求:TUN模式下,负载均衡器和真实服务器可以位于不同的网段。
性能:由于TUN模式涉及对数据包的重新封装,其性能不如DR模式。
4.NAT模式
网络要求:NAT模式下,负载均衡器会修改数据包的目标IP地址,因此不需要负载均衡器和真实服务器在同一网段。
性能瓶颈:负载均衡器需要处理所有进出流量,可能成为性能瓶颈。
5.内核模块加载
确保ip_vs相关的内核模块已成功加载。
6.ARP和RP Filter设置
在真实服务器上,需要关闭ARP学习功能和源地址检查功能(RP Filter),以确保负载均衡器可以正常工作。
7.缓存转发功能
如果需要,可以通过配置内核参数net.ipv4.vs.conn_reuse_mode来禁用LVS的缓存转发功能,但需注意这可能会导致性能下降。
8. 真实服务器网关设置
在NAT模式下,真实服务器的网关应设置为负载均衡器的IP地址。
9. 连接管理
LVS不会主动断开连接,即使真实服务器的状态发生变化,连接也会保持,直到客户端主动断开。
五..集群和分布式简介
1.系统性能扩展方式
Scale UP:向上扩展,增强
Scale Out:向外扩展,增加设备,调度分配问题,Cluster
2.集群Cluster
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%
SLA:Service level agreement(服务等级协议)是在一定开销下为保障服务的性能和可用性,服
务提供商与用户间定义的一种双方认可的协定。通常这个开销是驱动提供服务质量的主要因素。在
常规的领域中,总是设定所谓的三个9,四个9来进行表示,当没有达到这种水平的时候,就会有一
些列的惩罚措施,而运维,最主要的目标就是达成这种服务水平。
停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间,而运维则主要关注计划外
停机时间
HPC:High-performance computing(高性能计算,国家战略资源)
3.分布式
分布式存储:Ceph,GlusterFs,FastDFS,MogileFs
分布式计算:hadoop,Spark
分布式常见应用
分布式应用-服务按照功能拆分,使用微服务
分布式静态资源--静态资源放在不同的存储集群上分布式数据和存储--使用key-value缓存系统
分布式计算--对特殊业务使用分布式计算,比如Hadoop集群。
4.集群和分布式
集群:同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据
和代码都是一样的
分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式
中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起
来,才是完整的业务
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数
来提升效率,
对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器
完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决
定由给哪一台去完成响应,并且台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,
都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败。
六.部署LVS NAT模式集群
1.实验环境准备
| 主机名 | 角色 |
| server1 | 调度器(VS) |
| server2 | 真实服务器(RS) |
| server3 | 真实服务器(RS) |
| server4 | 测试机 |
1.nat模式环境设定
四个虚拟机
1个LVS 1个client 1个rs1 1个rs2
RS1和RS2:

LVS:

1.所用ipvsadm工具
创建虚拟服务器
添加、删除服务器节点
查看群集及节点情况
保存负载分配策略
1.1 ipvasdm工具选项
-A:添加虚拟服务器
-D:删除整个虚拟fuwq
-s:指定负载调度算法(轮询,加权轮询,最少连接,加权最少连接,wlc)
-a:表示添加真实服务器(节点服务器)
-d:删除某一个节点
-t:指定VIP地址及TCP端口
-r:指定RIP地址及TCP端口
-m:表示使用NAT群集模式
-g:表示使用DR模式
-i:表示使用TUN模式
-w:设置权重(权重为0时表示暂停节点)
-p60:表示保持长连接60秒
-l:列表查看LVS虚拟服务器(默认为查看所有)
-n:以数字形式显示地址,端口等信息,常与“-l”选项组合使用
2.修改主机IP地址实施步骤
client

lvs(两个网卡)


RS1

RS2

2.实验
1.NAT模式
1.网络配置
LVS:



[root@lvs system-connections]# cd /etc/NetworkManager/system-connections
[root@lvs system-connections]# vi eth0.nmconnection
[root@lvs system-connections]# vi eth0.nmconnection
RS1:
激活网卡
[root@RS1 ~]# nmcli connection up eth1-dhcp

RS2

2.启用内核路由


命令
[root@lvs ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0
[root@lvs ~]# vi /etc/sysctl.conf
[root@lvs ~]# sysctl -p
[root@lvs ~]# vi /etc/sysctl.conf
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 0
[root@lvs ~]# vi /etc/sysctl.conf
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@lvs ~]# cat /etc/sysctl
cat: /etc/sysctl: No such file or directory
[root@lvs ~]# cat /etc/sysctlconf
cat: /etc/sysctlconf: No such file or directory
[root@lvs ~]# cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward = 1
3.安装ipvsadm
[root@lvs ~]# dnf install ipvsadm -y

4.添加调度策略
[root@lvs ~]# ipvsadm -A -t 192.168.1.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.1.100:80 -r 192.168.137.200:80
[root@lvs ~]# ipvsadm -a -t 192.168.1.100:80 -r 192.168.137.130:80 -m
[root@lvs ~]#

查看策略

5.保存并启动

6.设置web
# mkdir -p /var/www/html
# echo "RS2 192.168.137.130" > /var/www/html/index.html
# cat /var/www/html/index.html
RS1:

RS2:

7.测试

无误,nat模式完成。
2.DR模式
1.DR模式环境设定
5个虚拟机
1个LVS 1个client 1个rs1 1个rs2 1个route
和nat模式一样配置环境即可
2.实施步骤
1.LVS配置

2.route配置


3.client配置

4.RS1和RS2配置


5.调节RS1和RS2(设定lo不对外响应)



6.在lvs 和 rs 中设定vip
[root@lvs-dr ~]# ipvsadm -A -t 192.168.137.254:80 -s rr
[root@lvs-dr ~]# ipvsadm -a -t 192.168.137.254:80 -r 192.168.137.130:80 -g
[root@lvs-dr ~]# ipvsadm -a -t 192.168.137.254:80 -r 192.168.137.200:80 -g
[root@lvs-dr ~]# 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.137.254:80 rr
-> 192.168.137.130:80 Route 1 0 10
-> 192.168.137.200:80 Route 1 0 10

7.测试

无误,DR模式完成实验。
3.LVS-DR数据抓包

通过使用Wireshark进行抓包:
对 vmware network adapter vmnet1进行抓包

这个正是通过路由器route转发访问的mac地址
综上所述,可以得论:
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
4.LVS-TUN模式(隧道模式)
转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部
(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP 是CIP)
TUN模式特点
1.DIP, VIP, RIP都应该是公网地址
2.RS的网关一般不能指向DIP
3.请求报文要经由Director,但响应不能经由Director
4.不支持端口映射
5.RS的OS须支持隧道功能
5.LVS-fullnet模式
fullnet模式数据传输过程传输过程图:

fullnat:通过同时修改请求报文的源IP地址和目标IP地址进行转发
CIP --> DIP
VIP --> RIP
1.VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP
2.RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
3.请求和响应报文都经由Director
4.支持端口映射
6.LVS-13种算法
lvs调度算法类型
ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态被分为两种:静态方法和动态方法
静态方法:仅根据算法本身进行调度,不考虑RS的负载情况
动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度
lvs静态调度算法
1、RR:roundrobin 轮询 RS分别被调度,当RS配置有差别时不推荐
2、WRR:Weighted RR,加权轮询根据RS的配置进行加权调度,性能差的RS被调度的次数少
3、SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
4、DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
lvs动态调度算法
主要根据RS当前的负载状态及调度算法进行调度Overhead=value较小的RS会被调度
1、LC:least connections(最少链接发)
适用于长连接应用Overhead(负载值)=activeconns(活动链接数) x 256+inactiveconns(非活动链接数)
2、WLC:Weighted LC(权重最少链接)
默认调度方法Overhead=(activeconns x 256+inactiveconns)/weight
3、SED:Shortest Expection Delay,
初始连接高权重优先Overhead=(activeconns+1+inactiveconns) x 256/weight
但是,当node1的权重为1,node2的权重为10,经过运算前几次的调度都会被node2承接
4、NQ:Never Queue,第一轮均匀分配,后续SED
5、LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理
6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS。
1322

被折叠的 条评论
为什么被折叠?



