1. 负载均衡的概念
负载均衡建立在现有网络结构上,它提供一种廉价有效透明的方法扩展网络设备和服务器的带宽,增加吞吐量,加强网络数据处理能力,提高网络的灵活性和可用性。
负载均衡有两方面的含义:
首先,大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间;
其次,单个重负载的运算分担到多台节点服务器上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高。
简单来说就是:其一是将大量的并发处理转发给后端多个几点处理,减少工作响应时间;其二是将单个繁重的工作转发给后端多个节点处理,处理完再返回给负载均衡,再返回给用户。目前负载均衡技术大多数是用于提高诸如在web服务器,ftp服务器和其他关键人物服务器上的internet服务器程序的可用性和可伸缩性。
2. 根据OSI模型可将负载均衡分为:
二层负载均衡:一般是用虚拟MAC地址方式,外部对虚拟MAC地址请求,负载均衡接收后分配后端实际的MAC地址响应。实现方式PPP捆绑和链路聚合技术
三层负载均衡:一般采用虚拟IP地址方式,外部对虚拟IP地址请求,负载均衡接收后分配后端实际IP地址响应,如VRRP,HSRP,OSPF负载均衡
四层负载均衡:在三层负载均衡的基础上,用IP+PORT接收请求,再转发到对应的机器。如LVS,nginx等
七层负载均衡:根据虚拟的url或IP,主机名接收请求,再转向相应的处理服务器。如F5
2.1.四层负载均衡
基于IP+端口的负载均衡:在三层负载均衡的基础上,通过发布三层的IP地址(VIP),然后加四层的端口号,来决定哪些流量需要做负载均衡,对需要处理的流量进行NAT处理,转发至后台服务器,并记录下这个TCP或者UDP的流量是由哪台后端服务器处理的,后续这个连续的所有流量都同样转发到同一台服务器处理。
对应的负载均衡器称之为四层交换机,主要分析IP层及TCP/UDP层,实现四层负载均衡。这种负载均衡器不理解应用协议,常见的有LVS,F5。
2.2.七层负载均衡:
基于虚拟的URL或者主机IP的负载均衡:在四层负载均衡的基础上,再考虑应用层的特征,比如同一个web服务器的负载均衡,除了根据VIP加80端口辨别是否需要处理的流量,还可以根据七层的URL,浏览器类别,语言等来决定是否要进行负载均衡。
对应的负载均衡器称为七层交换机,除了支持四层负载均衡以外,还分析应用层的信息,如HTTP协议URL或cookie信息,实现七层负载均衡,此种负载均衡器能理解应用协议,常见的例子有haproxy,mysql proxy等。
3. 四层和七层负载均衡的区别
3.1.技术原理的区别
四层负载均衡,主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
以常见的TCP为例,负载均衡设备在接收到第一个来自客户端的SYN请求时,即通过上述方式选择一个最佳的服务器,并对报文中目标IP地址进行修改(改为后端服务器ip),直接转发给该服务器。TCP的连接建立,即三次握手是客户端和服务器直接建立的,负载均衡设备只是起到一个类似路由器的转发动作。在某些部署情况下,为保证服务器回包可以正确返回给负载均衡设备,在转发报文的同时可能还会对报文燕来的源地址进行修改。
七层负载均衡,也称之为“内容交换”,也就是主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
以常见的TCP为例,负载均衡设备如果要根据真正的应用层内容再选择服务器,只能先代理最终的服务器和客户端建立连接(三次握手)后,才可能接收到客户端发送的真正应用层内容的报文,然后再根据该报文中的特定字段,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。负载均衡设备在这种情况下,更类似于一个代理服务器。负载均衡和前端的客户端以及后端的服务器会分别建立TCP连接。所以从这个技术原理上来看,七层负载均衡明显的对负载均衡设备的要求更高,处理七层的能力也必然会低于四层模式的部署方式。
3.2.应用场景的需求
七层应用负载的好处,是使得整个网络更“智能化”。例如:访问一个网站的用户流量,可以通过七层的方式,将对图片类的请求转发到特定的图片服务器并可以使用缓存技术;将对文字类的请求可以转发到特定文字服务器并可以使用压缩技术。从技术原理上,这种方式可以对客户端的请求和服务器的响应进行任意意义上的修改,极大的提升了应用系统在网络层的灵活性。
另外一个常常提到的功能就是安全性。网络中常见的syn flood攻击,即黑客控制众多源客户端,使用虚假IP地址对同一目标发送SYN攻击,通常这种攻击会大量发送SYN报文,耗尽服务器上的相关资源,以达到DOS的目的。从技术原理上看,四层模式下这些SYN攻击都会被转发到后端的服务器上;而七层模式下这些SYN攻击自然在负载均衡设备上就截止,不会影响后台服务器的正常运行。另外负载均衡设备可以在七层层面设定多种策略,过滤特定报文,例如SQL injection等应用层面的特定攻击手段,从应用层面进一步提高系统整体安全。
现在的7层负载均衡,主要还是着重于应用HTTP协议,所以其应用范围主要是众多的网站或者内部信息平台等基于B/S开发的系统。4层负载均衡则对应其他TCP应用,例如基于C/S开发的ERP等系统。
3.3.七层应用需要考虑的问题
1)是否真的必要。
七层应用的确可以提高流量智能化,同时必不可免的带来设备配置复杂,负载均衡压力增高以及故障排查上的复杂性等问题,在设计系统时需要考虑四层七层同时应用的混杂情况。
2)是否真的可以提高安全性。
例如SYN flood攻击,七层模式的确将这些流量从服务器屏蔽,但负载均衡设备本身要有强大的抗DDOS能力,否则即使后端服务器正常而作为中枢调度的负载均衡设备故障也会导致整个应用的崩溃。
3)是否有足够的灵活度。
七层应用的优势是可以让这个应用的流量智能化,但是负载均衡设备需要提供完善的七层功能,满足客户根据不同情况的基于应用的调度。最简单的一个考核就是能否取代后台nginx或者apache等服务器上的调度功能。能够提供一个七层应用开发接口的负载均衡设备,可以让客户根据需求任意设定功能,才真正有可能提供强大的灵活性和智能型。
3.4.总体对比
1)智能性
七层负载均衡由于具备OSI七层的所有功能,所以在处理用户需求上能更加灵活,从理论上讲,七层模型能对用户的所有跟服务器端的请求进行修改。例如对文件header添加信息,根据不同的文件类型进行分类转发。四层模型仅支持基于网络层的需求转发,不能修改用户请求的内容。
2)安全性
七层负载均衡能更容易抵御来自网络的攻击;而四层模型从原理上讲,会直接将用户的请求转发给后端节点,无法直接抵御网络攻击。
3)复杂度
四层模型一般比较简单的架构,容易管理,容易定位问题;七层模型架构比较复杂,通常也需要考虑结合四层模型的混用情况,出现问题定位比较复杂。
4)效率性
四层模型基于更底层的设置,通常效率更高,但应用范围有限;七层模型需要更多的资源损耗,在理论上讲比四层模型有更强的功能,现在的实现更多是基于http应用。
4. 负载均衡技术方案
目前有许多不同的负载均衡技术用以满足不同的应用需求,下面从负载均衡所采用的设备对象(软/硬件负载均衡),应用的OSI网络层次(网络层次上的负载均衡),及应用的地址结构(本地/全局负载均衡)等来分类。
1.软/硬件负载均衡
软件负载均衡解决方案是指在一台或多台服务器相应的操作系统上安装一个或多个附加软件来实现负载均衡,如DNS load balance,keepalived等,它的优点是基于特定环境,配置简单,使用灵活,成本低廉,可以满足一般的负载均衡需求。软件解决方案缺点也较多,因为每台服务器上安装额外的软件运行会消耗不定量的资源,越是功能强大的模块,消耗的越多,所以当连接请求特别大的时候,软件本身会成为服务器工作成败的一个关键;软件可扩展性并不是很好,收到操作系统的限制;由于系统本身的BUG,往往会引起安全问题。
硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备通常是一个独立于系统的硬件,我们称之为负载均衡器。由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。负载均衡器有多种多样的形式,除了作为独立意义上的负载均衡器上,有些负载均衡器集成在交换设备中,置于服务器与internet链接之间,有些则以两块网络适配器将这一功能集成到PC中,一块连接internet上,一块连接到后端服务器群的内部网络上。
软件负载均衡和硬件负载均衡的对比:
软件负载均衡的优点是需求环境明确,配置简单,操作灵活,成本低廉,效率不高,能满足普通的企业需求;缺点是依赖于系统,增加资源开销;软件的优劣决定环境的性能;系统的安全,软件的稳定性均会影响到整个环境的安全。
硬件负载均衡优点是独立于系统,整体性能大量提升,在功能,性能上 优于软件方式;只能的流量管理,多种策略可选,能达到最佳的负载均衡效果;缺点是价格昂贵。
2.本地/全局负载均衡
负载均衡从其应用的地理结构上分为本地负载均衡(local load balance)和全局负载均衡(global load balance,也叫地域负载均衡),本地负载均衡是指对本地的服务器群做负载均衡,全局负载均衡是指对分别放置在不同的地理位置,有不同网络结构的服务器群间做负载均衡。
本地负载均衡能有效地解决数据流量过大,网络负荷过重的问题,并且不需要话费昂贵开支购置性能卓越的服务器,充分利用现有设备,避免服务器单点故障造成数据流量的损失。其有灵活多样的均衡策略把数据流量合理地分配给服务器群内的服务器共同负担。即使是再给现有服务器扩充升级,也只是简单的增加一个新的服务器到服务器群中,而不需要改变现有网络结构,停止现有服务。
全局负载均衡主要用于在一个多区域拥有自己服务器的站点,为了使全球用户只以一个IP地址或域名就能访问到离自己很近的服务器,从而获得最快的访问速度,如CDN;也可用于子公司分散站点分布广的大公司通过internet来达到资源统一合理分配的目的。
3.网络层次上的负载均衡
针对网络上负载过重的不同瓶颈所在,从网络的不同层次入手,我们可以采用相应的负载均衡技术来解决现有问题。
随着带宽增加,数据流量不断增大,网络核心部分的数据接口面临瓶颈问题,原有的单一线路将很难满足需求,而且线路的升级又过于昂贵甚至难以实现,这时就可以考虑采用链路聚合技术。
链路聚合技术(第二层负载均衡)将多条物理链路当做一条单一的聚合逻辑链路使用,网络数据流量由聚合逻辑链路中所有物理链路共同承担,由此在逻辑上增大了链路的容量,使其能满足带宽增加的需求。
现代负载均衡技术通常操作与网络的第四层和第七层。第四层负载均衡将一个internet上合法注册的IP地址映射为多个内部服务器的IP地址,对每次TCP连接请求动态使用其中一个内部IP地址,达到负载均衡的目的。在第四层交换机中,此种均衡技术得到广泛的应用,一个目的地址是服务器群VIP(虚拟IP,virtual ip address)连接请求的数据包流经交换机,交换机根据源端和目的IP地址,TCP或UDP端口号和一定的负载均衡策略,在服务器IP和VIP间进行映射,选取服务器群中最好的服务器来处理连接请求。
第七层负载均衡控制应用层服务的内容,提供了一种对访问流量的高层控制方式,适合对HTTP服务器群的应用。第七层负载均衡技术通过检查流经的HTTP报头,根据报头内的信息来执行负载均衡任务。
第七层负载均衡优点表现如下几个方面:
1)通过对HTTP报头的检查,可以检测出http400,500和600系列的错误信息,因而能透明的将连接请求重新定向到另一台服务器,避免应用层故障。
2)可根据流经的数据类型(如判断数据包是图像文件,压缩文件或多媒体文件格式等),把数据流量引向相应内容的服务器来处理,增加系统性能。
3)能根据连接请求的类型,如普通文件,图像等静态文档请求,还是asp,cgi等的动态文档请求,把相应的请求引向相应的服务器来处理,提高系统的性能及安全性。
第七层负载均衡缺点表现如下几个方面:
1)第七层负载均衡受到其所支持的协议限制(一般只有HTTP),这样就限制了它应用的广泛性。
2)第七层负载均衡检查HTTP报头会占用大量的系统资源,势必会影响到系统的性能,在大量连接请求的情况下,负载均衡设备资深容易成为网络整体性能的瓶颈。
5。负载均衡策略
1.轮询 round robin
每一次来自网络的请求轮流分配给内部的服务器,从1至N然后重新开始。此种均衡算法适合于服务器组中的所有服务器都有相同的软硬件配置并且平均服务请求相对均衡的情况。
2.权重轮询 weighted round robin
根据服务器不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权指数的服务器请求。例如:服务器A的权值被设计成1,B的权值为3,C的权值为6,则服务器A,B,C将分别接受到10%,30%,60%的服务请求。此种均衡算法能确保高性能的服务器得到更多的使用率,避免低性能的服务器负载过重
3.随机均衡 random
把来自网路的请求随机分配给内部中的多个服务器。
4.权重随机均衡 weighted random
此种均衡算法类似于权重轮询算法,不过在处理请求分担时是个随机选择的过程。
5.响应速度均衡 response time
负载均衡设备对内部各服务器发出一个探测请求(例如ping),然后根据内部中各服务器对探测请求的最快响应时间来决定那一台服务器来响应客户端的服务请求。此种均衡算法能较好的反映服务器的当前运行状态,但这最快响应时间仅仅指的是负载均衡设备与服务器间的最快响应时间,而不是客户端与服务器间的最快响应时间。
6.最少连接数均衡 least connection
客户端的每一次请求服务在服务器停留的时间可能会有较大的差异,随着工作时间加长,如果采用简单的轮询或随机均衡算法,每一台服务器上的连接过程可能会产生极大的不同,并没有达到真正的负载均衡。最少连接数均衡算法对内部中需负载的每一台服务器都有一个数据记录,记录当前该服务器正在处理的连接数量,当有新的服务连接请求时,将把当前请求分配给连接数最少的服务器,使均衡更加符合实际情况,负载更加均衡。此种均衡算法适合长时处理的请求服务,如FTP。
7.处理能力均衡
此种均衡算法将把服务请求分配给内部中处理符合(根据服务器CPU型号,CPU数量,内存大小及当前连接数等换算而成)最轻的服务器,由于考虑到了内部服务器的处理能力及当前网络运行状况,所以此种均衡算法相对来说更加精确,尤其适合运用到第七层负载均衡情况下。
8.DNS响应均衡 flash DNS
在internet上,无论是http,FTP或是其他的服务请求,客户端一般都是通过域名解析来找到服务器确切的IP地址的。在此均衡算法下,分处在不同地理位置的负载均衡设备收到同一个客户端的域名解析请求,并在同一时间内把此域名解析成各自相对应服务器的IP地址(即与此负载均衡设备在同一地理位置的服务器的IP地址)并返回给客户端,则客户端将以最先收到的域名解析IP地址来继续请求服务,而忽略其他的IP地址响应。此种均衡策略适合应用在全局负载均衡的情况下,对本地负载均衡是没有意义的。