linux负载均衡总结性说明(四层负载/七层负载)

转载:http://www.cnblogs.com/kevingrace/p/6137881.htmlhtml

一,什么是负载均衡
1)负载均衡(Load Balance)创建在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增长吞吐量、增强网络数据处理能力、提升网络的灵活性和可用性。负载均衡有两方面的含义:首先,大量的并发访问或数据流量分担到多台节点设备上分别处理,减小用户等待响应的时间;其次,单个重负载的运算分担到多台节点设备上作并行处理,每一个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力获得大幅度提升。
2)简单来讲就是:其一是将大量的并发处理转发给后端多个节点处理,减小工做响应时间;其二是将单个繁重的工做转发给后端多个节点处理,处理完再返回给负载均衡中心,再返回给用户。目前负载均衡技术大多数是用于提升诸如在Web服务器、FTP服务器和其它关键任务服务器上的Internet服务器程序的可用性和可伸缩性。前端

二,负载均衡分类
1)二层负载均衡(mac)
根据OSI模型分的二层负载,通常是用虚拟mac地址方式,外部对虚拟MAC地址请求,负载均衡接收后分配后端实际的MAC地址响应)
2)三层负载均衡(ip)
通常采用虚拟IP地址方式,外部对虚拟的ip地址请求,负载均衡接收后分配后端实际的IP地址响应)
3)四层负载均衡(tcp)
在三次负载均衡的基础上,用ip+port接收请求,再转发到对应的机器。
4)七层负载均衡(http)
根据虚拟的url或IP,主机名接收请求,再转向相应的处理服务器)。nginx

咱们运维中最多见的四层和七层负载均衡,这里重点说下这两种负载均衡。
1)四层的负载均衡就是基于IP+端口的负载均衡:在三层负载均衡的基础上,经过发布三层的IP地址(VIP),而后加四层的端口号,来决定哪些流量须要作负载均衡,对须要处理的流量进行NAT处理,转发至后台服务器,并记录下这个TCP或者UDP的流量是由哪台服务器处理的,后续这个链接的全部流量都一样转发到同一台服务器处理。
对应的负载均衡器称为四层交换机(L4 switch),主要分析IP层及TCP/UDP层,实现四层负载均衡。此种负载均衡器不理解应用协议(如HTTP/FTP/MySQL等等)。
实现四层负载均衡的软件有:
F5:硬件负载均衡器,功能很好,可是成本很高。
lvs:重量级的四层负载软件
nginx:轻量级的四层负载软件,带缓存功能,正则表达式较灵活
haproxy:模拟四层转发,较灵活
2)七层的负载均衡就是基于虚拟的URL或主机IP的负载均衡:在四层负载均衡的基础上(没有四层是绝对不可能有七层的),再考虑应用层的特征,好比同一个Web服务器的负载均衡,除了根据VIP加80端口辨别是否须要处理的流量,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。举个例子,若是你的Web服务器分红两组,一组是中文语言的,一组是英文语言的,那么七层负载均衡就能够当用户来访问你的域名时,自动辨别用户语言,而后选择对应的语言服务器组进行负载均衡处理。
对应的负载均衡器称为七层交换机(L7 switch),除了支持四层负载均衡之外,还有分析应用层的信息,如HTTP协议URI或Cookie信息,实现七层负载均衡。此种负载均衡器能理解应用协议。
实现七层负载均衡的软件有:
haproxy:天生负载均衡技能,全面支持七层代理,会话保持,标记,路径转移;
nginx:只在http协议和mail协议上功能比较好,性能与haproxy差很少;
apache:功能较差
Mysql proxy:功能尚可。web

总的来讲,通常是lvs作4层负载;nginx作7层负载;haproxy比较灵活,4层和7层负载均衡都能作正则表达式

3、二者之间的区别
1)从技术原理上分析
      所谓四层负载均衡,也就是主要经过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
      以常见的TCP为例,负载均衡设备在接收到第一个来自客户端的SYN 请求时,即经过上述方式选择一个最佳的服务器,并对报文中目标IP地址进行修改(改成后端服务器IP),直接转发给该服务器。TCP的链接创建,即三次握手是客户端和服务器直接创建的,负载均衡设备只是起到一个相似路由器的转发动做。在某些部署状况下,为保证服务器回包能够正确返回给负载均衡设备,在转发报文的同时可能还会对报文原来的源地址进行修改。算法

      所谓七层负载均衡,也称为“内容交换”,也就是主要经过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
      以常见的TCP为例,负载均衡设备若是要根据真正的应用层内容再选择服务器,只能先代理最终的服务器和客户端创建链接(三次握手)后,才可能接受到客户端发送的真正应用层内容的报文,而后再根据该报文中的特定字段,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。负载均衡设备在这种状况下,更相似于一个代理服务器。负载均衡和前端的客户端以及后端的服务器会分别创建TCP链接。因此从这个技术原理上来看,七层负载均衡明显的对负载均衡设备的要求更高,处理七层的能力也必然会低于四层模式的部署方式。sql

