web应用服务器集群系统,是由一群同时运行同一个web应用的服务器组成的集群系统,在外界看来,就像是个服务器相同。为了均衡集群服务器的负载,达到优化系统性能的目的,集群服务器将众多的访问请求,分散到系统中的不同节点进行处理。从而实现了更高的有效性和稳定性,而这也正是基于Web的企业应用所必须具备的特性。
高可靠性能够看作为系统的一种冗余设定。对于一个特定的请求,假如所申请的服务器不能进行处理的话,那么其他的服务器能不能对之进行有效的处理呢?对于一个高效的系统,假如一个Web服务器失败的话,其他的服务器能够马上取代他的位置,对所申请的请求进行处理,而且这一过程对用户来说,要尽可能的透明,使用户察觉不到!
稳定性决定了应用程式能否支持不断增长的用户请求数量,他是应用程式自身的一种能力。稳定性是影响系统性能的众多因素的一种有效的测量手段,包括机群系统所能支持的同时访问系统的最大用户数目连同处理一个请求所需要的时间。
在现有众多的均衡服务器负载的方法中,广泛研究并使用的是以下两个方法:
DNS负载平衡的方法RR-DNS(Round-Robin Domain Name System)
负载均衡器
以下,我们将就这两种方法进行讨论。
DNS轮流排程 RR-DNS(Round-Robin Domain Name System)
域名服务器(Domain Name Server)中的数据文档将主机名字映射到其IP地址。当您在浏览器中键入一个URL时(例如:www.loadbalancedsite.com),浏览器则将请求发送到DNS,需要其返回相应站点的IP地址,这被称为DNS查询。当浏览器获得该站点的IP地址后,便通过该IP地址连接到所要访问的站点,将页面展现在用户面前。
域名服务器(DNS)通常包含一个单一的IP地址和该IP地址所映射的站点的名称的列表。在我们上面所假象的例子中,www.loadbalancedsite.com 这个站点的映射IP地址为203.24.23.3。
为了利用DNS均衡服务器的负载,对于同一个站点来讲,在DNS服务器中同时拥有几个不同的IP地址。这几个IP地址代表集群中不同的机器,并在逻辑上映射到同一个站点名。通过我们的例子能够更好的理解这一点,www.loadbalancedsite.com将通过下面的三个IP地址发布到一个集群中的三台机器上:
203.34.23.3
203.34.23.4
203.34.23.5
在本例中,DNS服务器中包含下面的映射表:
www.loadbalancedsite.com 203.34.23.3
www.loadbalancedsite.com 203.34.23.4
www.loadbalancedsite.com 203.34.23.5
当第一个请求到达DNS服务器时,返回的是第一台机器的IP地址203.34.23.3;当第二个请求到达时,返回的是第二台机器的IP地址203.34.23.4,以此类推。当第四个请求到达时,第一台机器的IP地址将被再次返回,循环调用。
利用上述的DNS Round Robin技术,对于某一个站点的任何请求将被平均的分配到及群中的机器上。因此,在这种技术中,集群中的任何的节点对于网络来说都是可见的。
DNS 轮流排程的优势
DNS Round Robin的最大的长处就是易于实现和代价低廉:
代价低,易于建立。 为了支持轮流排程,系统管理员只需要在DNS服务器上作一些改变,而且在许多比较新的版本的DNS服务器上已增加了这种功能。对于Web应用来说,无需对代码作任何的修改;事实上,Web应用本身并不会意识到负载均衡配置,即使在他面前。
简单. 无需网络专家来对之进行设定,或在出现问题时对之进行维护。
DNS 轮流排程的缺点
这种基于软件的负载均衡方法主要存在两处不足,一是不实时支持服务期间的关联,一是不具备高可靠性。
不支持服务器间的一致性。服务器一致性是负载均衡系统所应具备的一种能力,通过他,系统能够根据会话信息是属于服务器端的,还是底层数据库级别的,继而将用户的请求导向相应的服务器。而DNS轮流排程则不具备这种智能化的特性。他是通过cookie、隐藏域、重写URL三种方法中的一种来进行相似的判断的。当用户通过上述基于文本标志的方法和服务器建立连接之后,其任何的后续访问均是连接到同一个服务器上。问题是,服务器的IP是被浏览器暂时存放在缓存中,一旦记录过期,则需要重新建立连接,那么同一个用户的请求很可能被不同的服务器进行处理,则先前的任何会话信息便会丢失。
不支持高可靠性。设想一个具备N个节点的集群。假如其中的一个节点毁坏,那么任何的访问该节点的请求将不会有所回应,这是任何人都不愿意看到的。比较先进的路由器能够通过每隔一定的时间间隔,对节点检查,假如有毁坏的节点,则将之从列表中去除的方法,解决这个问题。但是,由于在Internet上,ISPs将众多的DNS存放在缓存中,以节省访问时间,因此,DNS的更新就会变得很缓慢,以至于有的用户可能会访问一些已不存在的站点,或一些新的站点得不到访问。所以,尽管DNS轮流排程在一定程度上解决了负载均衡问题,但这种状况的改变并不是十分乐观和有效的。
除了上面介绍的轮流排程方法外,更有三种DNS负载均衡处理分配方法,将这四种方法列出如下:
Round robin (RRS): 将工作平均的分配到服务器 (用于实际服务主机性能一致)
Least-connections (LCS): 向较少连接的服务器分配较多的工作(IPVS 表存储了任何的活动的连接。用于实际服务主机性能一致。)
Weighted round robin (WRRS): 向较大容量的服务器分配较多的工作。能够根据负载信息动态的向上或向下调整。 (用于实际服务主机性能不一致时)
Weighted least-connections (WLC): 考虑他们的容量向较少连接的服务器分配较多的工作。容量通过用户指定的砝码来说明,能够根据装载信息动态的向上或向下调整。(用于实际服务主机性能不一致时)
负载均衡器
负载均衡器通过虚拟IP地址方法,解决了轮流排程所面临的许多问题。使用了负载均衡器集群系统,在外部看来,像是具备一个IP地址的单一服务器相同,当然,这个IP地址是虚拟的,他映射了集群中的每一台机器的地址。所以,在某种程度上,负载均衡器是将整个集群的IP地址报漏给外部网络。