LVS(Linux Virtual Server)详细笔记(理论篇)
一.详解
1. LVS概述
LVS(Linux Virtual Server)是由章文嵩博士发起的开源负载均衡项目,通过在Linux内核中实现高性能四层交换能力,将多台物理服务器组织成单一虚拟服务。它能够处理百万级并发连接,同时保持线性扩展能力,主要解决单服务器性能瓶颈问题。相比应用层负载均衡(如Nginx),LVS在内核空间直接处理数据包,避免了用户态-内核态切换开销,性能提升可达10倍以上。
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。
算法 | 计算逻辑 | 适用场景 |
---|---|---|
RR | 顺序循环分配 | RS性能均等 |
WLC | (活动连接×256+非活动连接)/权重 | 默认通用场景 |
SED | (活动连接+1)×256/权重 | 避免新请求排队 |
SH | 哈希(CIP)→固定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不会主动断开连接,即使真实服务器的状态发生变化,连接也会保持,直到客户端主动断开。