HUAWEI USG6000V系列NFV防火墙技术白皮书之---服务器负载均衡技术白皮书华为技术有限公司Huawei Technologies Co., Ltd.目录1背景和概述 (2)2全局服务器负载均衡(GSLB) (3)3本地服务器负载均衡(LSLB) (4)3.1使用目的MAC地址转换的服务器负载均衡(DR) (4)3.2使用网络地址转换实现的服务器负载均衡(L4 SLB) (5)3.3使用轻量代理和网络地址转换的服务器负载均衡(L4 lwProxy SLB) (7)3.4使用全量Socket 代理的服务器负载均衡(L7 Socket Proxy SLB) (9)3.4.1socket代理加业务会话关联保持 (9)3.4.2根据URL类型不同的分担,静态资源访问和动态计算访问分开多种服务器103.4.3SSL卸载 (10)3.4.4链路优化:压缩、协议优化、本地cache、多路复用 (11)3.5业务保持技术 (13)4华为USG防火墙支持的SLB功能列表 (14)1 背景和概述随着互联网的快速发展,用户访问量的快速增长,使得单一的服务器性能已经无法满足大量用户的访问,企业开始通过部署多台服务器来解决性能的问题,由此就产生了服务器负载均衡的相关技术方案。
在实际的服务器负载均衡应用中,由于需要均衡的业务种类以及实际服务器部署场景的不同(比如是否跨地域、跨ISP数据中心等),存在多种负载均衡的技术。
如下典型的组网方式如图所示:服务提供方为了支撑大批量的用户访问,以及跨不同地域、不同接入ISP的用户都能够获得高质量的业务访问体验,其已经在不同地域、不同ISP数据中心搭建了服务器,这样就带来一个需求,也就是客户的访问能够就近、优先选择同一个ISP数据中心的服务器,从而获得高质量的业务访问体验。
同时,基于单台服务器能够提供的业务访问并发是有限的,那么就自然想到使用多台服务器来形成一个“集群”,对外展现出一个业务访问服务器,以满足大量用户访问、而且可以根据业务访问量的上升可以动态的进行业务能力扩容的需要。
归纳一下,我们将前一种定义为全局服务器负载均衡(GSLB: Global Server Load Balance),而把后面一种定义为本地服务器负载均衡(LSLB: Local Server Load balance),在实际使用中,这两种技术既可以结合起来使用,也可以单独只使用某一种技术。
2 全局服务器负载均衡(GSLB)全局服务器负载均衡一般通过干预DNS域名的查询的返回值,来决定客户访问服务器的优选路径。
服务器提供方会申请DNS域名,比如,并将该域名的IP解析委托在服务提供方自己来解析,这里就是GSLB设备来替代的功能。
如图所示:1、在客户接入网侧,客户需要访问诸如时,会向本地DNS服务器发起域名查询2、本地DNS服务器在本地查询是否有的IP记录,因为该域名为委托到GSLB来解析,所以其将发起向GSLB的域名查询3、GSLB收到查询请求后,会根据一定的判据(比如查询的来源方、距离哪个IDC路径更优等),将选定的最优站点的IP地址返回给客户接入侧的域名服务器4、客户接入网侧的域名服务器将该结果返回给客户机侧5、客户方获得域名对应的经过优选过的IP地址,向该IP发起业务访问此种方式的优点是在一个全局的域名委托查询点即可以完成负载均衡,但也有明显的缺点,一旦某个服务器出现故障,1、GSLB并不能及时感知到故障,将其IP地址排除在返回的IP地址列表外,这样就会造成仍旧会有客户不断去访问已经故障的服务器,造成业务中断;2、客户侧以及本地ISP的DNS服务器均存在缓存,在缓存有效期内不会再向GSLB去发起查询,所以即使服务器故障被GSLB及时感知,也无法避免客户端仍旧访问已经故障的服务器。
为了解决上述问题,并且也由于存在单台服务器无法满足高性能并发的需要,引入了多台服务器做“集群”,实现对外一个业务访问的LSLB相关技术。
3 本地服务器负载均衡(LSLB)当部署一个服务器“集群”来提供一个业务访问服务器功能时,最为关键的节点就是业务分发节点,这个就是本地服务器负载均衡设备的功能和核心价值所在。
这里主要的价值点在于:大并发高性能、故障探测和自愈、性能可以动态扩展、其他增值特性(比如本地缓存加速、SSL卸载等);主要的技术点包括:负载均衡算法、业务保持算法、业务可用性探测技术、业务流量分担技术、缓存技术、加密卸载技术等。
3.1 使用目的MAC地址转换的服务器负载均衡(DR)相对于网络地址转换方式的服务器负载均衡方式,DR方式服务器负载均衡中只有客户端的请求报文通过SLB设备,服务器的响应报文不经过SLB设备,从而减少了SLB设备的负载,有效的避免了SLB设备成为网络瓶颈。
DR方式下,SLB设备分发服务请求时,不改变目的IP地址,而将报文的目的MAC替换为真实服务器的MAC后直接把报文转发给真实服务器。
DR方式服务器负载均衡的典型组网如图所示。
负载均衡设备将客户端的业务访问通过修改目的MAC地址的方式将其分担到内部的服务器上,但是服务器的回应请求不再返回给负载均衡设备,而是绕过负载均衡设备,直接返回给客户端,因此负载均衡设备只负责接受并转发请求,其网络负担就减少了很多,并且给客户端提供了更快的响应时间。
这种部署模式,因为只是更改了客户端请求报文的目的MAC地址,因此必然会要求负载均衡设备到内部服务器二层可达,即必须处在同一个VLAN内;同时,虚拟的MAC地址必须能够响应来自客户端侧网络的二层ARP请求等;并且,内部服务器“集群”内成员的IP 地址是同一个,为避免报IP地址冲突,相同的IP地址所在的服务器,必须对ARP采取静默模式,即不响应ARP请求,也不发送ARP请求和免费ARP通告。
3.2 使用网络地址转换实现的服务器负载均衡(L4 SLB)使用网络地址转换方式实现的服务器负载均衡,工作在第四层,其主要概念是将一个虚拟IP地址映射到内部多个服务器的IP地址上,客户的访问均是首先到达虚拟IP地址,然后由负载均衡设备将其访问的目的IP地址替换为内部服务器的实际IP地址,多条业务的访问可以根据一定的分担算法到达不同的内部服务器上,从而达到负载均衡的目的。
如图,服务器“集群”对外提供一个虚拟IP地址供业务访问,SLB设备将业务对虚拟IP 地址的访问根据均衡算法分担到内部的实际服务器上。
此种工作模式下,负载均衡策略的优劣及其实现的难易程度有两个关键因素:一、负载均衡算法,二、服务器业务可用性探测技术。
考虑到服务请求的不同类型、服务器的不同处理能力以及随机选择造成的负载分配不均匀等问题,为了更加合理的把负载分配给内部的多个服务器,就需要应用相应的能够正确反映各个服务器处理能力及网络状态的负载均衡算法,业界常用的负载均衡算法包括:✧轮询均衡(Round Robin)算法:即每一次来自网络的请求轮流分配给内部服务器,从1至N然后重新开始。
此种均衡算法适合于服务器组中的所有服务器都有相同的软硬件配置并且平均服务请求相对均衡的情况。
✧权重轮循均衡(Weighted Round Robin)算法:根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。
例如:服务器A的权值被设计成1,B的权值是3,C的权值是6,则服务器A、B、C将分别接受到10%、30%、60%的服务请求。
此种均衡算法能确保高性能的服务器得到更多的使用率,避免低性能的服务器负载过重。
✧随机均衡(Random)算法:把来自网络的请求随机分配给内部中的多个服务器。
✧权重随机均衡(Weighted Random)算法:此种均衡算法类似于权重轮循算法,不过在处理请求分担时是个随机选择的过程。
✧最小响应速度均衡(Response Time)算法:负载均衡设备对内部各服务器发出一个探测请求(例如Ping),然后根据内部中各服务器对探测请求的最快响应时间来决定哪一台服务器来响应客户端的服务请求。
此种均衡算法能较好的反映服务器的当前运行状态,但这最快响应时间仅仅指的是负载均衡设备与服务器间的最快响应时间,而不是客户端与服务器间的最快响应时间。
✧最少连接数均衡(Least Connection)算法:客户端的每一次请求服务在服务器停留的时间可能会有较大的差异,随着工作时间加长,如果采用简单的轮循或随机均衡算法,每一台服务器上的连接进程可能会产生极大的不同,并没有达到真正的负载均衡。
最少连接数均衡算法对内部中需负载的每一台服务器都有一个存活连接数量的计数,当有新的服务连接请求时,将把当前请求分配给连接数最少的服务器,使均衡更加符合实际情况,负载更加均衡。
此种均衡算法适合长时处理的请求服务,如FTP Server。
为了避免服务器故障而引起的客户访问失败,负载均衡设备需要探测服务器是否故障从而避免将客户访问继续分配到已经故障的服务器上,这就是服务器业务可用性探测技术,业界常用的探测技术包括:✧icmp探测:也就是ping探测,即通过ping的方式检测服务器及网络系统状况,此种方式简单快速,但只能大致检测出网络及服务器上的操作系统是否正常,对服务器上的应用服务检测就无能为力了。
✧tcp探测:通过检测服务器上某个TCP端口(如Telnet的23口,HTTP的80口等)是否开放来判断服务是否正常。
✧http探测:通过向HTTP服务器发出一个对某个页面文件的访问请求,根据是否能获得该页面文件来判断服务器是否出现故障。
3.3 使用轻量代理和网络地址转换的服务器负载均衡(L4 lwProxySLB)纯粹的网络地址转换型的SLB,由于不解析应用层的内容,因此无法根据应用层信息做业务会话关联保持。
注:业务会话关联保持,是指将属于同一个应用层会话的多个连接定向到同一真实服务器,从而保证同一业务由同一个服务器处理(或链路转发),这样可以避免同一应用层会话访问多台服务器时,多台服务器需要做相关业务数据的热同步(比如在一台真实服务器上认证,再访问另一台真实服务器时,就必须将认证信息同步过来,以避免用户的再次认证)。
使用轻量代理和网络地址转换的服务器负载均衡,1、是SLB需要对客户端发起的TCP 做三次握手代理;2、对TCP传输的第一个报文做关联保持功能;3、对后续报文做网络地址转换。
下面以一个例子来举例说明基于http cookie或URL负载分担的业务会话关联保持下的轻量代理和网络地址转换SLB的实现:如图所示:1、客户端发起tcp三次握手,SLB设备对其代理,建立TCP全连接2、客户端发起tcp payload,也就是http get/post报文,如果之前客户端已经和服务器建立过连接,那么会在该报文中携带cookie等信息,SLB设备对该信息做分析,以保持该客户端仍旧访问同一台真实服务器3、 SLB设备做NAT地址转换,将目的地址替换为真实服务器地址,并发起向该真实服务器的tcp三次握手4、 SLB设备将tcp payload报文(包括第一个http get/post报文)做完tcp sequence、offset、checksum调整后,直接发往真实服务器注:为什么说是轻量代理?因为相对于socket代理,此处仅做了tcp三次握手代理,而后续报文仅对tcp sequence、offset、checksum做了调整,而无需进入tcp/ip协议栈处理,所以是轻量代理。