1、LVS简介
1.1 LVS基本介绍
-
LVS(Linux Virtual Server)是一个开源的负载均衡解决方案,它基于Linux平台,通过将多个服务器组成一个虚拟服务器集群,实现高效的流量分发和管理。LVS的核心功能是在网络的第四层(传输层)上进行智能的流量分配,从而提高网络吞吐量和系统可用性。
-
LVS项目由章文嵩博士在1998年发起,是中国最早出现的自由软件项目之一。它被集成到Linux内核中,利用内核模块实现IP层面的数据请求负载均衡调度。LVS能够使得终端用户通过外部负载均衡服务器访问后端的Web服务器,而用户感知到的是一个统一的服务,实际上请求被分配到了后端的多个服务器上。
1.2 LVS体系架构
1.2.1 物理层面的组成
-
负载调度器(Load Balancer / Director Server):
-
这是LVS体系结构的前端节点,对外表现为一个具有单一IP地址(VIP)的服务器。
-
它的主要任务是接收客户端的请求,并根据预定的调度算法将这些请求分发到后端的真实服务器上。
-
-
真实服务器池(Server Pool / Real Servers):
-
由多台服务器组成,它们是实际执行客户端请求的处理工作负载的机器。
-
这些服务器可以是Web服务器、数据库服务器、邮件服务器等,执行各种服务。
-
-
共享存储(Shared Storage):
-
为服务器池提供统一的存储空间,确保所有服务器提供相同的数据和服务。
-
共享存储对于保持集群中数据的一致性至关重要。
-
1.2.2 软件层面的组成
-
IPVS(IP Virtual Server):
-
工作在内核空间的一段代码,是LVS实现负载均衡的核心组件。
-
IPVS负责处理网络流量的分发,将请求根据调度规则转发给真实的服务器。
-
-
IPVSADM:
-
工作在用户空间的命令行工具,用于配置IPVS规则。
-
它定义了集群服务、真实服务器以及调度策略等,并将这些规则传递给IPVS内核模块。
-
1.2.3 LVS企业架构示意图
1.2.4 LVS中的IP地址术语
IP类型 | 缩写 | 描述 | 用途 |
---|---|---|---|
虚拟IP | VIP (Virtual IP) | LVS集群对外提供服务的IP地址,客户端请求直接发送到此地址 | 接收进入的请求并分发到后端真实服务器 |
调度器IP | DIP (Director IP) | LVS调度器用于与后端真实服务器通信的IP地址 | 在NAT模式下,作为私网接口与真实服务器通信 |
真实服务器IP | RIP (Real IP) | 后端真实服务器的IP地址,与LVS调度器通信 | 接收来自LVS的请求并处理,然后直接或通过LVS发送响应 |
1.3 LVS的工作模式
1.3.1 LVS/NAT模式
-
网络地址转换(NAT):在这种模式下,LVS充当一个路由器和NAT设备。客户端的原始请求到达LVS后,LVS会修改请求的数据包,将目标IP地址从VIP改为选定的真实服务器(RS)的IP地址(RIP),同时也会修改目标端口(如果使用端口映射)。然后,请求被发送到后端的RS。
-
数据流向:RS处理请求并生成响应,响应包的源IP是RS的IP地址,目标IP是客户端的IP地址。当响应包返回到LVS时,LVS再次修改数据包,将源IP地址从RS的IP地址改为VIP,并将源端口改回客户端的端口,然后将响应转发给客户端。
-
特点:NAT模式下,LVS处理所有的请求和响应,因此可能成为性能瓶颈。但它的优点是安全性较高,因为RS的IP地址不会被客户端直接看到。
1.3.2 LVS/DR模式(直接路由模式)
-
直接路由(Direct Routing):在DR模式下,LVS仅修改请求数据包的目标MAC地址,使其直接发送到选定的RS,而不是通过LVS转发。这样,请求的IP地址保持不变,目标MAC地址改为RS的MAC地址。
-
数据流向:RS处理请求后,响应包的源MAC和源IP是RS的地址和IP,目标MAC和目标IP是客户端的地址和IP,因此响应包直接发送给客户端,不再经过LVS。
-
网络要求:由于MAC地址是针对特定网络段的,所以RS和LVS必须位于同一个物理网络段中。
1.3.3 LVS/TUN模式(隧道模式)
-
IP隧道(IP Tunneling):LVS为每个请求创建一个IP隧道,将原始的IP数据包封装在一个新的IP数据包内,新数据包的目标IP是RS的IP地址。
-
数据流向:RS处理请求后,响应包的源IP是VIP,目标IP是客户端的IP。响应包通过RS的隧道接口直接发送给客户端,不经过LVS。
-
网络要求:与DR模式类似,RS和LVS也必须位于同一个物理网络段中。
1.3.4 模式选择的考虑因素
-
性能:DR和TUN模式因为响应流量不经过LVS,通常能提供比NAT模式更高的性能。
-
安全性:NAT模式可以隐藏RS的IP地址,提供额外的安全性。
-
网络结构:选择哪种模式也取决于网络的物理布局和拓扑结构
1.3.5 淘宝研发的LVS第四种工作模式
-
FULLNAT模式是淘宝基于传统LVS的NAT模式研发的一种新的负载均衡转发模式。这种模式在处理网络请求时,会同时修改请求数据包的源IP地址和目标IP地址,与标准的NAT模式相比,它提供了一些额外的优势:
特性/模式 | LVS/NAT模式 | LVS/DR模式 | LVS/TUN模式 | FULL NAT模式 |
---|---|---|---|---|
IP地址修改 | 修改目标IP | 修改MAC地址 | 封装IP包 | 源目IP都修改 |
网络要求 | 任意网络 | 同一局域网 | 同一局域网 | 任意网络 |
请求处理 | 经过LVS | 经过LVS | 经过LVS | 经过LVS |
响应处理 | 经过LVS | 直接返回 | 直接返回 | 直接返回 |
安全性 | 较高 | 较低 | 较低 | 高 |
性能 | 受限 | 高效 | 高效 | 高效 |
系统瓶颈 | LVS可能成为瓶颈 | 无瓶颈 | 无瓶颈 | 无瓶颈 |
端口映射支持 | 支持 | 不支持 | 不支持 | 支持 |
操作系统要求 | 任意 | 任意 | Linux | 任意 |
网络负载 | 较高 | 较低 | 较低 | 较低 |
隐藏RS IP | 是 | 否 | 否 | 是 |
-
LVS/NAT模式:传统的网络地址转换模式,安全性高,但请求和响应都经过LVS,可能成为瓶颈。
-
LVS/DR模式:直接路由模式,请求经过LVS,响应直接返回给客户端,效率高,要求LVS和RS在同一局域网。
-
LVS/TUN模式:IP隧道模式,通过封装IP包来转发请求,响应直接返回给客户端,要求LVS和RS在同一局域网。
-
FULL NAT模式:淘宝研发的模式,同时修改请求报文的源IP和目标IP,提高了安全性和性能,对网络环境适应性强。
1.4 LVS的十二种调度算法
调度算法名称 | 缩写 | 描述 |
---|---|---|
轮询 | RR | 将请求按顺序轮流分发到每台服务器。 |
加权轮询 | WRR | 根据服务器权重将请求轮流分发,权重高的服务器接收更多请求。 |
源地址哈希 | SH | 来自同一IP地址的请求总是分发到同一台服务器。 |
目标地址哈希 | DH | 目标地址相同的请求总是分发到同一台服务器。 |
最少连接 | LC | 将请求分发到当前活跃连接数最少的服务器。 |
加权最少连接 | WLC | 考虑服务器权重的最少连接算法,权重高的服务器可以有更多连接。 |
最短预期延迟 | SED | 将请求分发到预期延迟(包括服务时间和队列延迟)最低的服务器。 |
永不排队 | NQ | 将请求均匀分配到服务器,如果服务器忙碌,则使用SED算法调度。 |
基于地域的最少连接 | LBLC | 根据服务器地理位置和负载状态进行调度,适用于Web缓存等应用。 |
带复制功能的基于地域的最少连接 | LBLCR | 解决LBLC算法中负载不均的问题,将请求复制到负载较轻的服务器。 |
加权故障转移 | FO | 在服务器过载时,选择未过载且权重最高的服务器进行调度。 |
超量连接 | OVF | 根据服务器权重和活动连接数进行调度,直到达到权重限制。 |
-
加权故障转移(FO)和超量连接(OVF)是4.15版本中新增的调度算法,可能在一些LVS的较新版本中提供,但使用频率相对较低。
1.5 LVS与其他负载均衡解决方案对比
特性/方面 | LVS | HAProxy | Nginx |
---|---|---|---|
工作层次 | 网络第四层(传输层) | 网络第四层(传输层)和第七层(应用层) | 网络第四层(传输层)和第七层(应用层) |
支持Web服务 | 否 | 是,HTTP/HTTPS | 是,HTTP/HTTPS |
性能 | 高性能,适合大量并发 | 高效,适合大量并发 | 性能较好,但通常用于HTTP/HTTPS负载 |
CPU消耗 | 较低 | 较低 | 相对较高 |
内存使用 | 较低 | 较低 | 相对较高 |
稳定性 | 高,适用于关键业务 | 高,适用于关键业务 | 稳定,但通常用于Web服务器 |
配置复杂度 | 较复杂 | 中等 | 简单,易于上手 |
健康检查 | 有限 | 支持更复杂的健康检查 | 支持端口检测和更简单的健康检查 |
扩展性 | 通过Keepalived实现高可用 | 通过多进程或多线程提升扩展性 | 通过模块化提供扩展性 |
协议支持 | 支持多种协议,如TCP/UDP/HTTP | 支持TCP和HTTP协议 | 主要支持HTTP/HTTPS协议 |
应用场景 | 适合大规模流量分发 | 适合需要会话保持或七层处理的站点 | 适合Web服务器和反向代理 |
开发社区 | 活跃,但相对小众 | 活跃,有广泛的社区支持 | 非常活跃,有庞大的用户和开发者社区 |
多核支持 | 通过内核模块支持 | 多线程,较好地利用多核 | 单线程,多进程模型 |
负载均衡算法 | 轮询、加权轮询、最小连接等 | 轮询、加权轮询、最少连接、哈希等 | 轮询、加权轮询、最少连接、IP哈希等 |
商业支持 | 开源,社区支持 | 开源,社区支持 | 开源,有商业版Nginx Plus |
特点 | 高性能,高稳定性,配置复杂 | 灵活性好,功能全面 | 功能丰富,易于配置,适用于Web应用 |
-
LVS主要工作在网络的第四层,它提供了高性能的负载均衡,尤其适合于流量巨大的场景,但它不支持直接作为Web服务器使用。
-
HAProxy同样可以工作在第四层和第七层,提供了丰富的健康检查和负载均衡策略,适用于需要复杂负载均衡策略的场景,并且可以作为Web服务器使用。
-
Nginx主要工作在第七层,除了作为负载均衡器外,它还可以作为Web服务器、反向代理服务器、静态内容服务器等多种角色使用。