一种全分布式的集群网络服务器系统 【技术领域】
本发明属于计算机应用领域,具体涉及一种全分布式的集群网络服务器系统。背景技术
当今计算机技术已进入以网络为中心的计算时期,大量的应用都围绕着网络进行,对服务器的性能和可靠性提出了越来越高的要求。例如,随着Internet的飞速发展和用户的剧烈增长,比较热门的Web站点会因为被访问次数急剧增长而不能及时处理用户的请求,导致用户长时间地等待甚至遭到拒绝,大大降低了服务质量。对于CPU密集型的应用,比如说带有CGI(Common Gateway Interface,通用网关接口)和数据库操作的Web服务,服务器性能瓶颈问题则更加突出。另外,随着电子商务等关键性应用在网上的推广,任何例外的服务中断都将造成不可估量的损失,因此服务器的可靠性越来越重要。
为了解决服务器的性能问题,许多公司和研究机构提出了可扩展的集群系统。这些集群系统通过一个前端机将外来地网络服务请求调往一组后端的真实服务器。调度与负载均衡技术可在链路层、网络层或应用层等多处实现。例如,EDDIE,Reverse-Proxy和pWEB都使用基于应用层调度的方法来建立一个可伸缩的WEB集群服务器。它们将到达的HTTP请求转发到不同的Web服务器,取得结果后,再返回给用户。IBM的TCP Router和Network Dispatcher都是实现在网络层的调度器。Linux Virtual Server是一个基于Linux操作系统的集群调度软件。它通过扩展IP协议栈,对不同的网络服务提供了多种请求调度方案。
除了软件实现,一些公司也提出了硬件解决方案,比如Cisco公司的LocalDirector。它通过硬件进行集群服务器进出口包的重写,并取得了较高的性能。据称,它能同时调度数十万个TCP连接请求,但是这种专门的硬件产品价格非常昂贵,以致一般用户难以承受。
以上方案都采用了集中式调度方式,它虽然解决了集群的整体性能瓶颈问题,但都存在共同的缺点,即很少考虑这种集中式调度中前端机的可靠性。作为整个集群服务器的单一入口点,前端机一旦出现故障,整个服务器将陷入瘫痪,从而可能造成巨大的经济损失。一个简单的解决办法是为该前端机专设一台备份机,当前端机出现故障时,备份机取代其IP地址而继续工作。这种容错处理方式的一个重要不足之处在于已建立的TCP连接会全部丢失,这对用户会产生不便甚至带来损失。另外,上述各种基于集中式调度的方案都是以连接作为负载衡量单位,所以不能达到理想的负载均衡效果。尤其在各节点提供多种不同服务的异构集群中,各种服务消耗不同的网络资源,因此用连接数来权衡各节点的负载将变得极不合理。
综上所述,传统基于集中式调度的集群服务器存在如下缺点:1、前端机成为单一失效点;2、以连接为负载权衡单位将导致负载定位不精确;3、由于同一IP定向到同一节点上,所以对动态端口处理不妥;4、在应用日益广泛的端对端的加密应用中,前端机将成为瓶颈点,从而导致集群针对加密应用的可扩展性较差。发明内容
本发明针对集中式调度的缺点,提出了一种全分布式的集群网络服务器系统,该系统消除了集中式调度方案中“前端机”的概念,具有无单一失效点、无瓶颈效应、适用于基于动态协议的服务和细粒度的负载均衡的技术效果。
为实现上述发明目的,一种全分布式的集群网络服务器系统,其特征在于:
前端的共享介质型集线器作为集群的单一入口点,客户通过该集线器把其请求广播到后端集群内的节点上;
集群内各节点均包括同构网卡、包过滤模块、延时均衡模块和TCP栈处理模块;
同构网卡用于将集群内部各节点的网卡配置成相同的IP地址和MAC地址;
包过滤模块用于有选择的过滤掉同构网卡传来的数据包;
延时均衡模块负责截取所有的请求包,并对请求包进行延迟,延迟时间结束后,延时均衡模块将请求包提交TCP栈处理模块处理;
TCP栈处理模块发回的所有数据包通过真实网卡发送到网关机送至客户端。
所述包过滤模块包括包处理模块、PASS表、定时触发器和规则管理模块;
所述包处理模块驻留于链路层,负责在收到同构网卡传来的数据包时,将查询PASS表的规则并对这些包的协议号、源IP地址、目标IP地址、源端口、目标端口进行匹配,并完成相应的处理动作,该相应动作分三类:丢弃此包、提交延时均衡模块中的包截取子模块和提交内核TCP/IP协议栈处理模块;
所述PASS表为一个用元组描述的规则集,负责定义当前包处理模块允许通过的数据包;
所述定时触发器负责每隔一段时间触发规则管理模块对PASS表进行维护操作;
所述规则管理模块负责更新、删除PASS表中的规则项。
所述延时均衡模块包括定时触发器、负载统计模块、延时计算模块、包截取模块和包队列表;
所述定时触发器负责触发负载统计模块对系统资源进行收集,同时触发包截取模块获取在包队列表中挂起的数据包;
所述负载统计模块负责收集各种系统资源的利用情况,它与系统各设备通信并收集各设备的资源利用率,并把这些利用率作为矢量传给延时计算模块;
所述延时计算模块根据负载统计模块传来的负载矢量计算延时值;
所述包截取模块接收从包处理模块传来的SYN包,并根据延时计算模块传来的延时值把该SYN包挂起到包队列中;另外,当收到定时触发器发来的触发信号时,它将遍历包队列表,判断每个包的延迟时间是否完毕,如果完毕则取回该数据报并传送给TCP栈处理模块;
所述包队列表用于存放被延迟的SYN包,每个包都携带一个延时变量,当延迟时间结束后就被包截取模块重新取回。
本发明具有以下技术特点:
同构网卡技术实现全局的单一MAC映像,即每个节点中接收服务请求的网卡都能绑定一个统一的虚拟IP地址和虚拟MAC地址,因此能保证每个节点都将能接收前端集线器转发的服务请求包;
基于延时竞争的分布式均衡技术,该技术可以根据本地的负载(CPU负载、内存占用情况、磁盘I/O、网络流量等)对所有的连接请求进行一定时间的延时,负载越重,延时越长;
有状态的链路层包过滤技术,能记忆属于同一连接的数据流,允许那些已建立连接的数据包通过,并能阻挡连接并未建立的数据报通过,以避免一些没有意义的数据报向上层协议栈流动。
基于以上技术特点,本发明具有如下技术效果:1)无单一失效点
由于本发明提出的集群服务器系统采用全分布式的架构,所以当其中的一台节点出现故障时,其余几台节点将能继续接管工作,并能够自动地把服务请求重新分配到负载最轻的节点上。2)无瓶颈效应
在集中式调度方式中,当集群提供加密应用时,前端机需要频繁的对进出的包进行加解密后再调度到后端节点上,因此会造成前端机成为瓶颈点而使系统的可扩展性变差。而本发明的分布式网络调度方案采用集线器来代替集中式调度中的前端调度机,从而消除了这一瓶颈效应。3)适用于基于动态协议的服务
现在许多服务都采用动态协议(如FTP、RTSP),由于服务过程中服务节点会动态的临时开放一些新的数据端口,在基于集中式的调度中,前端机需要知道这些临时端口并开放它们,所以需要服务节点与前端机频繁通信,而本发明的分布式网络调度中服务节点临时开放端口时只需要更新本机包过滤模块的PASS表,从而减少了网络开销。4)细粒度的负载均衡
现有的集中式调度方案中以连接为负载权衡单位,因此会造成各服务节点的负载不均衡,而本发明采用的是基于负载的调度方式,能精确定位负载最轻的节点,达到极佳的负载均衡效果,所以能较好的应用于异构集群系统。附图说明
图1为本发明一种全分布式的集群网络服务器系统结构示意图;
图2为各节点的工作流程示意图;
图3为图1中包过滤模块结构示意图;
图4图1中延时均衡模块结构示意图。具体实施方式
本发明的系统结构如图1所示。前端的共享介质型集线器作为集群的单一入口点,借助于集线器的共享介质特征,使得所有访问集群的数据包都能被内部节点的同构网卡接收并传往它们各自的链路层。集群内部所有服务节点都配备一块同构网卡,这些网卡都绑定一个公共对外的IP地址,以实现集群的单一IP映像。由图1可知当客户端发连接请求时,将产生一个请求包(SYN包),SYN包的目的IP地址是集群对外的IP地址。请求包到达集群服务器前端的集线器时,集线器将把这个请求包广播到后端的服务节点上。
各个节点的工作流程如图2所示,所有节点的同构网卡都将接收从集线器广播的请求包,并提交给驻留在链路层的包过滤模块,该模块将允许所有的请求包和那些已建立连接的数据包通过,并拒绝掉那些还未建立连接的数据包。包过滤模块把请求包提交给上层IP协议栈,驻留在TCP层的延时均衡模块将截取所有的请求包,并根据该模块中的负载统计子模块采集的负载信息对请求包进行一定的时间延迟,延迟时间与本机的负载情况成正比(负载越重,延时越长),当延迟时间结束后,延时均衡模块将请求包提交TCP栈处理模块处理,根据TCP协议栈的处理流程发回给客户端一个请求确认包(SynAck包)。因此负载最轻的节点发出的请求确认包最早,最后所有节点的请求确认包将依次到达客户端,即负载轻的节点的请求确认包最先到达,而负载重的节点的请求确认包最后到达。TCP栈处理模块发回的所有数据包都通过真实网卡发送到网关机。
如图1,所有节点的输出数据包都通过网关机这一单一出口点回送给客户端。由于TCP协议栈固有的先来先服务的特性,客户端将只接收最先到达的请求确认包(该请求确认包由负载最轻的节点发出)并反馈一个连接确认包(ACK包),而丢弃掉后续到达的包并反馈一个复位包(RST包)。这些客户端发回的包(一个ACK包,多个RST包)被集群内部的所有节点接收后,各节点将进行一定的处理:接收ACK包的节点将完成连接的建立,并在过滤模块中加一条规则,允许属于该连接的后续数据包通过;接收RST包的节点将释放开辟的套接字缓冲区,即该节点将不能与客户端建立连接。最后,每次客户端向集群服务器进行访问时,总能与负载最轻的节点建立起连接,以完成细粒度的动态的网络负载均衡。
下面分别对各模块加以具体说明。1、同构网卡
同构网卡4采用同构网卡技术加以实现,它是将集群内部各节点的网卡配置成相同的IP地址(虚拟IP地址)和MAC地址(虚拟MAC地址)。这个虚拟IP地址就是集群服务器的公开访问地址。
每个节点都有一个ARP高速缓存。它存放了最近IP地址到硬件MAC地址之间的映射记录。当一个网络数据包经过路由选择后,就可得到下一站路由器地址或目的主机的IP地址,然后在ARP高速缓存中去寻找与之对应的MAC地址,如果未找到,则在局域网内广播一个ARP询问包,该包将查询下一站路由器地址或目的主机的地址对应的MAC地址,并将这个新的IP地址与MAC地址映射关系添加到自己的ARP缓存中,然后根据这个MAC地址发送IP数据包。在本技术中,为了保证每台节点上ARP缓存中虚拟IP地址与虚拟MAC地址映射关系的一致性和避免IP地址的冲突,需要在内核屏蔽掉ARP广播询问包的响应,实现方法是修改/net/ipv4/arp.c文件中关于ARP询问包的代码。另外,因为各节点的网卡均配置同一MAC地址和同一IP地址,会导致某一节点发出的ICMP协议UDP端口不可达消息会引发网络风暴,为了抑制这种ICMP消息风暴,本技术的实现中还要修改/net/ipv4/udp.c中的udp_recv()函数。
最后,用ifconfig命令配置网卡的虚拟MAC地址,比如欲配置所有节点的网卡的MAC地址为虚拟地址00:03:61:83:2a:8b,需要进行如下几个配置步骤(以节点1的网卡eth1为例):第一步:[root@node1/]#ifconfig eth1 down第二步:[root@node1/]#ifconfig eth1 ether HW 00:03:61:83:2a:8b第三步:[root@node1/]#ifconfig eth1 up2包过滤模块
包过滤模块5采用有状态的链路层包过滤技术加以实现,它用于有选择的过滤掉同构网卡传来的数据包。因为每次流入集群的数据包都要经过集线器广播到各个节点上,所以各节点的同构网卡将接收所有这些包并提交给上层的内核协议栈,这样将导致大部分节点的内核协议栈会消耗大量的资源来处理一些无关的数据包,特别是在服务请求密集的情况下,这种广播的负面效应将更明显。因此,本发明采用有状态的包过滤技术在链路层丢弃那些无关的数据包。该模块的结构示意图如图4所示,具体包括:1)包处理模块(10):该模块驻留于链路层,当收到同构网卡传来的数据包时,它将查询PASS表的规则对这些包的协议号、源IP地址、目标IP地址、源端口、目标端口进行匹配,并完成相应的处理动作,该相应动作分三类:丢弃此包、提交延时均衡模块中的包截取子模块(17)和提交内核TCP/IP协议栈处理模块(7)。2)PASS表(11):PASS表是一个用元组描述的规则集,它定义了当前包处理模块允许通过的数据包。在该表中,所有关于控制连接的数据包都允许通过,如:SYN包、SynAck包、ACK包、RST包等;所有已建立连接的数据包都将允许通过;其他的数据包除非系统管理员指定,否则都将默认丢弃掉。3)定时触发器(12):负责每隔一段时间触发规则管理模块对PASS表进行维护操作。4)规则管理模块(13):负责更新、删除PASS表中的规则项。当一个TCP连接建立或撤销时,TCP栈处理模块都将通知该模块,然后该模块将把进行适当的处理:当一条连接建立时,它把连接信息(如:源IP、源端口、 目标IP、目标端口)转化为规则添加到PASS表中;当一条连接撤销时,它将删除PASS表中对应的规则。3延时均衡模块
延时均衡模块6采用延时竞争的均衡技术加以实现,它利用TCP协议的三次握手机制完成客户端与负载最轻的节点的连接建立。当客户端,因为协议栈的自然响应延时不能反映系统所有的性能情况,所以为产生一个适当的延时值,需要收集所有设备的负载情况。本模块的结构示意图如图3所示,具体包括:1)定时触发器(14):负责触发负载统计模块对系统资源进行收集,同时触发包截取模块获取在包队列表中挂起的数据包。2)负载统计模块(15):负责收集各种系统资源的利用情况,它与各系统设备如CPU、磁盘、内存和网卡通信并收集各设备的资源利用率,并把这些利用率作为矢量(LOADCPU,LOADDisk,LOADMem,LOADNIC)传给延时计算模块。3)延时计算模块(16):根据负载统计模块传来的负载矢量计算适当的延时值,具体计算公式由如下函数提供。
Delay=f(Load)=RTTMAX×(Load/LoadMAX);
Load=LOADCPU×WeightCPU+LoadDisk×WeightDisk+LOADMem×WeightMem+
LoadNIC×WeightNIC;
其中,RTTMAX表示集群与最远的客户端通信时(即中间的Hop数最多)能达到的Round-Trip Time值;LoadMAX是负载峰值,该值与提供的具体服务有关;WeightCPU、WeightDisk、WeightMem和WeightNIC均采取归一化值,并且对不同应用或内容采用有不同的权值,并能和内容调度结合起来动态使用不同的定义,比如:
对静态网页,WeightCPU=WeightMem=WeightNIC=0,而WeightDisk=1;
对动态网页,WeightCPU=0.5,而WeightDisk=0.5,WeightMem=WeightNIC=0;
对视频服务,WeightCPU=WeightMem=WeightNIC=WeightDisk=0.25。4)包截取模块(17):包截取模块接收从包处理模块(8)传来的SYN包,并根据延时计算模块传来的延时值把该SYN包挂起到包队列中;另外,当收到定时触发器发来的触发信号时,它将遍历包队列表,判断每个包的延迟时间是否完毕,如果完毕则取回该数据报并传送给TCP栈处理模块(7)。5)包队列表(18):该表存放被延迟的SYN包,每个包都携带一个延时变量,当延迟时间结束后就被包截取模块重新取回。4TCP栈处理模块
TCP栈处理模块7采用安全增强型的TCP协议栈处理技术加以实现,它是经过修改的协议模块,加入了一些简单的安全机制。因为潜在的广播开销容易造成那些“落选”节点为响应三次握手而开辟过多的socket内存空间,所以集群系统容易遭受DoS攻击。在该模块中只需要在proc文件系统中打开syn-cookie技术。
本发明中各节点的硬件和操作系统配置可选用选用如表1所示配置来加以具体实现,但并不局限于这种配置。
具体实施时,外部公共网络联入集群服务器外端的共享介质集线器,同时用一根网线联入内部的交换机。然后对各节点进行相应的配置以启动同构网卡。CPU 内存主板操作系统 网络PIII866 256M内嵌两个100Mbps网 络接口卡Linux内核 2.4.5 100M交换 机
表1分布式自适应调度集群系统的软硬件配置
具体实施时,外部公共网络联入集群服务器外端的共享介质集线器,同时用一根网线联入内部的交换机。然后对各节点进行相应的配置以启动同构网卡。
结合附图,对整个系统的配置说明如下:1)PASS表
PASS表用来指定哪些包可以被本节点接收,初始化配置如表2所示,该表的含义是:接收所有标志位为SYN、SynAck、RST的数据包,接收所有从本节点发出去的包,并默认丢弃掉其他所有的包。
各字段解释如下:
协议号:分为TCP、UDP、ICMP、ANY,ANY指代任何协议;
标志位:分为SYN、SynAck、RST、ANY;
源IP/源端口:数据包的源IP地址/源端口;
目的IP/目的端口:数据包的目的IP地址/目的端口;
措施:指对匹配的数据包将存取何种措施,分为PASS(接收)和DROP(拒绝)两种。协议号标志位 源IP 源端口 目的IP 目的端口 措施TCP SYN ANY ANY 17.0.0.2 21 PASSTCP SynAck ANY ANY 17.0.0.2 21 PASSTCP RST ANY ANY 17.0.0.2 21 PASSANY ANY 17.0.0.2 ANY ANY ANY PASSANY ANY ANY ANY ANY ANY DROP
表2提供FTP服务的节点配置示例(设该节点IP为17.0.0.2)2)延时计算模块
延时计算模块需要根据服务类型及CPU、内存、网卡和磁盘的负载权值来计算相应的延时大小,对应关系如表3所示。 服务类型 WeightCPU WeightMem WeightNIC WeightDisk HTTP 0.5 0.5 0 1 FTP 0 0.5 0 0.5 RSTP 0.25 0.25 0.25 0.25
表3服务类型和负载权值的对应关系表