Linux集群技术在Web服务器中的应用技术应用

2010-05-21    来源:中国软件资讯网    
网络的普及使各类电子商务、电子政务网站的流量剧增,系统瓶颈问题日益严重,直接影响了用户请求的响应时间,在高峰期有的请求甚至被拒绝。面对这种情况,一般来说有两种解决

  网络的普及使各类电子商务、电子政务网站的流量剧增,系统瓶颈问题日益严重,直接影响了用户请求的响应时间,在高峰期有的请求甚至被拒绝。面对这种情况,一般来说有两种解决方案:一是升级硬件、购买性能更好的服务器等,但花费较多,而且效果不一定很理想,显然不是最好的解决方案;二是利用集群技术,在原有的硬件投资基础上,添加几台新的服务器,组建负载均衡集群系统。集群计算模式是比较经济的计算模式,允许用户把普通商用硬件系统组成机群,并根据需要随时增加新的硬件。既提高了系统的性能,同时也降低了成本。本文简要地讨论了一个用于企业Web服务的集群系统的设计思路,并给出了重点模块的设计与实现过程。

  1.集群技术

  集群技术是一种计算机系统之间连接的方式,运用它可以将分散的计算系统连接起来完成原来单独节点的计算系统无法完成的任务。最早的集群系统就是出于这样的并行处理的目的出现的。但是随着计算机性能的快速发展和网络不安全因素的增加,系统的稳定性和可靠性是主要面临解决的问题。于是开始使用集群方式将两台以上的设备连接起来,当整个集群系统中发生单点或局部多点故障时,集群中其他的计算机将自动来接替出故障的设备。最典型的例子就是双机热备份,两台一样的计算机系统,使用集群软件连接起来,其中一台作为另一台的备份,当主机系统崩溃时,另一台来接替它的任务。除此以外,利用集群系统的高并行性能进行复杂的科学、工程计算,也是非常有经济价值的做法。

  集群技术可以有效地解决开放系统的稳定、抗压和负载平衡问题,建立一个集群系统的主要目的在于:

  (1)现有的应用得以保障。

  (2)提高性价比。

  (3)实现资源共享。

  (4)提高灵活性和可扩展性。

  (5)增强实用性和容错性。

  (6)灵活的可伸缩性。

  2.设计目标及系统架构

  设计一个基于Linux的集群系统,它能够不断监视集群中各台服务器的负载状况,并且将来自外网的Web请求转发到内部网中的某一台实际服务器上执行。具体来说,拥有以下的功能:

  (1)服务转发。能接受来自外部网中的多种基于TCP/IP的服务请求,并将它们转发到当前负载最轻的机器上执行。

  (2)动态负载平衡。平衡器能够监视内部网中的实际服务器的负载状况并且找到负载最轻的机器。

  (3)连接持续性。来自外网的同一客户的所有请求必须转发到内网中的同一台服务器上进行处理。

  该集群系统由调度机、服务器1、服务器2以及服务器N等机器组成。其中调度机作为内网和外网的接口。能够接收外网的用户请求.并将此用户请求发送到服务器1到服务器N中的某台机器上,当服务器处理完该请求以后,就将处理完的结果发送给调度机,然后再由调度机将结果返回给外部网的用户。试验环境中外网中的客户机器的IP地址为211.80.248.100,调度机有两个IP地址,一个是外网的211.80.248.99。一个是内网的192.168.1.1。调度机上运行的操作系统内核为Linux 2.2.x。内部网中有N台服务器,IP地址分别为192.168.1.2、192.168.1.3...192.168.1.N,上面运行的操作系统也是Linux操作系统.都将192.168.1.1设为网关.并且都增加了通往211.80.248.0网络的路由。负载调度的目的就是将客户发向调度机的请求按照内网机器当前负载的情况分发到各个服务器上。

      系统实现了IP级的负载平衡。当外网客户向调度机发送一个请求时,在调度机的IP层对此请求的目标地址进行替换.将目标地址替换为内网中负载最轻的服务器的IP地址。然后将此请求再次转发出去。当内网中的服务器处理完请求后.将处理结果发往调度机,调度机再次在IP层将目标地址替换为发出请求的外网中的客户的IP地址。然后将回应转发给客户。

  系统主要分为IP伪装模块、IP端口转发模块和调度模块。其中IP端口转发模块的实现比较简单。只需在Linux的某个内核文件中增加适当的转发规则,并调用IP伪装模块的功能就能实现,因此文中没有详细介绍该模块。

  3.IP伪装

  IP地址中的那些私有地址是无法直接与Internet上的机器通讯的,如果它们想与Internet上的机器通讯,需要采用网络地址翻译(NAT)机制。IP伪装机制实际上就是一种M-1的动态网络地址翻译,它能够将多个内网中的IP地址映射到一个与Internet相连接的外网IP地址上,这样无法直接与Internet上的机器通讯的内网机器就可以通过这台映射机器与外界进行联络。网络地址端口翻译是对网络地址翻译的一种扩展。它将许多网络地址以及TCP/UDP端口翻译为一个IP地址和TCP/UDP端口,本集群系统采用的就是网络地址端口翻译机制。为了使Linux支持IP伪装,必须重新编译Linux内核并安装、激活IP伪装模块。

  IP伪装模块的主要工作包括:

  (1)接收内网发向外网的所有请求。

  (2)内网中的连接请求通过调度机转发到外网。

  (3)将内网发向外网中的所有请求的源地址隐藏,使所有请求看上去都是由调度机发送的。

  (4)建立HASH表来记录已经建立的所有连接。

  (5)接收外网对请求的回应并将其转发到内网中的发出请求的机器上。
  内网向外网发送连接请求的流程如图2所示(相反的过程非常类似):

      4.调度模块

  调度模块是在应用层实现的,因为在应用层可以灵活地控制调度策略,可以采用静态的调度策略,也可以采用动态的调度策略;同时可以提高系统的可扩展性,当Web站点的访问量增大时,需要添加一台新的服务器时,只要在应用程序中增加一项数据就可以实现。调度模块的主要任务包括:

  (1)调度机向各台实际服务器发送收集负载信息的命令。

  (2)各台实际服务器分别运行获取CPU运行队列长度的程序。

  (3)各台机器将各自的CPU运行队列长度信息回传给调度机。

  (4)调度机对各台机器的CPU运行队列长度进行比较,并选出CPU运行队列长度最短的机器,认为此机器就是负最轻的机器。

  (5)通过系统调用将负载最轻的机器的IP地址传入IP端口转发模块。
  Server方的流程如图3所示

      5.总结

  本集群系统实现了IP级的负载平衡,对IP报文进行目标地址改写的工作主要在核心完成。这是因为这样速度很快,省掉了从用户到核心的通讯过程。该负载平衡系统主要具有以下功能:

  (1)能够对基于TCP/IP协议的多种服务如telnet、ftp、http等进行转发。

  (2)通过找出内网中当前负载最轻的服务器来响应用户的请求,实现动态负载平衡。

  (3)通过匹配Hash表项,来自同一个服务的多次请求能发送到同一台内网的实际服务器上,保证连续性。

  (4)能够保证毫秒级的响应时间。

  (5)用户可以在应用程序中对内网的服务器的数目进行控制,具有良好的可伸缩性。

  (6)当某台服务器出现故障时,能够及时地发现,具有良好的容错性。

  当然,该系统还有很多需要完善的地方。如调度机应该双机备份等等。在大型的应用级集群服务系统的实施过程当中,设计人员需要考虑更多的要素:业务资源设计、资源监测、负载均衡、故障转移管理、可靠性、可用性和性能等若干方面。

1
3