【整理总结】负载均衡浅析

运营研发团队 施洪宝html

一. 基础知识

1.1 基础

  1. 什么是负载均衡?
当单机提供的并发量不能知足需求时,咱们须要多台服务器同时服务。当客户请求到达时,如何为客户选择最合适的服务器?这个问题就是负载均衡问题。
  1. 负载均衡主要须要解决的问题是哪些?
  • 从客户端的角度上看,客户须要最快速的获得服务器的相应,负载均衡时须要找出能最快相应客户需求的服务器进行服务。
  • 从服务端来看如何使得每台服务器都能达到较高的利用率,最大限制的为用户提供快速、可靠的服务是服务端须要考虑的主要问题。

1.2 负载均衡分类

  1. 硬件
  • F5
  1. 软件
  • dns负载均衡
  • LVS负载均衡(4层)
  • nginx, haproxy(7层)

二. F5负载均衡

  1. F5是一家美国的公司,该公司生产一些硬件设备能够做为负载均衡器使用(例如:big-ip), 本文后续部分所说的F5是指其负载均衡器产品。
  2. 不一样的产品实现的功能不一致,具体状况须要根据产品说明书。
  3. F5能够在4-7层内作负载均衡,用户能够根据需求进行配置。
  4. 因为F5能够作7层负载均衡,故而能够实现会话管理,http处理等。

2.1 数据转发模式

  1. standard类型, 这种模式下,客户端与F5服务器创建链接,F5服务器与真实服务器创建链接,F5服务器将客户需求转发给真实服务器,并将真实服务器的相应转发给客户端,此时F5能够查看请求和相应的全部信息。
  2. 四层转发模式(performance L4), 这种模式下,F5只处理4层如下的数据。客户端将数据发送给F5, F5仅将数据转发给真实服务器,包括TCP的握手数据包以及挥手数据包,真实服务器须要先将数据发送给F5服务器,F5将其转发给客户端。
  3. 路由模式, 这种模式与LVS的DR模式相似。
  4. ...

2.2 负载均衡算法

  1. 轮询,加权轮询。
  2. 源地址哈希
  3. ...

2.3 小结

F5的优点在于功能强大,并发量高,能知足客户的大多数需求,但其成本较高,通常大型国企可能会使用。nginx

2.4 参考

三. dns负载均衡

  1. dns负载均衡由dns服务提供厂商提供。
  2. 最初的dns负载均衡提供简单轮询,不能根据客户端或者服务端状态进行选择。
  3. 目前,有些dns服务厂商能够提供智能dns服务,用户能够设置负载均衡方案,例如:根据客户端ip地址,选择就近的服务器。
  4. 对于目前大多数的公司而言,为了更好的服务用户,一般会使用dns负载均衡,将用户按照就近原则,分配到某个集群服务器上。以后,集群内再采用其余的负载均衡方案。

四. Linux Virtual Server(LVS)

  1. LVS经过修改数据包Ip地址,Mac地址实现负载均衡。
  2. LVS由ipvs(内核中), ipvsadm(用户态)组成。LVS须要理解tcp,ip头部。
  3. 当tcp握手信号,SYN数据包达到时,ipvs选择一个后端服务器,将数据包进行转发。在此以后,全部包含相同的ip,tcp头部的数据包都会被转发到以前选择的服务器上。很明显,ipvs没法感知数据包内容。

4.1 分类

  • LVS-NAT
  • LVS-DR
  • LVS-TUN

4.2 基本原理

4.2.1 LVS-DR

LVS-DR模式的基本原理以下图所示:
image算法

4.2.2 LVS-NAT

LVS-NAT模式的基本原理以下图所示:
image后端

4.3 负载均衡算法

4.3.1 静态算法

  1. 轮询(Round Robin, RR)
  2. 加权轮询(Weight Round Robin, WRR)
  3. 源地址Hash(Source Hash, SH)
  4. 目的地址Hash(Destination Hash, DH), 能够设置多个VIP

4.3.2 动态算法

  1. 最少链接(Least Connections, LC),找出当前链接数最小的服务器
  2. 加权最少链接(Weighted Least Connections, WLC)
  3. 最短时间望延迟(Shortest Expected Delay Scheduling, SED) 基于WLC。例如: 现有A, B, C三台服务器,权重分别为100,200,300,当前的链接数分别为1,2,3,下一个链接到达时,经过计算指望时延选择服务器(1+1)/100, (2+1)/200, (3+1)/300, 故而选择C服务器。
  4. 永不排队(Never Queue Scheduling, NQ), 改进的sed, 若是某台服务器链接数为0,直接链接过去,不在进行sed计算。
  5. 基于局部性的最少链接(locality-Based Least Connections, LBLC),根据目标ip, 找出目标ip最近使用的服务器,若是服务器存在而且负载没有大于一个阈值,则将新的链接分配到这个服务器上,不然按照最少链接找出一个服务器处理该请求。
  6. 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication, LBLCR),根据目标ip,维护一个服务器组,每次从组中挑选服务器,若是服务器不能够处理,则从全部服务器中按照最少链接挑选出一台服务器,并将其加入到目标ip的处理组服务器中。

4.3 参考

五. Nginx Load Balance

  1. nginx负载均衡工做在7层,它会与client、upstream分别创建tcp链接,nginx须要维护这两个链接的状态。
  2. nginx的stream模块能够用于4层负载均衡,但通常不多使用。

5.1 基本原理

nginx作7层负载均衡的基本原理以下图所示:
image服务器

5.2 负载均衡算法

  1. 轮询(默认)
  2. 加权轮询
  3. 源ip哈希
  4. 响应时间
  5. url 哈希
相关文章
相关标签/搜索