LVS(Linux Virtual Server)是一个实现负载均衡和高可用性的解决方案,其调度流程涉及从客户端请求到后端服务器处理,再到响应返回给客户端的整个过程。
一、 LVS 调度流程
-
客户端请求 VIP
- 客户端发送请求到负载均衡器的虚拟 IP 地址(VIP)。
- VIP 是 LVS 提供的一个虚拟 IP 地址,对客户端透明,客户端认为它是一个单一的服务器。
-
LVS 接收请求并选择调度算法
- LVS 内核模块(IPVS)接收到请求。
- 根据配置的调度算法(如轮询、加权轮询、最少连接等)选择一个合适的后端服务器(RIP)。
-
LVS 转发请求到 RIP
- LVS 根据所使用的转发模式,将请求转发给选定的真实 IP 地址(RIP)。LVS 支持三种主要的转发模式:NAT 模式、DR 模式和 TUN 模式。
-
后端服务器(RIP)处理请求
- 选定的后端服务器接收到请求,并进行处理。
- 处理完成后,后端服务器生成响应数据。
-
响应返回客户端
- NAT 模式:后端服务器将响应数据发送回 LVS,LVS 修改数据包的源 IP 地址为 VIP,再将数据包发送回客户端。
- DR 模式:后端服务器直接将响应数据包发送回客户端,绕过 LVS。
- TUN 模式:后端服务器通过 IP 隧道将响应数据包直接发送回客户端,绕过 LVS。
二、LVS 的三种转发模式
1. NAT 模式(Network Address Translation)
- 工作原理:LVS 修改数据包的目标 IP 地址,将 VIP 改为选定的 RIP,并将数据包转发给后端服务器。后端服务器处理请求后,再将响应数据包发回 LVS,LVS 再修改数据包的源 IP 地址,将 RIP 改为 VIP,并将数据包发回给客户端。
- 优点:部署简单,无需修改后端服务器的配置。
- 缺点:LVS 需要处理所有流量,容易成为性能瓶颈。
2. DR 模式(Direct Routing)
- 工作原理:LVS 仅修改数据包的 MAC 地址,将数据包直接传送给后端服务器。后端服务器处理请求后,直接将响应数据包返回给客户端。
- 优点:LVS 只处理请求数据包,响应数据包直接返回客户端,降低 LVS 的负载。
- 缺点:需要在同一局域网内部署 LVS 和后端服务器,且后端服务器需要配置 VIP。
3. TUN 模式(IP Tunneling)
- 工作原理:LVS 将数据包封装在 IP 隧道中,并通过隧道将数据包传送给后端服务器。后端服务器处理请求后,直接将响应数据包返回给客户端。
- 优点:LVS 只处理请求数据包,响应数据包直接返回客户端,适用于跨地域的数据中心。
- 缺点:需要配置 IP 隧道,部署复杂。
LVS 的调度流程是客户端请求 VIP,LVS 根据调度算法选择 RIP,并将请求转发给后端服务器。后端服务器处理请求并返回响应数据。在 NAT 模式下,响应数据通过 LVS 返回给客户端;在 DR 模式和 TUN 模式下,响应数据直接返回给客户端。通过合理配置 LVS,可以实现高效的负载均衡和高可用性。
参考:超详细!使用 LVS 实现负载均衡原理及安装配置详解 - 腾讯云开发者社区-腾讯云
三、简述容灾策略
七层负载均衡内,用户->DNS->(LVS四层负载均衡)VIP->DR->RS(Nginx反向代理)->业务机器。 每一层都需要不同方式的容灾
1、DNS
DNS 杂谈-CSDN博客,BGP+Anycast
2、VIP 的级别高可用
- keepalived 模式下的单集群 VIP 高可用
- BGP 网络等价路由实现 VIP 高可用
3、DR 主机对于 RS 主机的探活检测
LVS 集群内保障 RS 主机的高可用是依靠 DR 主机对于后端 RS 主机进行定期健康检测,常用工具有 keepalived、ldirectord
4、Nginx反向代理高可用
- 被动检查: ngx_http_upstream_module 和 proxy_http_proxy_module 这两个模块的一些指令去实现的。通过 proxy_next_upstream , server 指令的 max_fails 和 fail_timeout 相互作用控制的
-
主动检查:即代理机服务器主动检查后端服务器是否正常,如果不正常就剔除,标记不为可用,直到检测到正常为止。主动的优势在于及时发现后端故障并剔除,节省时间。而被动检查在后端未被标记的情况下,每次都需要请求一次才行。使用主动健康检测模块例子是 tengine 的 ngx_http_upstream_check_module。
check interval=3000 rise=2 fall=5 timeout=1000 type=http;
四、四层和七层负载均衡
四层负载均衡(基于IP+端口的负载均衡):通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
七层负载均衡(基于虚拟的 URL 或主机 IP 的负载均衡):通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器
在7层负载均衡器模式下,负载均衡器与客户端及后端的服务器会分别建立一次TCP连接,而在4层负载均衡器模式下,仅建立一次TCP连接。
负载均衡(Load Balance) 也称四层、七层交换机 | 四层负载均衡 | 七层负载均衡 (通常七层支持四层) |
技术原理 | ip+tcp(端口) | URL应用层(也称内容交换) |
典型代表 | LVS、F5等 | Nginx、Haproxy,MySQL Proxy等 |
缺点和优点 | 不理解MySQL,ftp,http等应用协议等,满足不了特定的需求,比如动静分离,缓存自定义等但是配置简单,效率也很高。 | 对负载均衡设备要求很高,处理七层能力一般低于四层模式的部署方式,但有点比较智能化,比如动静分离,根据不同请求定义图片,缓存,可以对客户端请求和服务器的相应进行自定义修改,极大提升了应用系统在网络层的灵活性 |
安全性 | eg:SYNFlood攻击,有的软四层应用则会转发到后端服务器,有的则可以防止攻击,这个和设备(软硬)有一定关系。 | 一般可以在七层进行拦截,不影响后台服务器正常运营,可以设置多种策略,过滤特定报文。 |
应用 | 对应tcp应用 比如C/S开发的ERP | 应用广发HTTP协议,应用主要是网站或内部信息平台等B/S开发的系统。 |
案例(工作原理) | 接受客户的syn请求,通过上述方式选择后端指定服务器,并对报文中目标ip地址进行修改,改为后端服务器ip,tcp连接是直接建立,而负载均衡类似路由器作用 | 如果要根据真正的应用层内容在选择服务器,则先代理最终服务器和客户端建立连接(三次握手)后,才可能接受到客户端发送的真正应用层内容报文,然后根据该报文中特定字段,加上负载均衡设备的服务器选择方式,决定最终选择的内部服务器。此时充当了代理服务器。 |
四层七层选择 | 1、 根据需求使用,七层可以提高流量智能化,但配置复杂化 2、 追求安全性,或者性能 3、 考虑灵活性和扩展性 |
如下简图描述多层负载均衡例子:
参考: