浅析负载均衡与集群

一、什么是负载均衡

首先我们先介绍一下什么是负载均衡:负载平衡(Load balancing)是一种计算机网络技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。这是来自维基百科的介绍。负载均衡的目的,就在于平衡负载,给用户提供优质,可靠,稳定的服务。

上图是个最简单的负载均衡实例,应用服务器并不直接与用户相连,用户连接负载均衡服务器,然后由负载均衡服务器把消息转发给实际应用服务器。负载均衡器内部会根据应用服务器的负载情况,决定把消息转发给哪台服务器处理。同时负载均衡器还可以对用户屏蔽应用服务器失效,只要把用户的消息转发到非失效服务器即可。

提到负载均衡,就不能不介绍另外一个概念:集群。集群就是一组部署有相同应用的服务器。例如web服务器。用户的请求无论连接到哪台服务器上,都能得到相同的处理。这样我们实现一种服务器,可以将用户的请求根据特定规则转发到应用服务器上进行处理。就实现了完整的集群处理系统。这个服务器如果实现了后台服务器感知和配置功能,能够了解后台服务器的可用情况。就可以被称作为负载均衡器。

负载均衡在目前网络服务规模越来越庞大的情况下,成为一个大型服务器系统必须要面对的问题。随着用户和业务的增多,来自用户的访问量和数据流量不断增大,对服务器的计算能力和储存要求也在不断增加,单台服务器根本无法承担这么庞大的数据处理请求。这个时候,我们必须利用集群技术,采用一组服务器对来自用户的请求进行处理,服务器的数量要能够不断的扩充。在集群的前端,我们采用负载均衡技术,平均分散用户的请求到不同的处理服务器,并且能够在集群中某个服务失效时,即时感知,屏蔽,将消息转发到其他可用服务器上。

负载均衡分为硬件和软件:

(1).硬件LB(比较出名的)

F5公司的BIG-IP系列、Citrix公司的NetScaler系列、A10公司的AX系列

(2).软件LB

四层:LVS(Linux VirtualServer)注:国人开发的、七层:Nginx,HAProxy

二、集群的类型

1.scale on:向上扩展

将服务器的内存容量调大和cpu数量增加些(简单说升级服务器硬件)

缺点:在一定的范围之内它的性能是上升的趋势,但是超出范围之后就是下降的趋势。因为随着它的cpu的个数增加我们需要给我们的cpu仲裁,而且随着cpu个数的增加资源竞争性越大。

2.scale out:向外扩展

一台服务器应付不过来,我们就再增加一台服务器。

优点:增减服务器很方便,而且没有向上扩展随着增加性能下降。

向外扩张的工作模式:当客户端向服务器端发送请求,服务器端只拿出来一台服务器来相应我们的客户端的请求。

(1).LB:Load Balancing:负载均衡集群

负载均衡集群中有一个分发器或者叫调度器,我们将其称之为Director,它处在多台服务器的上面,分发器根据内部锁定义的规则或调度方式从下面的服务器群中选择一个以此来响应客户端发送的请求。

(2).HA:High Availability高可用集群

高可用集群是服务的可用性比较高,当我们某台服务器死机后不会造成我们的服务不可用。其工作模式则是将一个具有故障的服务转交给一个正常工作的服务器,从而达到服务不会中断。一般来说我们集群中工作在前端(分发器)的服务器都会对我们的后端服务器做一个健康检查,如果发现我们服务器当机就不会对其在做转发。

衡量标准:可用性=在线时间/(在线时间+故障处理时间) 99%、99.9%、99.99%、99.999%

(3).HP:Hight Performance高性能

高性能的集群是当某一个任务量非常大的时候,我们做一个集群共同来完成这一个任务。这种处理方式我们称为并行处理集群,并行处理集群是将大任务划分为小任务,分别进行处理的机制。一般这样的集群用来科学研究与大数据运算等方面的工作。现在比较火的Hadoop就是使用的并行处理集群。

说明:三种集群之间的区别

负载均衡着重在于提供服务并发处理能力的集群,高可用以提升服务在线的能力的集群。高性能着重用于处理一个海量任务。

三、主要负载均衡方案介绍

1:HTTP重定向负载均衡

这种负载均衡方式仅适合WEB服务器。用户发出请求时,负载均衡服务器会根据HTTP请求,重新计算出实际的WEB服务器地址,通过302重定向相应发送给用户浏览器。用户浏览器再根据302响应信息,对实际的WEB服务器发出请求。HTTP重定向方案有点是比较简单,缺点是性能比较差,需要2次请求才能返回实际结果,还有就是仅适合HTTP服务器使用。

2: DNS域名解析负载均衡

在DNS中存储了一个域名的多个主机地址,每次域名解析请求,都可以根据负载均衡算法返回一个不同的IP地址。这样多个WEB服务器就构成了一个集群,并由DNS服务器提供了负载均衡服务。DNS域名解析负载均衡的优点是由DNS来完成负载均衡工作,服务本身不用维护负载均衡服务器的工作。缺点也是,由于负载均衡服务器不是自己维护,没法做精细控制,而且DNS在客户端往往带有缓存,服务器的变更很难及时反映到客户端上。

3:反向代理负载均衡

