么丽颖
(黑龙江信息技术职业学院计算机工程系,黑龙江哈尔滨 150025)
在计算机系统应用中,Linux操作系统被较来用户所接受,并在服务器、开发环境和桌面办公等领域得到广泛应用。在企业应用中,Linux操作系统在稳定性、工作效率和安全性等方面都有优秀表现。近年来,Linux操作系统逐渐成熟,标准化的MPI、PVM和GNU软件消息传递机制,特别是其操作系统对高性能网络的支持,促进了基于Linux的集群系统的飞速发展。Linux的集群系统是计算机系统结构的前沿领域,其集群系统是由多个独立计算机系统构成的一个多处理器系统,通过网络实现计算机系统之间进程间的通信。通过网络共享内存进行应用程序的消息传送,从而实现分布式计算机。
调配多台计算机之间的负载,使各台计算机的负载基本均衡,实现计算能力共享,达到提高Linux集群系统的性能的目的,因此常称作负载平衡集群系统。负载平衡集群系统的功能:(1)能将TCP/IP协议用于多种服务,如远程登录、FTP、HTTP等进行转发。在应用程序中,用户能够通过加入特定服务,以增加相应端口指定的服务支持。(2)实现动态负载平衡:负荷平衡器收集每个服务器运行过程中的实际数字,通过寻找次数最少的工艺操作来找出这个机器,将被要求发送到机器。这种负载均衡是机器与负荷现状的改变,所以是动态负载平衡。(3)确保可持续的关联:负载平衡器链接列表中已接受检查是否有配套的表项,一经发现已有匹配表项,即请求相应的实际服务器。
负载平衡集群系统的性能特点:(1)具有较短的响应时间。从负载平衡器向集群中实际服务器发出收集负载的请求到决定出负载最轻机器所用的总时间约为30 ms,该负载平衡系统能保证ms级的响应时间。(2)具有良好的扩展性。用户可以在机器的应用数量上加以控制,机器的IP地址由程序中的一个数组来记录,因此增加一个机器只需增加一个新的数组元素,删除一个机器只需删除相应的元素。(3)具有良好的纠错性。当集群机器突然倒塌时,应用程序可以即时发现,并不会被分配到请求失败的机器。把机器修好重返集群中时,应用程序能够将其检测到,开始正常收集工作负荷。
组成该负载平衡集群系统的机器设备有:路由器、服务器1~服务器n。路由器作为外部网络与人机互动界面内部网的接口,能够接受外部网络的用户请求,并将该用户请求发送到服务器1~服务器n中的一台机器上,如果server2处理用户的请求后,它将处理结果的路由器发送,然后到路由器要求对应的外部网络用户。由于该机器设备具有均衡负载功能,把路由器这台机器称为负载平衡器,由于服务器具有实际响应用户请求的功能,因此将其称为实际服务器,如图1所示。
图1 负载平衡系统环境设置图
负载平衡集群系统必须要建立IP伪装机制,以提高IP端口转发机制。设计一个应用程序,该应用程序能够根据集群中机器的状态完成实时动态负载平衡。建立动态负载平衡的应用程序,该应用程序监视集群中各实际服务器的负载情况,并将用户请求转发到负载最轻的实际服务器上。
负载平衡集群系统实现了IP级的负载平衡,当一个客户平衡装置发送一个请求信息时,IP层的平衡器对这个请求报文的目标地址作了更换,将取代实际目标地址,然后将报文传递出去。当实际服务器将请求内部网处理后,它将请求回应发向平衡器,平衡器又一次在IP层将目标地址替换为客户要求在外部网络的IP地址,然后报文将被提交给客户。
目标地址代替工作是该系统的运行核心,选择负载最轻IP地址的机器在应用层实现。这是因为在应用层带负荷数据可以提高系统的可扩展性,当需要向内部网中增加一台新服务器时,只需将应用程序的数组变量增加,并将应用层实行灵活调度策略,可用动态调度策略,还可用静态调度策略。IP数据包到目标地址重写的主要工作在核心完成,删去用户到核心的通讯过程,使得执行速度加快。
当客户在外部网络负载平衡发送服务请求时,请求中可能有一个外部网络机器的IP地址和端口号(laddr,lport)以及平衡器的IP地址,根据这些信息查询IP端口转发双向链表检查是否有匹配(laddr,lport)的表项存在,如果存在相应的表项,提取该表项中的(raddr,rport)价值,即机器在内部网的IP地址和端口号,并更换IP包的目标地址和端口为(raddr,rport),那么它的IP数据包将再次发送到相应的内部网的机器。如果没有相应的表项,就创建新的IP端口转发表项和相应的IP伪装表项,再完成目标地址替换和包重发的工作。
该负载平衡系统主要分为IP伪装模块、IP端口转发模块和调度模块。在IP层实现IP伪装模块和IP端口转发模块,在Linux源代码所在目录下都可以找到其对应程序。而调度模块在应用层实现,具体各模块功能见表1。
表1 各模块功能
(1)IP伪装模块。1)隐藏内部网发向外部网中所有请求的源地址,从表面上平衡器发送了全部请求。2)通过平衡器在内部网连接请求将被提交到外部网络。3)接收内部网发向外部网的全部请求。4)由建立的HASH表来记录已建立的所有连接。5)接收外部网对请求的回应,同时将其转发到内部网发出请求的机器上。
(2)IP端口转发模块。1)接受外部网的连接请求。2)对外只能看见平衡器,使所有请求从表面看都是由平衡器处理。3)能够建立一个端口转发链表。4)接收外部网发向内部网的请求,根据连接请求源地址、源端口、目标地址和目标端口的信息查看链表中是否有对应表项。5)利用系统调用实现函数在IP端口转发模块中对用户的系统调用进行处理。
(3)调度模块。1)负载平衡器向各台实际服务器发送收集负载信息的命令。2)各台实际服务器分别运行取自CPU运行队列长度的程序。3)各台机器将各自的CPU运行队列长度信息回传给负载平衡器。4)负载平衡器对各台机器的CPU运行队列长度进行比较,选出CPU运行队列长度最短的机器,确定该机器是负载最轻的机器。5)负载最轻机器的IP地址通过系统调用传入IP端口转发模块。
目前Linux集群系统已被广泛应用,在服务器领域,其良好的安全性和稳定性得到更多用户的认可,并在嵌入式应用及开发方面,Linux集群系统更具有其他操作系统无可比拟的优势。
[1] MARCUS E,STERN H.高可用性系统设计[M].汪青青,卢祖英,译.北京:清华大学出版社,2005.
[2] VRENIOS A.Linux集群体系结构[M].马朝晖,译.北京:机械工业出版社,2003.
[3] MATTHEW N,STONE R.Linux程序设计[M].2版.杨晓云,译.北京:机械工业出版社,2002.
[4] DEVINE BOMAN K D,ERIK G.New Challenges in Dynamic Load Balancing[J].Applied Numerical Mathematics,2005,23(8):1121-1128.
[5] BUYYA R,CORTES T,JIN H.Single System Image[J].The International Journal of High Performance Computing Applications,2001,28(6):542 -549.
[6] 么丽颖.Linux系统管理和应用[M].北京:中国铁道出版社,2011.
[7] 龚梅.一种集群系统的透明动态反馈负载均衡算法[J].计算机应用,2007,38(7):87 -91.
[8] 彭土有.新编Linux网络组建与实训[M].北京:北京出版社,2008.
[9] 林洪祥.基于服务分类和性能监测的负载均衡研究[J].计算机应用技术,2008,30(6):67 -70.
[10]王文义.Linux集群系统并行应用程序监测技术的研究[J].郑州大学学报,2005,37(4):257-263.