跳转至

负载均衡


二层负载均衡

负载均衡服务器对外提供一个虚拟ip,集群中不同的机器采用相同的ip地址,但是机器的mac地址(物理地址)不一样,当负载均衡服务器收到请求以后,通过改写报文的目标MAC地址的方式将请求转发到目标机器实现负载均衡。

三层负载均衡

和二层负载均衡类似,负载均衡对外依然提供一个VIP(虚拟ip),但是集群中不同的机器采用不同的IP地址,当负载均衡服务器收到请求以后,通过IP讲请求发到不同的真实服务器。

四层负载均衡

四层负载均衡工作在osi的传输层,由于在传输层,只有TCP/UDP协议,这两种协议中除了包含源ip、目标ip以外,还包含源端口号以及目的端口号。四层负载均衡服务器在接受到客户端请求后,已通过修改数据包的地址信息(IP+端口号)讲流量转发到应用服务器,有代表性的负载均衡工具有(LVM、HAProxy、nginx),但是Nginx和HAProxy不完全是四层的,他们是是基于四层和七层技术,但主要是七层。

七层负载均衡

七层负载均衡工作在osi模型的应用层,应用层协议较多,常见的 http、redius、dns等。七层负载就可以给予这些协议来负载,比如同Web服务器的负载均衡,除了根据IP加端口进行负载外,还可以根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。典型的工具有(HAProxy、nginx,)

负载均衡算法

轮循均衡(Round Robin) 每一次来自网络的请求轮流分配给内部中的服务器,从1至N然后重新开始。此种均衡算法适合于服务器组中的所有服务器都有相同的软硬件配置并且平均服务请求相对均衡的情况。
权重轮循均衡(Weighted Round Robin) 根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。例如:服务器A的权值被设计成1,B的权值是 3,C的权值是6,则服务器A、B、C将分别接受到10%、30%、60%的服务请求。此种均衡算法能确保高性能的服务器得到更多的使用率,避免低性能的服务器负载过重。
随机均衡(Random) 把来自网络的请求随机分配给内部中的多个服务器
权重随机均衡(Weighted Random) 此种均衡算法类似于权重轮循算法,不过在处理请求分担时是个随机选择的过程。
响应速度均衡(Response Time) 负载均衡设备对内部各服务器发出一个探测请求(例如Ping),然后根据内部中各服务器对探测请求的最快响应时间来决定哪一台服务器来响应客户端的服务请求。此种均衡算法能较好的反映服务器的当前运行状态,但这最快响应时间仅仅指的是负载均衡设备与服务器间的最快响应时间,而不是客户端与服务器间的最快响应时间。
最少连接数均衡(Least Connection) 客户端的每一次请求服务在服务器停留的时间可能会有较大的差异,随着工作时间加长,如果采用简单的轮循或随机均衡算法,每一台服务器上的连接进程可能会产生极大的不同,并没有达到真正的负载均衡。最少连接数均衡算法对内部中需负载的每一台服务器都有一个数据记录,记录当前该服务器正在处理的连接数量,当有新的服务连接请求时,将把当前请求分配给连接数最少的服务器,使均衡更加符合实际情况,负载更加均衡。此种均衡算法适合长时处理的请求服务,如FTP。
处理能力均衡 此种均衡算法将把服务请求分配给内部中处理负荷(根据服务器CPU型号、CPU数量、内存大小及当前连接数等换算而成)最轻的服务器,由于考虑到了内部服务器的处理能力及当前网络运行状况,所以此种均衡算法相对来说更加精确,尤其适合运用到第七层(应用层)负载均衡的情况下。
DNS响应均衡(Flash DNS) 在Internet上,无论是HTTP、FTP或是其它的服务请求,客户端一般都是通过域名解析来找到服务器确切的IP地址的。在此均衡算法下,分处在不同地理位置的负载均衡设备收到同一个客户端的域名解析请求,并在同一时间内把此域名解析成各自相对应服务器的IP地址(即与此负载均衡设备在同一位地理位置的服务器的IP地址)并返回给客户端,则客户端将以最先收到的域名解析IP地址来继续请求服务,而忽略其它的IP地址响应。在种均衡策略适合应用在全局负载均衡的情况下,对本地负载均衡是没有意义的。

常用负载软件

  • nginx
  • HAproxy
  • LVS
  • keepalived

keepalived

Keepalived for Linux
华三vrrp load averages

参考

MGW——美团点评高性能四层负载均衡