专利名称:从计算机发送到集群系统的数据包的分发方法和设备的制作方法
技术领域:
本发明涉及一种从计算机发送到集群系统的数据包的分发方法和设备。
这种数据包的一个例子是用户数据报协议。用户数据报协议(Userdatagram protocol,UDP)没有连接的概念。由于收到UDP包后不需要进行确认,因此它也被称为无连接协议。两台在使用UDP协议的网络上连接到一起的计算机将相互发送数据包而不会等待一个确认。那些没有到达其目的地的数据包就丢失了。由于UDP数据包仅包括一个不含复杂错误校正的小的报头,因此它通常在需要高数据传输率的场合中应用。
特别在可扩充的国际网络服务(scalable internetservices,SIS)中,经常使用UDP协议的数据连接。如果一台计算机向一个提供一些例如WWW、ftp等可扩充国际网络服务的集群系统发送UDP数据包,集群系统软件必须确认在集群内没有UDP包丢失。这是非常重要的,因为一些使用UDP协议的应用程序需要了解在前发送的数据包。
本发明的任务是提供一种能防止发往集群系统的UDP包丢失的设备和方法。
为了该目的,本发明提供一种数据包的分发方法,该数据包由计算机经由连接线路发送到集群系统。所述集群系统包括至少两个节点,其中至少两个第一节点包括用于处理所述数据包的服务,并且其中至少一个第二节点包括用于接收所述数据包的装置。所述数据包包括UDP包和发送该数据包的计算机的标识。该标识可为所述数据包的报头的一部分。该方法包括步骤a)由所述至少一个第二节点接收该数据包;b)提取所述数据包内的所述标识;c)检查是否包含相同标识的数据包已经被接收过并被转发到所述至少两个第一节点中之一;d)如果之前的检查结果是肯定的,那么转发该数据包至所述至少两个第一节点中之一;
e)如果之前的检查结果是否定的,那么在所述至少两个第一节点中选择一节点,并将该数据包转发到所选的节点。
通过该方法,所述至少一个第二节点接收的数据包总是被转发到先前已经从同一计算机接收过数据包的那个节点上。这样,属于相同连接的数据包总是被转发到正确的节点上。所说的连接被定义为带有发送数据包的特定计算机的标识的数据包。因而,由同一计算机发送的数据包被认为是属于相同的连接。如果对“是否先前已经接收过由特定计算机发送的数据包”的检查结果是否定的,那么就选择一个新的节点。该方法步骤会导致一个新的连接。同一个特定计算机再发送的数据包将被自动转发到该被选的节点上。采用不同的选择算法,可建立进入的UDP包的负载平衡。
本发明还提供一种从计算机发送到集群系统的数据包的分发设备。所述数据包包括UDP包和发送该数据包的计算机的标识。所述集群系统包括经由集群网络连接的至少两个节点。按照本发明,所述设备包括在所述至少两个节点中的至少两个第一节点中用于处理所述数据包的装置,也包括在所述至少两个节点中的至少一个第二节点上用于接收数据包的装置。按照本发明,所述设备还包括用于将接收的数据包转发到所述至少两个第一节点的装置,以及用于在所述至少两个第一节点中选择一数据包要被转发至的节点的装置。
在本发明的一个实施例中,用于转发数据包的装置和用于处理数据包的装置是在所述至少两个节点中的不同节点上实现。可选择地,用于转发的装置和用于选择的装置是在所述至少两个节点中不同的节点上实现。这允许有更好的负载平衡并在一个节点上发生硬件故障时具有更高的可靠性。
在本发明的另一个实施例中,被转发的数据包是所述至少一个第二节点接收的数据包中的UDP包。在本发明的这个实施例中,UDP包将被从所述至少一个第二节点接收的数据包中提取出来,然后转发到所述至少两个第一节点中的一个。
在本发明的又一个实施例中,本发明方法的步骤c)包括如下步骤检查是否收到的数据包包括一计算机的标识、而包含该标识的另一个数据包已经在一特定时间之前收到过。
在本发明的这个实施例中,如果在预定的间隔内,从同一计算机来的另一个数据包被同一计算机接收到,那么所述至少一个第二节点接收到的数据包被认为是属于一个特定连接的。换言之,如果在两个相继的带有相同标识(因而是来自于相同的计算机)的数据包之间有一个预定的间隔,那么这两个相继的数据包将被认为是属于相同的连接。只要可能的话,属于同一连接的数据包被转发至同一节点。如果该间隔大于预定的时间值,那么接收的数据包被认为是属于一个新的连接并且可被转发到不同的节点。
在本发明的另一个实施例中,所述至少一个第二节点包含第一表,其中,所述第一表包含表项。所述表项包含发送数据包的计算机的标识以及数据包被转发到的节点的节点标识。所述节点标识被分配给发送数据包的计算机的标识。如果所述至少一个第二节点接收到又一个数据包,那么所述至少一个第二节点通过查找第一表中的标识来进行检查。如果找到一个相同的标识,那么就认为它属于相同的连接,并且使用分配给该标识的节点标识来转发该数据包。如果在第一表中没有找到该标识,那么就认为所接收到的数据包属于一个新的连接,选择一个新的节点并且将该数据包转发到该新被选择的节点。
在本发明的又一个实施例中要生成第二表,其中,所述第二表包含至少一个第二节点中每一个接收的数据包的标识,还包含分配给所述数据包标识的节点标识。如果有超过一个的第二节点从计算机接收数据包,那么该实施例是尤其有用的。该第二表包含发送数据包的计算机的标识,也包含数据包被转发至的节点的标识,而不考虑是哪个第二节点接收的数据包。这样,即使属于相同连接的数据包被不同的第二节点接收到,也可以对现有的连接进行识别。
在本发明的另一个实施例中,如果在一个特定的时间内没有接收到任何其他带有相同标识的数据包,那么在第一或第二表中包含发送数据包的计算机的标识的表项将被删除。在删除之后,该数据包被认为属于一个新的连接。
在又一个实施例中,按照本发明的方法,步骤e)中的选择包括如下步骤测量所述至少一个第一节点中每一个节点的系统负载,并选择系统负载最小的节点。
另一种,步骤e)中的选择包括如下步骤选择所述至少一个第一节点中具有最少连接数的一个节点。
再一种,步骤e)中的选择包括如下步骤按照循环模式选择所述至少一个第一节点中的一个节点。
为新连接进行的节点选择对于负载平衡是非常有用的。
本发明的其他特征和优点将会在从属权利要求中明显表现。在下面详细解释的本发明是通过示例的方式说明的,但是不限于这些示例和附图。其中
图1是在一个集群系统内本发明的实施例;图2是实现本发明的集群系统的物理结构;图3是本发明一个不同的实施例;图4是在本发明的一个实施例中网关和数据库节点使用的表的例子;图5是在本发明的一个实施例中服务节点使用的表;图6是本发明方法的一个例子;图7是本发明方法的第二例子;图8是本发明方法的一个有用扩展;图9是本发明方法的另一个有用扩展。
图2示出了集群系统的结构,本发明在该集群系统内实现。集群1包括在网络17上连接的四个节点12、13、14、15。每一个节点都是一台独立的计算机,包括至少一个存储器和一个处理器单元。操作系统以及集群软件在每一个节点上运行。节点之间能经由专门的集群软件和网络17来进行通讯。集群1还包括连接到节点12、13、14的第二通讯网络16。该第二网络16将节点连接到一个存储数据的共享存储设备。存储设备18可包括例如一个RAID系统,该RAID系统包括一数据库或多个硬盘。它也可以包括其自己的处理器单元。
在本发明的实施例中,集群系统经由防火墙20连接到因特网21。防火墙可以是特定计算机上的一个软件模块或一个路由器或者硬件防火墙。它可包括数据包过滤、IP伪装(IP-masquerading)、欺骗(Spoofing)和类似技术。防火墙被连接到集群网络17。所有进入的因特网连接被防火墙20接收、过滤,然后发送到集群输入端11。
经由通讯输入端11和防火墙20,集群1可与作为因特网21一部分的客户端22通讯。例如,客户端22可向集群1请求一个WWW(world-wide web)页。该请求被防火墙20收到后转发到集群1,然后由集群内的一个节点进行处理。
图2所示的集群1的物理结构可用图1的设备所示出的集群1的逻辑结构来代替。在图1中,集群1还包括各种服务。这些服务可在不同的节点上运行,但是,在一个节点上也可以运行两种或更多的服务。也能将一种服务分布在不同节点上。在可用节点上,这些服务的管理和分布由集群软件或可扩充国际网络服务软件各自完成。
在本发明的这个例子中,集群1包括网关服务2。网关服务2在一个特定节点上实现,该节点分别接收所有来自于外部客户端22或221的进入请求。集群1还包括不同的服务模块4、5和6,用于处理不同的请求。服务模块4、5和6也可以在不同的物理节点上实现。例如,服务模块4和6是处理相同请求的相同服务模块。但是,它们在不同的节点上运行。模块5在一个第三节点上运行并处理不同的请求。从某种意义上讲,所有被实现的服务模块都是为了处理进入的UDP请求。
进一步,客户端包括一个数据库模块3。该数据库模块3用于管理工作,例如负载平衡、在不同节点上调度服务模块,以及其他管理工作。出于安全的原因,数据库模块在另外的节点上运行,以改善整个设备的稳定性。经由集群系统中节点间的连接网络,建立起了在所有模块间发送的连接和数据包。
在本发明的该实施例中,网关模块2经由因特网21接收来自于例如客户端22的UDP包RQ1。该UDP包RQ1包括客户端22的源地址和目标地址,在这种情况下是集群1的目标地址。源地址由客户端22的IP地址和端口地址确定。这两个部分一起组成了被该设备用于识别连接的唯一标识。目标地址由集群1的IP地址和集群端口地址给出。
现在,网关模块2检查先前是否已经接收过带有相同源地址的UDP包。也就是说,它在先前的包中查找所接收的相同的IP地址和端口号。如果找到了,那么该UDP包属于相同的连接。它将被转发到已接收过该先前的包的节点上的服务模块。
例如,客户端22的UDP包RQ1已经被网关模块2转发至节点4上的服务模块4。网关模块接收到的由客户端22发送的第二UDP包中包含相同的客户端22的IP地址。如果它还包括相同的端口号,那么它也将被网关模块2转发到节点4上的服务模块4。
现在,客户端221发送另一个新的UDP包RQ1’,并被网关模块2接收。由于网关模块2之前还没有接收过来自于客户端221的任何UDP包,因此网关模块2认为该接收到的包属于一个新的连接。因此,包RQ1’被转发到数据库模块3。
由数据库模块3决定将这个包转发到哪个节点进行处理。该决定由一个在数据库模块3内实现的调度算法完成。这里使用的调度算法是相当简单的。该数据库模块根据循环模式简单地选择下一个节点,在这个节点上运行有能处理该接收到的UDP包的服务。
但是,调度算法有很多可能性。对于数据库模块,一种可能性是去查找客户端221的IP地址,并将这个包转发到之前已经从相同的IP地址接收过数据包的节点上的服务模块。这被称为基于客户端的调度算法。另一种可能性是查询系统负载,并选择系统负载最小的那个节点。再一种可能性是对一个节点上已经存在的连接进行计数,并选择具有最少连接数的那个节点。还有一种可能性被叫做溢出(spillover),其中,一旦原节点上的系统负载超过一个预定的值,那么就选择一个替代节点。联合这里公开的调度方法或寻找其他的调度算法也都是可能的。通过使用一个特定的算法或在不同方法之间进行转换,能实现负载平衡。
如果被数据库选择的节点是可用的,那么UDP包被转发到那个节点。如果不可用,那么就对一个备用节点进行可用性检查。进一步地,数据库模块3将该节点的标识发送至网关模块2,从而告诉网关模块2将来自于相同连接的另外的UDP包转发到所选择的节点。
在本发明的该实施例中,来自于客户端的UDP包RQ1被转发到服务节点4上的服务模块4,而来自于客户端221的第一UDP包RQ1’被网关模块2首先转发到数据库模块3,然后被转发到节点6上的服务模块6。所有从客户端221再来的UDP包都将被网关模块2自动转发到节点6上的服务模块6。
不同连接的管理在网关模块2和数据库模块3中通过列表来实现,列表中包括目标地址和源地址。那些列表如图4所示。
左边的表LG由网关模块2使用。表LG包含五列、三行表项。第一列IPP包括源地址的端口号。第二列IPA存储有发送UDP包的来源的IP地址。在接下的两列DPP、DIP中,存储有接收UDP包的集群的端口号和IP地址。最后一列ID包括UDP包被转发到的节点地址。
在该例子中,网关模块2的表LG和数据库模块3的表LD都包含三个表项。两个表项具有端口号80,其中的一个表项具有客户端22的IP地址CL,而另一表项包括客户端221的IP地址CL1。一个表项表明,带有客户端221的端口号82和IP地址CL1的UDP包被网关模块2接收并转发到服务节点N5。
图5示出了服务模块4、5和6的项目表。表LN4、LN5、LN6也包括源端口号IPP、源IP地址IPA以及目标端口号DPP和目标IP地址DIP。它还包括时间标记TS。该时间标记是一个时间值,该节点在该时间已经接收了最后一个UDP包。在该例子中,节点N4的表LN4具有最早的时间标记,随后是节点N6的表LN6,然后是节点N5的表LN5。如果服务模块又接收了一个数据包,那么时间标记将要作更新。每个表还包括一个用于内部通讯连接的虚拟IP地址VIP和数据包所来自的网关列表LGA。
所有的表都要定期更新。如果接收到被认作是新连接的数据包,那么数据库和网关模块将增加对应标识的新表项。服务模块参考时间标记来决定何时关闭一个连接或认定该连接是非活动连接。这可通过将时间标记和实际时间作比较来实现。如果结果比一个预定值要大,那么它们将删除对应的表项并且向数据库和/或网关模块发送消息。那些模块也将删除对应的表项。
图3示出了本发明的另一个实施例。在该实施例中,集群1包括在两个不同节点上实现的网关模块2和2A。网关2从因特网21和客户端22收到一个新UDP包。由于先前没有从客户端22收到任何UDP包,因此在这个例子中网关2仅将包含在所接收UDP包内的客户端22的IP地址和端口号发送至数据库模块3。数据库模块3选择一个新的服务模块(在这个例子中是模块4),并向网关模块2返回服务模块4运行所在的节点标识。网关模块2将该UDP包转发到服务模块4以便进行数据处理。
在随后的时间,客户端22向集群1发送另一个UDP包。但是,由于网关2的故障,该UDP包被网关2A收到。由于之前网关2A没有从客户端22收到过任何UDP包,因此网关2A将该UDP包认做是一个新的连接。网关2A将地址转发到数据库模块3。但是,数据块模块3已经具有了客户端22的表项以及对应的端口号。因而,数据库模块3不选择服务模块,而是将服务模块4运行所在节点的节点标识返回到网关2A。然后网关2A将该UDP包转发到服务模块4或者对应的节点。在集群系统中,这允许建立不同的网关,并且不会有从同一客户端来的UDP包被转发到不同节点上处理的问题。
图6示出了本发明方法的一个实施例。在步骤1中,网关模块接收一个UDP包,并提取出源IP地址和源端口号。在步骤2中,网关模块检查是否存在由之前接收到的数据包建立的连接。这可通过查找其表中的表项来完成。如果已经接收过从相同源来的数据包,那么该UDP包通过PS_SV_Udp_Frame被直接转发到一个节点上的服务模块处理。
如果不是这种情况,那么在步骤3中,网关模块把该UDP包发送到数据库模块或数据库节点。如果接收到的数据包属于一个新的连接,或者该数据包到了一个新的网关上,那么在步骤2中由网关模块或网关节点完成的连接检查将失败。另一种造成失败的可能性是用户方更换了网关或者原网关发生故障并选择了一个新网关。进一步,也可能是网关模块已经向数据库模块转发过一个在先的包以调度,但是还没有收到从数据库模块返回来的答复。
在步骤4中,数据库会检查是否存在一个连接的表项。如果结果是肯定的,那么数据库将通过发送一个包含节点标识的DB_PS_Udp_Placement消息来更新网关模块,来自于相同连接的其它UDP包将被转发到该节点标识;然后,将该UDP包转发到所选择的服务节点。这是在步骤5中完成的。
如果数据库模块没有为一个连接找到表项,那么数据库模块在步骤6中按照调度算法为该连接选择一个新的服务节点。然后,所选节点的节点标识被转发到网关模块,以建立必要的连接表项。对于该连接的后续步骤来说,新的检查将会得到肯定的结果。在步骤7中,数据库模块还将转发该UDP包至服务节点,用DB_SV_UdpFrame消息表明这是一个新连接的第一个包。
在图8中示出了本发明的方法处理旧连接的扩展。处理UDP包的服务节点内的服务模块需要一种可能的实现来判断一个连接是否过时或仍然在活动。为了这个目的,使用了图5的服务节点表内的时间标记TS。在一个预定的连接时间终止且没有收到任何其他属于该连接的UDP包之后,服务模块通过删除那些在步骤1中被视为不活动的表项来清理项目表。如图8的步骤2所示,服务模块还转发一份在预定时间内不活动连接的表,数据库模块据此来进行项目表的清理。这可通过与表一起发送SV_DB_Udp_Con_Remove_List消息来完成。在步骤3中,数据库模块更新数据库表,并且利用DB_SV_Udp_Con_Remove_List消息将该表转发到网关模块。网关模块将删除对应的表项。现在,进入的包含相同IP地址和端口号的UDP包被认为是新的连接。
进一步,图9示出了在一个服务节点上处理服务失败的实现。如果一个服务节点上的服务模块发生故障了,例如如果服务节点瘫痪了,那么服务节点向数据库模块发送一个消息,从而在数据库模块中清理对应该服务的所有表项。这在步骤2中是通过发送SV_DB_Udp_Unbind消息来完成的。当收到该消息后,数据库模块从能处理该UDP包的可能节点的表中删除该节点的标识。清理完数据库模块表中所有的表项后,在步骤3中,数据库模块用DB_PS_Udp_Unbind消息将所有必要的信息转发到网关模块。网关模块将删除带有那个节点表项的所有连接表项。
在图7中示出了这种方法的一个例子。在步骤1中,网关模块收到一个新UDP包,并且由于网关模块没有任何与该UDP包内的标识相关联的表项,因此该UDP包被认作为一个新连接。因此,在步骤2中,网关模块转发该UDP包至数据库模块,其中,数据库模块根据调度算法选择一个节点来处理该UDP包。数据库模块将该UDP包转发到所选择的节点,并且该数据库模块还通过发送该节点的标识来更新网关模块。
在步骤4中,从相同源来的其他的UDP包被网关模块接收后自动转发到该服务节点。在步骤5中,网关节点发生故障。在步骤6中,底层的集群软件自动选择一个新网关。现在,这个新选择的网关从与步骤4相同的连接收到一个UDP包。但是,该新选择的网关没有任何关于该连接的表项。因此,在步骤8,它将该UDP包转发到数据库模块。数据库模块也检查它的连接,并查找到一个带有相同IP表项和相同端口号的表项。然后,它在步骤9中简单地向该新选择的网关模块返回适当的服务节点标识,并在步骤10中将该UDP包转发到那个节点。
现在,服务节点在一段时间内没有收到任何从特定IP地址和端口号来的UDP包,因此在步骤11中因超时而认为该连接是不活动的。在步骤12中,服务节点删除对应表项并将该被删除的表项转发到数据库模块。在步骤13中,数据库模块清理所有与那个连接对应的表项,并转发给网关一份相同的表。在清理完所有现存的连接后,服务节点通过告诉数据库模块不再使用该节点用作以后的调度而从集群上断开。
由于在数据库模块上的冗余信息,即使网关节点有故障了,也可能将进入的连接发送到相同的服务节点进行处理。实现一个备份数据库是有用的。该备份数据库也从所有的服务节点收集连接信息,这允许在数据库模块发生故障的情况下进行平稳的故障切换。当一个服务节点发生故障时,所有到该故障节点的现有连接也将失败。再发往那个特定节点的数据包将被作为新连接转发。数据库模块将清理其与该故障服务节点对应的连接项目表。在一个超时值之后进入的UDP包将被认为属于一个新的连接,该超时值可依服务或节点或集群范围而定。该方法和设备可在一个集群软件中或在可扩充国际网络服务中实现,以允许高效地分发和转发UDP包。
参考标记列表1集群系统2网关模块3数据库模块4、5、6服务模块12、13、14、15节点16、17网络11连接20防火墙21因特网22、221客户端RQ1、RQ2、RQ1’UDP包IDP、IDA源地址DPP、DIP目标地址ID节点标识LG网关表LD数据库表LN4、LN5、LN6节点表TS时间标记VIP虚拟IP地址LGA网关列表
权利要求
1.一种数据包的分发方法,该数据包由计算机经由连接线路发送到集群系统,所述集群系统包括至少两个节点,其中至少两个第一节点包括用于处理所述数据包的服务,并且其中至少一个第二节点包括用于接收所述数据包的装置,所述数据包包括UDP包和发送该数据包的计算机的标识;该方法包括步骤a)由所述至少一个第二节点接收该数据包;b)提取所述数据包内的所述标识;c)检查是否包含相同标识的数据包已经被接收过并被转发到所述至少两个第一节点中之一;d)如果之前的检查结果是肯定的,那么转发该数据包至所述至少两个第一节点中之一;e)如果之前的检查结果是否定的,在所述至少两个第一节点中选择一节点,并将该数据包转发到所选的节点。
2.根据权利要求1所述的方法,其中,被转发的数据包是所述至少一个第二节点接收的数据包中的UDP包。
3.根据权利要求1或2所述的方法,其中,步骤c)包括如下步骤检查在规定的时间范围之前是否有包含相同标识的数据包已经在前被接收过并被转发到所述至少两个第一节点中之一。
4.根据权利要求1~3中任一权利要求所述的方法,其中,所述至少一个第二节点包含第一表,所述第一表包含表项,所述表项包含发送数据包的计算机的标识以及接收数据包的至少两个第一节点中分配给所述标识的那个节点的节点标识。
5.根据权利要求4所述的方法,其中,所述第一表在步骤d)中用于识别数据包要被转发至的节点。
6.根据权利要求1~5中任一权利要求所述的方法,其中,生成第二表,所述第二表包含表项,所述表项包含至少一个第二节点中每一个接收的所述数据包的标识,所述表项还包含至少两个第一节点中分配给所述标识的节点的节点标识。
7.根据权利要求4~6中任一权利要求所述的方法,其中,如果在一个特定的时间范围内没有接收到带有所述标识的数据包,那么包含所述标识的表项将从第一和/或第二表中被删除。
8.根据权利要求1~7中任一权利要求所述的方法,其中,步骤e)中的选择包括如下步骤测量所述至少一个第一节点中每一个节点的系统负载,并选择系统负载最小的节点;或选择所述至少一个第一节点中具有最少连接数的一节点。
9.根据权利要求1~8中任一权利要求所述的方法,其中,所述计算机的标识包括计算机的IP地址和端口地址。
10.一种在集群系统中用于分发计算机发送来的数据包的设备,所述数据包包括UDP包和发送该数据包的计算机的标识;所述集群系统包括经由集群网络连接的至少两个节点;所述设备包括在所述至少两个节点中的至少两个第一节点中用于处理所述数据包的装置;所述设备还包括在所述至少两个节点中的至少一个第二节点上用于接收数据包的装置;所述设备还包括用于将接收的数据包转发到所述至少两个第一节点的装置;所述设备还包括用于在所述至少两个第一节点中选择一数据包要被转发至的节点的装置。
11.根据权利要求10所述的设备,其中,用于转发的装置和用于处理的装置是在所述至少两个节点中不同的节点上。
12.根据权利要求10或11所述的设备,其中,用于转发的装置和用于选择的装置是在所述至少两个节点中不同的节点上。
13.根据权利要求10~12中任一权利要求所述的设备,其中
全文摘要
一种数据包的分发方法和设备,该数据包由计算机经由连接发送到集群系统。该数据包包括UDP包和发送该数据包的计算机的标识。至少一个第二节点接收该数据包后,提取所述数据包内的标识。然后,检查是否包含相同标识的数据包已经被接收过并被转发到所述至少两个第一节点中之一。如果之前的检查结果是肯定的,那么转发该数据包至所述至少两个第一节点中之一。否则选择一新节点,并将该数据包转发到所选的节点以进行数据处理。这允许UDP连接可以高效地进行失败转移和负载平衡。
文档编号H04L29/08GK1754365SQ200380104365
公开日2006年3月29日 申请日期2003年11月25日 优先权日2002年11月27日
发明者H·坎南 申请人:富士通西门子电脑公司