2)从应用场景的需求上分析
     七层应用负载的好处,是使得整个网络更"智能化"。能够参考这篇:http应用优化和加速说明-负载均衡,就能够基本上了解这种方式的优点所在。例如访问一个网站的用户流量,能够经过七层的方式,将对图片类的请求转发到特定的图片服务器并可使用缓存技术;将对文字类的请求能够转发到特定的文字服务器并可使用压缩技术。固然这只是七层应用的一个小案例,从技术原理上,这种方式能够对客户端的请求和服务器的响应进行任意意义上的修改,极大的提高了应用系统在网络层的灵活性。不少在后台,例如Nginx或者Apache上部署的功能能够前移到负载均衡设备上,例如客户请求中的Header重写,服务器响应中的关键字过滤或者内容插入等功能。
     另一个经常被提到功能就是安全性。网络中最多见的SYN Flood攻击,即黑客控制众多源客户端,使用虚假IP地址对同一目标发送SYN攻击,一般这种攻击会大量发送SYN报文,耗尽服务器上的相关资源,以达到Denial of Service(DoS)的目的。从技术原理上也能够看出,四层模式下这些SYN攻击都会被转发到后端的服务器上;而七层模式下这些SYN攻击天然在负载均衡设备上就截止,不会影响后台服务器的正常运营。另外负载均衡设备能够在七层层面设定多种策略,过滤特定报文,例如SQL Injection等应用层面的特定攻击手段,从应用层面进一步提升系统总体安全。
     如今的7层负载均衡,主要仍是着重于应用HTTP协议,因此其应用范围主要是众多的网站或者内部信息平台等基于B/S开发的系统。 4层负载均衡则对应其余TCP应用,例如基于C/S开发的ERP等系统。数据库

3)七层应用须要考虑的问题
1.是否真的必要。七层应用的确能够提升流量智能化,同时必不可免的带来设备配置复杂,负载均衡压力增高以及故障排查上的复杂性等问题。在设计系统时须要考虑四层七层同时应用的混杂状况。
2.是否真的能够提升安全性。例如SYN Flood攻击,七层模式的确将这些流量从服务器屏蔽,但负载均衡设备自己要有强大的抗DDoS能力,不然即便服务器正常而做为中枢调度的负载均衡设备故障也会致使整个应用的崩溃。
3.是否有足够的灵活度。七层应用的优点是可让整个应用的流量智能化,可是负载均衡设备须要提供完善的七层功能,知足客户根据不一样状况的基于应用的调度。最简单的一个考核就是可否取代后台Nginx或者Apache等服务器上的调度功能。可以提供一个七层应用开发接口的负载均衡设备,可让客户根据需求任意设定功能,才真正有可能提供强大的灵活性和智能性。
4)整体对比
1.智能性
七层负载均衡因为具有OIS七层的全部功能,因此在处理用户需求上能更加灵活,从理论上讲,七层模型能对用户的全部跟服务端的请求进行修改。例如对文件header添加信息,根据不一样的文件类型进行分类转发。四层模型仅支持基于网络层的需求转发,不能修改用户请求的内容。
2.安全性
七层负载均衡因为具备OSI模型的所有功能,能更容易抵御来自网络的攻击;四层模型从原理上讲,会直接将用户的请求转发给后端节点,没法直接抵御网络攻击。
3.复杂度
四层模型通常比较简单的架构,容易管理,容易定位问题;七层模型架构比较复杂,一般也须要考虑结合四层模型的混用状况,出现问题定位比较复杂。
4.效率比
四层模型基于更底层的设置,一般效率更高,但应用范围有限;七层模型须要更多的资源损耗,在理论上讲比四层模型有更强的功能,如今的实现更可能是基于http应用。apache

