一、什么是负载均衡
负载均衡(Load balancing)是一种计算机网络技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。这是来自维基百科的介绍。负载均衡的目的,就在于平衡负载,给用户提供优质,可靠,稳定的服务。
LB 集群是 load balance 集群的简写,翻译成中文就是负载均衡集群。
上图是个最简单的负载均衡实例, 应用服务器并不直接与用户相连, 用户连接负载均衡服务器,然后由负载均衡服务器把消息转发给实际应用服务器。负载均衡器内部会根据应用服务器的负载情况,决定把消息转发给哪台服务器处理。同时负载均衡器还可以对用户屏蔽应用服务器失效,只要把用户的消息转发到非失效服务器即可。
二、集群
提到负载均衡,就不能不介绍另外一个概念: 集群。集群就是一组部署有相同应用的服务器。
例如web 服 务器。用户的请求无论连接到哪台服务器上,都能得到相同的处理。这样我们实现一种服务器,可以将用户的请求根据特定规则转发到应用服务器上进行处理。就实 现了完整的集群处理系统。这个服务器如果实现了后台服务器感知和配置功能,能够了解后台服务器的可用情况。就可以被称作为负载均衡器。
负载均衡在目前网络服务规模越来越庞大的情况下,成为一个大型服务器系统必须要面对的问题。随着用户和业务的增多,来自用户的访问量和数据流量不断增大,对 服务器的计算能力和储存要求也在不断增加,单台服务器根本无法承担这么庞大的数据处理请求。这个时候,我们必须利用集群技术,采用一组服务器对来自用户的 请求进行处理,服务器的数量要能够不断的扩充。在集群的前端,我们采用负载均衡技术,平均分散用户的请求到不同的处理服务器,并且能够在集群中某个服务失效时,即时感知,屏蔽,将消息转发到其他可用服务器上。
三、集群的类型
1.scale on:向上扩展
将服务器的内存容量调大和cpu数量增加些(简单说升级服务器硬件)
2.scale out:向外扩展
一台服务器应付不过来,我们就再增加一台服务器。
向外扩张的工作模式:当客户端向服务器端发送请求,服务器端只拿出来一台服务器来相应我们的客户端的请求。
(1).LB:Load Balancing:负载均衡集群
负载均衡集群中有一个分发器或者叫调度器,我们将其称之为Director,它处在多台服务器的上面,分发器根据内部锁定义的规则或调度方式从下面的服务器群中选择一个以此来响应客户端发送的请求。
(2).HA:High Availability 高可用集群
高可用集群是服务的可用性比较高,当我们某台服务器死机后不会造成我们的服务不可用。其工作模式则是将一个具有故障的服务转交给一个正常工作的服务器,从而 达到服务不会中断。一般来说我们集群中工作在前端(分发器)的服务器都会对我们的后端服务器做一个健康检查,如果发现我们服务器当机就不会对其在做转发。
在集群中为了防止服务器出现“脑裂”的现象,集群中一般会添加Fence设备,有的是使用服务器本身的的硬件接口称为内部Fence,有的则是外部电源设备称为外部Fence,当一台服务出现问题响应超时的时候,Fence设备会对服务器直接发出硬件管理指令,将服务器重启或关机,并向其他节点发出信号接管服务。
衡量标准:可用性=在线时间/(在线时间+故障处理时间)
(3).HP:Hight Performance 高性能
高性能的集群是当某一个任务量非常大的时候,我们做一个集群共同来完成这一个任务。这种处理方式我们称为并行处理集群,并行处理集群是将大任务划分为小任务,分别进行处理的机制。一般这样的集群用来科学研究与大数据运算等方面的工作。现在比较火的Hadoop就是使用的并行处理集群。
说明:三种集群之间的区别
负载均衡着重在于提供服务并发处理能力的集群,高可用以提升服务在线的能力的集群。高性能着重用于处理一个海量任务。
三、负载均衡算法介绍
前面介绍的内容,解决了从用户到实际后台服务器之间的数据包发送和响应的问题。下面我们介绍选择实际后台运行服务器的具体负载均衡算法。考虑到服务请求的不同类型服务器的不同处理能力以及随机选择造成的负载分配不均匀等问题,为了更加合理的把负载分配给内部的多个服务器,就需要应用相应的能够正确反映各个服务器处理能力及网络状态的负载均衡算法。我们以LVS为参考,介绍比较经典的8种负载均衡算法。
1.轮巡调度(Round Robin)
调度器通过“轮巡"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
2.加权轮巡(Weighted Round Robin)
调度器通过“加权轮巡"调度算法根据真实服务器的不同处理能力来调度访问请求这样可以保证处理能力强的服务器能处理更多的访问流量调度器可以自动问询真实服务器的负载情况,并动态地调整其权值
3.最少链接(Least Connections)
调度器通过“最少链接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上如果集群系统的真实服务器具有相近的系统性能,采用“最小链接"调度算法可以较好地均衡负载。
4.加权最少链接(Weighted Least Connections)
在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
5.基于局部性的最少链接(Locality-Based Least Connections)
“基于局部性的最少链接"调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接"的原则选出一个可用的服务器,将请求发送到该服务器。
6.带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
“带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小链接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小链接"原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
7.目标地址散列(Destination Hashing)
“目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
8.源地址散列(Source Hashing)
“源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空