负载均衡、LVS 杂谈

LVS(Linux Virtual Server)是一个实现负载均衡和高可用性的解决方案,其调度流程涉及从客户端请求到后端服务器处理,再到响应返回给客户端的整个过程。

一、 LVS 调度流程

  1. 客户端请求 VIP

    • 客户端发送请求到负载均衡器的虚拟 IP 地址(VIP)。
    • VIP 是 LVS 提供的一个虚拟 IP 地址,对客户端透明,客户端认为它是一个单一的服务器。
  2. LVS 接收请求并选择调度算法

    • LVS 内核模块(IPVS)接收到请求。
    • 根据配置的调度算法(如轮询、加权轮询、最少连接等)选择一个合适的后端服务器(RIP)。
  3. LVS 转发请求到 RIP

    • LVS 根据所使用的转发模式,将请求转发给选定的真实 IP 地址(RIP)。LVS 支持三种主要的转发模式:NAT 模式、DR 模式和 TUN 模式。
  4. 后端服务器(RIP)处理请求

    • 选定的后端服务器接收到请求,并进行处理。
    • 处理完成后,后端服务器生成响应数据。
  5. 响应返回客户端

    • 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、  考虑灵活性和扩展性

如下简图描述多层负载均衡例子:

参考:

知乎:说一说负载均衡

知乎:讲讲亿级PV的负载均衡架构

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值