4、负载均衡技术方案说明
目前有许多不一样的负载均衡技术用以知足不一样的应用需求,下面从负载均衡所采用的设备对象(软/硬件负载均衡),应用的OSI网络层次(网络层次上的负载均衡),及应用的地理结构(本地/全局负载均衡)等来分类。
1)软/硬件负载均衡
     软件负载均衡解决方案是指在一台或多台服务器相应的操做系统上安装一个或多个附加软件来实现负载均衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl,Keepalive+ipvs等,它的优势是基于特定环境,配置简单,使用灵活,成本低廉,能够知足通常的负载均衡需求。软件解决方案缺点也较多,由于每台服务器上安装额外的软件运行会消耗系统不定量的资源,越是功能强大的模块,消耗得越多,因此当链接请求特别大的时候,软件自己会成为服务器工做成败的一个关键;软件可扩展性并非很好,受到操做系统的限制;因为操做系统自己的Bug,每每会引发安全问题。
     硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备一般是一个独立于系统的硬件,咱们称之为负载均衡器。因为专门的设备完成专门的任务,独立于操做系统,总体性能获得大量提升,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。负载均衡器有多种多样的形式,除了做为独立意义上的负载均衡器外,有些负载均衡器集成在交换设备中,置于服务器与Internet连接之间,有些则以两块网络适配器将这一功能集成到PC中,一块链接到Internet上,一块链接到后端服务器群的内部网络上。
     软件负载均衡与硬件负载均衡的对比:
     软件负载均衡的优势是需求环境明确,配置简单,操做灵活,成本低廉,效率不高,能知足普通的企业需求;缺点是依赖于系统,增长资源开销;软件的优劣决定环境的性能;系统的安全,软件的稳定性均会影响到整个环境的安全。
     硬件负载均衡优势是独立于系统,总体性能大量提高,在功能、性能上优于软件方式;智能的流量管理,多种策略可选,能达到最佳的负载均衡效果;缺点是价格昂贵。
2)本地/全局负载均衡
     负载均衡从其应用的地理结构上分为本地负载均衡(Local Load Balance)和全局负载均衡(Global Load Balance,也叫地域负载均衡),本地负载均衡是指对本地的服务器群作负载均衡,全局负载均衡是指对分别放置在不一样的地理位置、有不一样网络结构的服务器群间做负载均衡。
     本地负载均衡能有效地解决数据流量过大、网络负荷太重的问题,而且不需花费昂贵开支购置性能卓越的服务器,充分利用现有设备,避免服务器单点故障形成数据流量的损失。其有灵活多样的均衡策略把数据流量合理地分配给服务器群内的服务器共同负担。即便是再给现有服务器扩充升级,也只是简单地增长一个新的服务器到服务群中,而不需改变现有网络结构、中止现有的服务。 
     全局负载均衡主要用于在一个多区域拥有本身服务器的站点,为了使全球用户只以一个IP地址或域名就能访问到离本身最近的服务器,从而得到最快的访问速度,也可用于子公司分散站点分布广的大公司经过Intranet(企业内部互联网)来达到资源统一合理分配的目的。
3)网络层次上的负载均衡
     针对网络上负载太重的不一样瓶颈所在,从网络的不一样层次入手,咱们能够采用相应的负载均衡技术来解决现有问题。 
随着带宽增长,数据流量不断增大,网络核心部分的数据接口将面临瓶颈问题,原有的单一线路将很难知足需求,并且线路的升级又过于昂贵甚至难以实现,这时就能够考虑采用链路聚合(Trunking)技术。
     链路聚合技术(第二层负载均衡)将多条物理链路看成一条单一的聚合逻辑链路使用,网络数据流量由聚合逻辑链路中全部物理链路共同承担,由此在逻辑上增大了链路的容量,使其能知足带宽增长的需求。
     现代负载均衡技术一般操做于网络的第四层或第七层。第四层负载均衡将一个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、负载均衡策略
