负载均衡
分类:
文章
•
2024-02-24 16:11:10
- 负载均衡有两方面的含义
- 首先,大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间
- 其次,单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高
负载均衡策略
-
权重轮询算法
- 根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求
- 能确保高性能的服务器得到更多的使用率,避免低性能的服务器负载过重
-
响应速度均衡算法
- 对内部各服务器发出一个探测请求(例如Ping),然后根据内部中各服务器对探测请求的最快响应时间来决定哪一台服务器来响应客户端的服务请求
- 但这最快响应时间仅仅指的是负载均衡设备与服务器间的最快响应时间,而不是客户端与服务器间的最快响应时间
- 能较好的反映服务器的当前运行状态
-
最少连接数均衡算法
- 客户端的每一次请求服务在服务器停留的时间可能会有较大的差异,随着工作时间加长,如果采用简单的轮循或随机均衡算法,每一台服务器上的连接进程可能会产生极大的不同
- 最少连接数均衡算法对内部中需负载的每一台服务器都有一个数据记录,记录当前该服务器正在处理的连接数量,当有新的服务连接请求时,将把当前请求分配给连接数最少的服务器,使均衡更加符合实际情况
- 此种均衡算法适合长时处理的请求服务,如FTP
-
DNS响应均衡算法
- 在此均衡算法下,分处在不同地理位置的负载均衡设备收到同一个客户端的域名解析请求,并在同一时间内把此域名解析成各自相对应服务器的IP地址(即与此负载均衡设备在同一位地理位置的服务器的IP地址)并返回给客户端,则客户端将以最先收到的域名解析IP地址来继续请求服务,而忽略其它的IP地址响应
- 适合应用在全局负载均衡的情况下,对本地负载均衡是没有意义的
网络系统状况检测
- 如果负载均衡策略没有对网络系统状况的检测方式和能力,一旦在某台服务器或某段负载均衡设备与服务器网络间出现故障的情况下,负载均衡设备依然把一部分数据流量引向那台服务器,这势必造成大量的服务请求被丢失,达不到不间断可用性的要求
- 所以良好的负载均衡策略应有对网络故障、服务器系统故障、应用服务故障的检测方式和能力
-
Ping侦测
- 简单快速,但只能大致检测出网络及服务器上的操作系统是否正常,对服务器上的应用服务检测就无能为力了
-
TCP Open侦测
- 每个服务都会开放某个通过TCP连接,检测服务器上某个TCP端口(如Telnet的23口,HTTP的80口等)是否开放来判断服务是否正常
-
HTTP URL侦测
- 比如向HTTP服务器发出一个对
main.html
文件的访问请求,如果收到错误信息,则认为服务器出现故障
四层负载均衡

- 基于IP+端口的负载均衡
- 常用实现四层负载均衡的软件:F5,LVS
- 此种负载均衡器不理解应用协议(如 HTTP/FTP/MySQL 等等)
- 负载均衡设备在接收到第一个来自客户端的 SYN 请求时,选择一个最佳的服务器,并对报文中目标 IP 地址进行修改(改为后端服务器 IP),直接转发给该服务器
- 为保证服务器回包可以正确返回给负载均衡设备,在转发报文的同时可能还会对报文原来的源地址进行修改
- TCP 的连接建立,即三次握手是客户端和服务器直接建立的,负载均衡设备只是起到一个类似路由器的转发动作
- 有时需要记录下这个 TCP 或者 UDP 的流量是由哪台服务器处理的,后续这个连接的所有流量都同样转发到同一台后端服务器处理
- 例如服务器将客户端注册、购物等服务请求信息保存的本地数据库的情况下
-
记录方式
- 客户端IP地址与服务器的对应信息是保存在负载均衡设备上
- 在客户端浏览器 cookie内做独一无二的标识
七层负载均衡

- 基于虚拟的 URL 或主机 IP 的负载均衡
- 常用实现七层负载均衡的软件:haproxy, nginx, apache
- 主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器
- 根据七层的 URL、cookie、浏览器类别、语言等特征来决定是否要进行负载均衡
- 如果Web 服务器分成两组,一组是中文语言的,一组是英文语言的,那么七层负载均衡就可以当用户来访问域名时,自动辨别用户语言,然后选择对应的语言服务器组进行负载均衡处理
- 如果要根据真正的应用层内容再选择服务器,只能先代理最终的服务器和客户端建立连接(三次握手)后,才可能接受到客户端发送的真正应用层内容的报文
- 负载均衡设备在这种情况下,更类似于一个代理服务器
- 负载均衡和前端的客户端以及后端的服务器会分别建立 TCP 连接
- 所以从这个技术原理上来看,七层负载均衡明显的对负载均衡设备的要求更高,处理七层的能力也必然会低于四层模式的部署方式
比较
- 四层负载架构设计比较简单,无需解析具体的消息内容,在网络吞吐量及处理能力上会相对比较高
-
七层应用负载的优势
-
灵活性
- 可以对客户端的请求和服务器的响应进行修改
- 可根据流经的数据类型(如判断数据包是图像文件、压缩文件或多媒体文件格式等),把数据流量引向相应内容的服务器来处理,增加系统性能
-
安全性
- 四层模式下SYN Flood攻击都会被转发到后端的服务器上;而七层模式下这些SYN攻击在负载均衡设备上就截止,不会影响后台服务器的正常运营
- 可以在七层层面设定多种策略,过滤特定报文,例如SQL Injection等应用层面的特定攻击手段
-
七层负载均衡的缺点
- 设备配置复杂以及故障排查上的复杂性
- 检查HTTP报头会占用大量的系统资源,势必会影响到系统的性能,在大量连接请求的情况下,负载均衡设备自身容易成为网络整体性能的瓶颈
- 七层模式的确可以SYN Flood攻击流量从服务器屏蔽,但负载均衡设备本身要有强大的抗DDoS能力,否则即使服务器正常而作为中枢调度的负载均衡设备故障也会导致整个应用的崩溃