1.LVS概述
LVS(Linux Virtual Server Linux虚拟服务器)是一个用于构建高可用、可扩展、负载均衡的开源软件项目。它运行在 Linux 操作系统上,主要用于分发网络流量以提高系统的性能和可用性。LVS 提供了负载均衡的功能,使得多个服务器能够共同处理来自客户端的请求,从而分担负载,提高整个系统的性能和可靠性。
由于单台服务器的性能总是有限的,简单的提高硬件性能并不能真正解决这个问题。为此,必须采用多服务器和负载均衡技术才能满足大量并发访问的需要。
调度器(Scheduler): LVS 使用调度器算法来决定将请求发送到哪个后端服务器。调度器可以选择使用 Round Robin、Least Connections、Weighted Round Robin 等不同的负载均衡算法。后端服务器池: LVS 可以配置多个后端服务器,这些服务器共同处理客户端的请求。这些服务器可以是物理服务器或虚拟机。监控与管理: LVS 提供了一些工具和机制,用于监控后端服务器的健康状态,以便及时检测故障并从负载均衡中排除故障服务器。可扩展性: LVS 具有良好的可扩展性,可以适应不同规模和负载的系统需求。支持多种协议: LVS 可以工作在不同网络层,支持多种协议,如 TCP、UDP、IP。
2.LVS结构
+ -- -- -- -- -- -- -- -- -- -- -- +
| Client Machine | < -- 发送请求
| |
| + -- -- -- + |
| | VIP | | < -- 访问 VIP
| + -- -- -- + |
+ -- -- -- -- -- | -- -- -- -- -- - +
|
+ -- -- -- -- -- | -- -- -- -- -- - +
| LVS Scheduler | < -- 负载均衡调度器
| |
| + -- -- -- -- - + |
| | | | < -- 选择后端服务器
| | | |
| + -- + -- + + -- + -- + |
| | RS1 | | RS2 | | < -- 处理请求
| + -- -- - + + -- -- - + |
+ -- -- -- -- -- -- -- -- -- -- -- +
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Client Machine: 客户端机器,发送请求到 LVS 集群。VIP (Virtual IP): 虚拟 IP 地址,是 LVS 集群的入口,客户端通过访问 VIP 来连接到 LVS 集群。LVS Scheduler: 负载均衡调度器,接收客户端请求,根据负载均衡算法选择一个后端服务器来处理请求。(后面详细介绍)RS1 和 RS2 (Real Servers): 后端服务器,实际处理客户端请求的服务器。负载均衡调度器将请求分发到这些服务器上。、
3.LVS Scheduler
3.1 什么是LVS Scheduler
LVS Scheduler(负载均衡调度器)是 LVS(Linux Virtual Server)架构中的一个重要组件,负责决定将客户端的请求分发到后端服务器池中的哪一台服务器上。调度器的选择性能、负载均衡算法、以及高可用性等方面的设计对整个系统的性能和稳定性起着关键作用。、
关键特性
负载均衡算法: LVS Scheduler 支持多种负载均衡算法,以确保请求在后端服务器之间均匀分布。常见的算法包括:
Round Robin(轮询): 依次将请求分发给每个后端服务器。Least Connections(最少连接): 将请求发送到当前连接数最少的服务器。Weighted Round Robin(加权轮询): 类似轮询,但给每个服务器分配一个权重,根据权重来决定分发的请求比例。 Virtual IP(VIP): 调度器通常关联一个虚拟 IP 地址(VIP),客户端通过访问这个 VIP 来连接到 LVS 集群。调度器将根据负载均衡算法选择一个后端服务器来处理客户端的请求。连接状态管理: LVS Scheduler 可以追踪和管理客户端与后端服务器之间的连接状态。这包括连接的数量、状态、是否活跃等信息,以便在进行负载均衡决策时考虑这些信息。协议支持: LVS Scheduler 可以工作在不同网络层,支持多种协议,包括 TCP、UDP、IP。这样,它可以用于负载均衡各种类型的应用。高可用性: 在一些 LVS 部署中,可以配置多个调度器实例以实现高可用性。这样,如果一个调度器发生故障,另一个调度器可以接管工作,确保负载均衡服务的可用性。健康检查: LVS Scheduler 通常支持对后端服务器进行健康检查,以及时检测并排除出现故障的服务器,从而确保系统的可靠性。自定义配置: 调度器通常提供丰富的配置选项,允许管理员根据特定的网络环境和应用需求进行定制化配置。
3.2 常见负载均衡方式
Round Robin(轮询): 将请求依次分发给后端服务器,确保每个服务器获得相等的请求量。这是一种简单的负载均衡算法。Least Connections(最少连接): 将请求发送到当前连接数最少的服务器,以确保负载更均匀地分布在服务器之间。Weighted Round Robin(加权轮询): 类似于轮询,但为每个服务器分配一个权重,以便根据服务器的性能或容量分配不同比例的请求。Least Response Time(最小响应时间): 将请求发送到响应时间最短的服务器,以最大程度地减少客户端等待时间。IP Hash: 使用客户端 IP 地址的散列值来确定请求应该被发送到哪个后端服务器。这样可以确保同一客户端的请求总是被发送到同一台服务器。Least Bandwidth(最少带宽): 将请求发送到当前带宽使用最少的服务器,以确保网络资源更均匀地分配。Least Packets(最少数据包): 将请求发送到当前处理的数据包最少的服务器,以确保处理负载更均匀。Random(随机): 随机选择一个后端服务器来处理请求。虽然简单,但无法保证负载的均匀分布。Chained Failover(链式故障转移): 按照优先级链的方式配置服务器,如果高优先级服务器不可用,请求将传递给下一个低优先级服务器。Cookie-based Load Balancing: 使用客户端的 cookie 信息来决定将请求发送到哪个后端服务器,通常用于会话保持和状态管理。
4. IP虚拟服务器软件IPVS
在调度器的实现技术中,IP负载均衡技术是效率最高的。主要有三种ip负载均衡技术
NAT 模式(Network Address Translation): 在NAT模式下,负载均衡设备(如LVS调度器)会修改客户端请求的源地址和目标地址,将请求转发到后端服务器。这种方式通过地址转换实现负载均衡,使得客户端与后端服务器之间的通信似乎是通过负载均衡设备进行的。TUN 模式(IP Tunneling): TUN 模式使用隧道技术,将客户端请求封装在一个隧道中,然后通过负载均衡设备将请求转发到后端服务器。这种方式通过隧道来传输数据,负载均衡设备在隧道的入口和出口充当转发点。DR 模式(Direct Routing): 在DR模式下,负载均衡设备仅修改客户端请求的目标 MAC 地址,将请求转发给后端服务器。客户端和后端服务器之间直接通信,负载均衡设备不直接参与数据传输。
4.1NAT 模式
在LVS的NAT模式中,通信过程如下:
客户端请求:
客户端发起请求,将请求数据包发送到LVS集群的Virtual IP(VIP)。 LVS调度器处理:
LVS调度器接收到客户端请求的数据包。 源地址转换:LVS调度器修改数据包的源地址,将其替换为自己的IP地址。 目标地址转换:LVS调度器将数据包的目标地址(VIP)转换为一个后端服务器的实际IP地址。 数据包转发:经过地址转换后,LVS调度器将数据包转发给后端服务器。 后端服务器处理:
后端服务器接收到经过LVS调度器转发的请求。 后端服务器处理请求并生成响应。 后端服务器的响应数据包返回给LVS调度器。 LVS调度器响应处理:
LVS调度器接收到后端服务器的响应数据包。 目标地址还原:LVS调度器将响应数据包中的目标地址还原为原始的VIP。 源地址还原:LVS调度器将响应数据包中的源地址还原为原始的客户端IP地址。 响应数据包转发:经过地址还原后,LVS调度器将响应数据包发送给客户端。
NAT模式下,整个过程都要通过LVS
,所以LVS
的性能瓶颈会是问题。
4.2TUN 模式
TUN模式通过使用隧道技术,在客户端和后端服务器之间建立了一条隧道,将原始的请求和响应数据包封装在隧道中进行传输。
客户端请求:
客户端发起请求,将请求数据包发送到LVS集群的VIP。 LVS调度器处理:
LVS调度器接收到客户端请求的数据包。 隧道封装:LVS调度器使用Tunnel设备将请求数据包封装在一个隧道中。 隧道转发:LVS调度器通过网络将封装的隧道转发给后端服务器。 后端服务器处理:
当LVS调度器接收到客户端的请求数据包时,它会使用Tunnel设备进行隧道封装。 隧道封装是一种将原始数据包封装在一个新的数据包中的过程。在TUN模式中,这个封装的新数据包通常是一个特殊的隧道协议数据包。 在封装的过程中,LVS调度器将客户端请求的原始数据包嵌套在一个新的封装头中,这个封装头包含了目标后端服务器的IP地址等信息。 LVS调度器响应处理:
隧道封装完成后,LVS调度器通过网络将封装的隧道数据包转发给后端服务器。 这个转发过程通常涉及网络层的路由,确保封装的隧道数据包能够到达目标后端服务器。 传统的IP路由机制用于将数据包从负载均衡设备传输到后端服务器。
4.3 DR模型
报文转发方式:不修改目标IP地址和目标端口,也不封装IP报文,而是将请求报文的数据帧的目标MAC地址改为真实服务器的MAC地址
数据帧的MAC地址是真实 服务器的MAC地址,并且又在同一个局域网。那么根据局域网的通讯原理,真实服务器是一定能够收到由负载均衡服务器发出的数据包。真实服务器接收到请求数据包的时候, 解开IP包头查看到的目标IP是VIP。
这里我看网卡修改的lo:1类似的逻辑接口,后续再补充。
数据链路层处理: 在DR模型中,LVS调度器只修改数据链路层的目标MAC地址,不修改IP层。这意味着负载均衡设备在网络层不介入客户端请求的IP地址。
直接路由: LVS调度器将客户端请求直接路由到后端服务器,不进行NAT转换或IP隧道封装。
后端服务器处理: 后端服务器接收到直接路由的请求,处理请求并生成响应,将响应数据包发送回客户端。
响应返回: 后端服务器的响应通过网络直接返回给客户端,LVS调度器不参与响应数据包的传输。
直接路由: LVS调度器将客户端请求直接路由到后端服务器,不进行NAT转换或IP隧道封装。
后端服务器处理: 后端服务器接收到直接路由的请求,处理请求并生成响应,将响应数据包发送回客户端。
响应返回: 后端服务器的响应通过网络直接返回给客户端,LVS调度器不参与响应数据包的传输。