web负载均衡的方法有很多种,下面介绍几种常见的负载均衡方式。
这是一种较为古老的方式,通过在主站首页入口提供不同线路、不同服务器链接的方式,来实现负载均衡。这种方式在一些提供下载业务的网站中比较常见,例如:华军软件园,如图所示。
大多域名注册商都支持对同一主机名添加多条A记录,这就是DNS轮询,DNS服务器将解析请求按照A记录的顺序,随机分配到不同的IP上,这样就完成了简单的负载均衡。DNS轮询的成本非常低,在一些不重要的服务上,被经常使用。
虽然DNS轮询成本低廉,但是,DNS负载均衡存在两个明显的缺点。
1、可靠性低假设一个域名DNS轮询多台服务器,如果其中的一台服务器发生故障,那么所有的访问该服务器的请求将不会有所回应,这是任何人都不愿意看到的。即使从DNS中去掉该服务器的IP,但在Internet上,各地区电信、网通等宽带接入商将众多的DNS存放在缓存中,以节省访问时间,DNS记录全部生效需要几个小时,甚至更久。所以,尽管DNS轮流在一定程度上解决了负载均衡问题,但是却存在可靠性不高的缺点。
2、负载分配不均衡DNS负载均衡采用的是简单的轮询负载算法,不能区分服务器的差异,不能反映服务器的当前运行状态,不能做到为性能较好的服务器多分配请求,甚至会出现客户请求集中在某一台服务器上的情况。DNS服务器是按照一定的层次结构组织的,本地DNS服务器会缓冲已解析的域名到IP地址的映射,这会导致使用该DNS服务器的用户在一段时间内访问的是同一台Web服务器,导致Web服务器间的负载不均衡。此外,用户本地计算机也会缓存已解析的域名到IP地址的映射。当多个用户计算机都缓存了某域名到IP地址的映射时,而这些用户又继续访问该域名下的网页,这时也会导致不同Web服务器间的负载分配不均衡。负载不均衡可能导致的后果有:某几台服务器负荷很低,而另几台服务器负荷很高、处理缓慢;配置高的服务器分配到的请求少,而配置低的服务器分配到的请求多。因此,DNS轮询方式仅适用于一些可靠性要求不高的服务器集群,例如:图片服务器集群、纯静态网页服务器集群等。
由于DNS轮询的缺点,一些对可靠性要求较高的服务器集群,则通过采用四/七层负载均衡设备来实现服务器的负载均衡。世界上第一个网络体系结构由IBM公司提出(1974年,名为SNA),以后其他公司也相继提出自己的网络体系结构如:Digital公司的DNA,美国国防部的TCP/IP等,多种网络体系结构并存,其结果是若采用IBM的结构,只能选用IBM的产品,只能与同种结构的网络互联。为了促进计算机网络的发展,国际标准化组织ISO于1977年成立了一个委员会,在现有网络的基础上,提出了不基于具体机型、操作系统或公司的网络体系结构,称为开放系统互联模型(OSI, opensystem interconnection)。这个模型把网络通信的工作分为七层(可参见图6-3)。一至四层被认为是低层,这些层与数据移动密切相关。五至七层是高层,包含应用程序级的数据。每一层负责一项具体的工作,然后把数据传送到下一层。由低到高具体分为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
现代负载均衡技术通常操作于OSI网络模型的第四层或第七层。第四层负载均衡将一个Internet上合法注册的IP地址映射为多个内部服务器的IP地址,对每次TCP连接请求动态使用其中一个内部IP地址,达到负载均衡的目的。在第四层交换机中,此种均衡技术得到广泛的应用,一个目标地址是服务器群VIP(虚拟IP,Virtual IP address)连接请求的数据包流经交换机,交换机根据源端和目的IP地址、TCP或UDP端口号和一定的负载均衡策略,在服务器IP和VIP间进行映射,选取服务器群中最好的服务器来处理连接请求。
第七层负载均衡控制应用层服务的内容,提供了一种对访问流量的高层控制方式,适合对HTTP服务器群的应用。第七层负载均衡技术通过检查流经的HTTP报头,根据报头内的信息来执行负载均衡任务。
1、硬件四/七层负载均衡交换机 :
硬件四/七层负载均衡交换机的代表有:F5 BIG-IP、Citrix NetScaler、Radware、Cisco CSS、Foundry等产品,这些产品价格不菲,高达几十万元人民币。在中国大陆,采用F5 Network公司的BIG-IP负载均衡交换机的网站(有些网站为部分频道采用)最多,包括:新浪网、雅虎、百度、搜狐、凤凰网、央视国际、中华英才网、猫扑、慧聪网等。图6-4是一张F5 BIG-IP实现动、静态网页分离的负载均衡架构图,很好地描述了F5 BIG-IP是如何实现四/七层负载均衡的。
(1)如图,假设域名blog.s135.com被解析到F5的外网/公网虚拟IP:61.1.1.3(vs_squid),该虚拟IP下有一个服务器池(pool_squid),该服务器池下包含两台真实的Squid服务器(192.168.1.11和192.168.1.12)。
(2)如果Squid缓存未命中,则会请求F5的内网虚拟IP:192.168.1.3(vs_apache),该虚拟IP下有一个默认服务器池(pool_apache_default),该服务器池下包含两台真实的Apache服务器(192.168.1.21和192.168.1.22),当该虚拟IP匹配iRules规则时,则会访问另外一个服务器池(pool_apache_irules),该服务器池下同样包含两台真实的Apache服务器(192.168.1.23和192.168.1.24)。
(3)另外,所有真实服务器的默认网关指向F5的自身内网IP,即192.168.1.2。
(4)所有的真实服务器通过SNAT IP地址61.1.1.4访问互联网。
2、软件四层负载均衡
软件四层负载均衡的代表作品为LVS(Linux Virtual Server),作者为曾经在国家并行与分布式处理重点实验室工作,现在已加盟淘宝网的章文嵩博士。LVS是一个开源的软件,可以实现LINUX平台下的简单负载均衡。LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无须修改客户端和服务器端的程序。为此,在设计时要考虑系统的透明性、可伸缩性、高可用性和易管理性。
LVS负载均衡的结构如图6-5所示。
3、软件七层负载均衡
软件的七层负载均衡大多基于HTTP反向代理方式,代表产品有Nginx、L7SW(Layer7switching)、HAProxy等。Nginx的反向代理负载均衡能够很好地支持虚拟主机,可配置性很强,可以按轮询、IP哈希、URL哈希、权重等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查。
以新浪首页(www.sina.com.cn)为例,负载均衡同时用到了“多线多地区智能DNS解析、DNS轮询、四/七层负载均衡交换机”等技术。智能DNS解析能够根据用户本地设置的DNS服务器线路和地区,将对同一个域名请求解析到不同的IP上。
例如:当北京电信用户访问www.sina.com.cn时,会被新浪的DNS服务器解析到北京电信机房的IP上;当北京网通用户访问www.sina.com.cn时,会被解析到北京网通机房的IP上;当教育网的用户访问 www.sina.com.cn 时,会被解析到教育网机房的IP上;当广东电信的用户访问www.sina.com.cn 时,会被解析到广州电信机房的IP上;当湖南、湖北的电信用户访问www.sina.com.cn时,会被解析到武汉电信机房的IP上,等等。
将DNS地址设为北京电信的DNS服务器219.141.136.10,通过Linux下的dig命令可以发现,访问 www.sina.com.cn 被解析到了北京电信的多台服务器的IP上,这属于智能DNS解析+DNS轮询解决负载均衡,如下图所示。
将DNS地址设为北京网通的DNS服务器202.106.0.20,通过Linux下的dig命令可以发现,访问www.sina.com.cn最终被解析到了北京网通的一个IP地址202.108.33.32上,这属于用智能DNS解析+四/七层负载均衡交换机解决负载均衡,该IP地址202.108.33.32是四/七层负载均衡交换机的虚拟IP,如下图所示。