在实际应用中,咱们可能不想仅仅是把客户端的服务请求平均地分配给内部服务器,而无论服务器是否宕机。而是想使Pentium III服务器比Pentium II能接受更多的服务请求,一台处理服务请求较少的服务器能分配到更多的服务请求,出现故障的服务器将再也不接受服务请求直至故障恢复等等。选择合适的负载均衡策略,使多个设备能很好的共同完成任务,消除或避免现有网络负载分布不均、数据流量拥挤反应时间长的瓶颈。在各负载均衡方式中,针对不一样的应用需求,在OSI参考模型的第2、3、4、七层的负载均衡都有相应的负载均衡策略。
负载均衡策略的优劣及其实现的难易程度有两个关键因素:负载均衡算法;对网络系统情况的检测方式和能力。
一、负载均衡算法
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地址响应。在种均衡策略适合应用在全局负载均衡的状况下,对本地负载均衡是没有意义的。
二、网络系统情况的检测方式
尽管有多种的负载均衡算法能够较好的把数据流量分配给服务器去负载,但若是负载均衡策略没有对网络系统情况的检测方式和能力,一旦在某台服务器或某段负载均衡设备与服务器网络间出现故障的状况下,负载均衡设备依然把一部分数据流量引向那台服务器,这势必形成大量的服务请求被丢失,达不到不间断可用性的要求。因此良好的负载均衡策略应有对网络故障、服务器系统故障、应用服务故障的检测方式和能力:
1)Ping侦测:经过ping的方式检测服务器及网络系统情况,此种方式简单快速,但只能大体检测出网络及服务器上的操做系统是否正常,对服务器上的应用服务检测就无能为力了。
2)TCP Open侦测:每一个服务都会开放某个经过TCP链接,检测服务器上某个TCP端口(如Telnet的23口,HTTP的80口等)是否开放来判断服务是否正常。
3)HTTP URL侦测:好比向HTTP服务器发出一个对main.html文件的访问请求,若是收到错误信息,则认为服务器出现故障。
三、其余因素
负载均衡策略的优劣除受上面所讲的两个因素影响外,在有些应用状况下,咱们须要未来自同一客户端的全部请求都分配给同一台服务器去负担,例如服务器将客户端注册、购物等服务请求信息保存的本地数据库的状况下,把客户端的子请求分配给同一台服务器来处理就显的相当重要了。有几种方式能够解决此问题:
1)一是根据IP地址把来自同一客户端的屡次请求分配给同一台服务器处理,客户端IP地址与服务器的对应信息是保存在负载均衡设备上的;
2)二是在客户端浏览器 cookie内作独一无二的标识来把屡次请求分配给同一台服务器处理,适合经过代理服务器上网的客户端。
3)还有一种路径外返回模式(Out of Path Return),当客户端链接请求发送给负载均衡设备的时候,中心负载均衡设备将请求引向某个服务器,服务器的回应请求再也不返回给中心负载均衡设备,即绕过流量分配器,直接返回给客户端,所以中心负载均衡设备只负责接受并转发请求,其网络负担就减小了不少,而且给客户端提供了更快的响应时间。此种模式通常用于HTTP服务器群,在各服务器上要安装一块虚拟网络适配器,并将其IP地址设为服务器群的VIP,这样才能在服务器直接回应客户端请求时顺利的达成三次握手。

6、负载均衡实施要素1)性能性能是咱们在引入均衡方案时须要重点考虑的问题,但也是一个最难把握的问题。衡量性能时可将每秒钟经过网络的数据包数目作为一个参数,另外一个参数是均衡方案中服务器群所能处理的最大并发链接数目,可是,假设一个均衡系统能处理百万计的并发链接数,但是却只能以每秒2个包的速率转发,这显然是没有任何做用的。性能的优劣与负载均衡设备的处理能力、采用的均衡策略息息相关,而且有两点须要注意:1、均衡方案对服务器群总体的性能,这是响应客户端链接请求速度的关键;2、负载均衡设备自身的性能,避免有大量链接请求时自身性能不足而成为服务瓶颈。有时咱们也能够考虑采用混合型负载均衡策略来提高服务器群的整体性能,如DNS负载均衡与NAT负载均衡相结合。另外,针对有大量静态文档请求的站点,也能够考虑采用高速缓存技术,相对来讲更节省费用,更能提升响应性能;对有大量ssl/xml内容传输的站点,更应考虑采用ssl/xml加速技术。2)可扩展性IT技术突飞猛进,一年之前最新的产品,如今或许已经是网络中性能最低的产品;业务量的急速上升,一年前的网络,如今须要新一轮的扩展。合适的均衡解决方案应能知足这些需求,能均衡不一样操做系统和硬件平台之间的负载,能均衡HTTP、邮件、新闻、代理、数据库、防火墙和 Cache等不一样服务器的负载,而且能以对客户端彻底透明的方式动态增长或删除某些资源。3)灵活性均衡解决方案应能灵活地提供不一样的应用需求,知足应用需求的不断变化。在不一样的服务器群有不一样的应用需求时,应有多样的均衡策略提供更普遍的选择。4)可靠性在对服务质量要求较高的站点,负载均衡解决方案应能为服务器群提供彻底的容错性和高可用性。但在负载均衡设备自身出现故障时,应该有良好的冗余解决方案,提升可靠性。使用冗余时,处于同一个冗余单元的多个负载均衡设备必须具备有效的方式以便互相进行监控,保护系统尽量地避免遭受到重大故障的损失。5)易管理性管是经过软件仍是硬件方式的均衡解决方案,咱们都但愿它有灵活、直观和安全的管理方式,这样便于安装、配置、维护和监控,提升工做效率,避免差错。在硬件负载均衡设备上,目前主要有三种管理方式可供选择:1、命令行接口(CLI:Command Line Interface),可经过超级终端链接负载均衡设备串行接口来管理,也能telnet远程登陆管理,在初始化配置时,每每要用到前者;2、图形用户接口(GUI:Graphical User Interfaces),有基于普通web页的管理,也有经过Java Applet 进行安全管理,通常都须要管理端安装有某个版本的浏览器;3、SNMP(Simple Network Management Protocol,简单网络管理协议)支持,经过第三方网络管理软件对符合SNMP标准的设备进行管理。