运营研发团队 施洪宝html
一. 基础知识
1.1 基础
- 什么是负载均衡?
当单机提供的并发量不能知足需求时,咱们须要多台服务器同时服务。当客户请求到达时,如何为客户选择最合适的服务器?这个问题就是负载均衡问题。
- 负载均衡主要须要解决的问题是哪些?
- 从客户端的角度上看,客户须要最快速的获得服务器的相应,负载均衡时须要找出能最快相应客户需求的服务器进行服务。
- 从服务端来看如何使得每台服务器都能达到较高的利用率,最大限制的为用户提供快速、可靠的服务是服务端须要考虑的主要问题。
1.2 负载均衡分类
- 硬件
- 软件
- dns负载均衡
- LVS负载均衡(4层)
- nginx, haproxy(7层)
二. F5负载均衡
- F5是一家美国的公司,该公司生产一些硬件设备能够做为负载均衡器使用(例如:big-ip), 本文后续部分所说的F5是指其负载均衡器产品。
- 不一样的产品实现的功能不一致,具体状况须要根据产品说明书。
- F5能够在4-7层内作负载均衡,用户能够根据需求进行配置。
- 因为F5能够作7层负载均衡,故而能够实现会话管理,http处理等。
2.1 数据转发模式
- standard类型, 这种模式下,客户端与F5服务器创建链接,F5服务器与真实服务器创建链接,F5服务器将客户需求转发给真实服务器,并将真实服务器的相应转发给客户端,此时F5能够查看请求和相应的全部信息。
- 四层转发模式(performance L4), 这种模式下,F5只处理4层如下的数据。客户端将数据发送给F5, F5仅将数据转发给真实服务器,包括TCP的握手数据包以及挥手数据包,真实服务器须要先将数据发送给F5服务器,F5将其转发给客户端。
- 路由模式, 这种模式与LVS的DR模式相似。
- ...
2.2 负载均衡算法
- 轮询,加权轮询。
- 源地址哈希
- ...
2.3 小结
F5的优点在于功能强大,并发量高,能知足客户的大多数需求,但其成本较高,通常大型国企可能会使用。nginx
2.4 参考
三. dns负载均衡
- dns负载均衡由dns服务提供厂商提供。
- 最初的dns负载均衡提供简单轮询,不能根据客户端或者服务端状态进行选择。
- 目前,有些dns服务厂商能够提供智能dns服务,用户能够设置负载均衡方案,例如:根据客户端ip地址,选择就近的服务器。
- 对于目前大多数的公司而言,为了更好的服务用户,一般会使用dns负载均衡,将用户按照就近原则,分配到某个集群服务器上。以后,集群内再采用其余的负载均衡方案。
四. Linux Virtual Server(LVS)
- LVS经过修改数据包Ip地址,Mac地址实现负载均衡。
- LVS由ipvs(内核中), ipvsadm(用户态)组成。LVS须要理解tcp,ip头部。
- 当tcp握手信号,SYN数据包达到时,ipvs选择一个后端服务器,将数据包进行转发。在此以后,全部包含相同的ip,tcp头部的数据包都会被转发到以前选择的服务器上。很明显,ipvs没法感知数据包内容。
4.1 分类
4.2 基本原理
4.2.1 LVS-DR
LVS-DR模式的基本原理以下图所示:
算法
4.2.2 LVS-NAT
LVS-NAT模式的基本原理以下图所示:
后端
4.3 负载均衡算法
4.3.1 静态算法
- 轮询(Round Robin, RR)
- 加权轮询(Weight Round Robin, WRR)
- 源地址Hash(Source Hash, SH)
- 目的地址Hash(Destination Hash, DH), 能够设置多个VIP
4.3.2 动态算法
- 最少链接(Least Connections, LC),找出当前链接数最小的服务器
- 加权最少链接(Weighted Least Connections, WLC)
- 最短时间望延迟(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服务器。
- 永不排队(Never Queue Scheduling, NQ), 改进的sed, 若是某台服务器链接数为0,直接链接过去,不在进行sed计算。
- 基于局部性的最少链接(locality-Based Least Connections, LBLC),根据目标ip, 找出目标ip最近使用的服务器,若是服务器存在而且负载没有大于一个阈值,则将新的链接分配到这个服务器上,不然按照最少链接找出一个服务器处理该请求。
- 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication, LBLCR),根据目标ip,维护一个服务器组,每次从组中挑选服务器,若是服务器不能够处理,则从全部服务器中按照最少链接挑选出一台服务器,并将其加入到目标ip的处理组服务器中。
4.3 参考
五. Nginx Load Balance
- nginx负载均衡工做在7层,它会与client、upstream分别创建tcp链接,nginx须要维护这两个链接的状态。
- nginx的stream模块能够用于4层负载均衡,但通常不多使用。
5.1 基本原理
nginx作7层负载均衡的基本原理以下图所示:
服务器
5.2 负载均衡算法
- 轮询(默认)
- 加权轮询
- 源ip哈希
- 响应时间
- url 哈希