反向代理服务器位于实际的服务器之前,他能够缓存服务器响应,加速访问,同时也启到了负载均衡服务器的效果。反向代理服务器解析客户端请求,根据负载均衡算法转发到不同的后台服务器上。用户和后台服务器之间不再有直接的链接。请求,响应都由反向代理服务器进行转发。优点是和负载均衡服务集成在一起,部署简单。缺点是所有的请求回应都需要经过反向代理服务器。其本身可能会成为性能的瓶颈。著名的Nginx服务器就可以部署为反向代理服务器,实现WEB应用的负载均衡。上面的三种都是工作在OSI网络模型中的应用层,我们可以统称为应用层负载均衡(七层负载均衡)。下面介绍的几种工作在OSI网络模型中的4层以及4层以下(四层负载均衡),解决方案也具有更大的通用性。

4:IP负载均衡

用户请求包到达负载均衡服务器114.100.20.200后,负载均衡服务器在操作系统内核层获取网络数据包,根据负载均衡算法获取真实后台服务器地址192.168.1.1,然后将数据包的目标地址改为192.168.1.1,转发给内部服务器。整个过程都在内核层进行处理。收到192.168.1.1的响应包之后,会更改响应包的SRC IP,转发给客户端用户。采用IP层负载均衡算法,全部处理过程都在内核层(Ring 0)进行。和七层负载均衡相比,具有更好的性能。但是由于所有的响应包都要经过负载均衡服务器,负载均衡服务器的网卡带宽,很容易成为系统的瓶颈,如果能够让响应包不经过负载均衡服务器,就可以极大的提升整个负载均衡服务器的服务能力。我们下面介绍的数据链路层负载均衡,就具有这个能力。

5:数据链路层负载均衡

数据链路层负载均衡,顾名思义,就是工作在TCP/IP协议最底层的数据链路层,进行负载均衡。我们常用的以太网中,在这一层主要采用数据帧进行通信,每个网卡都具有唯一的MAC地址,数据帧用MAC地址来标识数据的来源与目的地。数据链路层负载均衡通过修改数据包的MAC地址,实现负载均衡。

这种数据传输方式又称为三角传输,负载均衡数据分发过程中不修改IP地址,只修改目的MAC地址,通过配置真实物理服务器集群所有机器虚拟IP和负载均衡服务器IP一致,从而达到不修改数据包的源地址和目的地址就可以进行数据分发的目的,由于实际处理请求的真实物理服务器IP和数据请求目的IP一致,不需要通过负载均衡服务器进行地址交换,可将响应数据包直接返回给用户,避免负载均衡服务器网卡带宽成为瓶颈。这种负载均衡方式又称之为直接路由方式(DR).

如上图所示,用户请求到达负载均衡服务器114.100.20.200后,负载均衡服务器将数据包的目的MAC地址更改为00:1e:ec:bc:5e:03,并不修改数据包目的IP,由于服务器集群所有服务器的虚拟IP地址和负载均衡服务器IP地址一致,因此数据可以正常传输到达MAC地址为00:1e:ec:bc:5e:03的机器上,该服务器处理完之后,将响应数据包发送到网关服务器,网关服务器直接将数据包发送给用户,响应数据不需要通过负载均衡服务器,这样就避免了负载均衡服务器成为传输瓶颈的可能。

数据链路层负载均衡是目前使用最广泛的一种负载均衡方式。著名的负载均衡开源产品LVS(Linux Virtual Server),同时支持上面的IP负载均衡和数据链路层负载均衡。是学习负载均衡技术必须了解的产品。基于数据链路层的负载均衡虽然有非常好的性能,但是对网络拓扑也有比较大的限制,负载均衡服务器和后台服务器必须处于同一网络环境中才可以。

四、负载均衡算法介绍

前面介绍的内容,解决了从用户到实际后台服务器之间的数据包发送和响应的问题。下面我们介绍选择实际后台运行服务器的具体负载均衡算法。考虑到服务请求的不同类型服务器的不同处理能力以及随机选择造成的负载分配不均匀等问题,为了更加合理的把负载分配给内部的多个服务器,就需要应用相应的能够正确反映各个服务器处理能力及网络状态的负载均衡算法。我们以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)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容

  • 【摘要】 面对大量用户访问、高并发请求,海量数据,可以使用高性能的服务器、大型数据库,存储设备,高性能Web服务器...
    静修佛缘阅读 4,457评论 0 24
  • 《老男孩Linux运维》Nginx Documentation 集群简介 集群就是指一组(若干)相互独立的计算机,...
    Zhang21阅读 3,310评论 0 51
  • 一、什么是负载均衡? 互联网早期,业务流量比较小并且业务逻辑比较简单,单台服务器便可以满足基本的需求;但随着互联网...
    彬彬酱阅读 2,159评论 0 19
  • 摘要:面对大量用户访问、高并发请求,海量数据,可以使用高性能的服务器、大型数据库,存储设备,高性能Web服务器,采...
    layjoy阅读 13,651评论 3 93
  • 只要世界上还存在一部分, 不得不服从另一部分的现象, 付出与回报就无从谈起, 大到单位, 小到个人, 做任何事都要...
    王广丽阅读 549评论 0 2