一种实现集群负载均衡调度的方法及装置制造方法
【专利摘要】本发明公开了一种实现集群负载均衡调度的方法及装置,包括:计算集群收到请求包时,设定散列hash层级为0;根据请求包及hash层级,确定hash层级对应的服务器;判断获得的服务器是否满足调度条件,当服务器满足调度条件时,则将请求分发到所述服务器;当服务器不满足调度条件时,则hash层级增加1,继续确定hash层级对应的服务器,当hash层级超过最大值,则拒绝请求;其中,hash层级的取值范围为[0,N-1],N为服务器的总个数。本申请的技术方案降低了拒绝请求的概率,极大地提高集群资源的利用率。
【专利说明】一种实现集群负载均衡调度的方法及装置
【技术领域】
[0001] 本发明涉及计算机集群领域,尤指一种实现集群负载均衡调度的方法及装置。
【背景技术】
[0002] 在集群计算中经常使用各种负载均衡方法,解决系统的可伸缩性和透明性问题, 即通过负载均衡调度器将请求高效地分发到不同的服务器执行,使得由多台独立计算机组 成的集群系统成为一台虚拟服务器;客户端应用程序与集群系统交互时,就像与一台高性 能的服务器交互一样。
[0003] 目前,常见的负载均衡调度方法有轮叫调度、加权轮叫调度、最小连接调度、加权 最小连接调度、基于局部性的最少链接、带复制的基于局部性最少链接、目标地址散列调 度、源地址散列调度等,其中目标地址散列调度和源地址散列调度是比较常见的静态调度 方法,在实际应用中,结合这两种调度方法使用在防火墙集群中,从而保证整个系统有唯一 的出入口。
[0004] 源地址散列调度算法的基本原理是:根据请求的源IP地址,作为散列键从静态分 配的散列表中找出对应的服务器。此算法可以快速有效调度服务器,同时又能保证相同地 址的请求给调度相同的服务器。但是,这种方法的问题是,如果一个源地址所hash到的服 务器已超载,则返回空,即拒绝处理后续的请求,所以当单个服务器负载较大时会使得hash 到该服务器的频繁请求无法得到处理,这就降低了集群资源的利用率。
【发明内容】
[0005] 为了解决上述技术问题,本发明提供了一种实现集群负载均衡调度的方法及装 置,可以大大减少拒绝请求的概率,极大地提高集群资源的利用率。
[0006] 为了达到上述发明目的,本发明公开了一种实现集群负载均衡调度的方法,包 括:
[0007] 计算集群收到请求包时,设定散列hash层级为0 ;
[0008] 根据请求包及hash层级,确定hash层级对应的服务器;
[0009] 判断获得的服务器是否满足调度条件,当服务器满足调度条件时,则将请求分发 到所述服务器;当服务器不满足调度条件时,则hash层级增加1,继续确定hash层级对应 的服务器,当hash层级超过最大值,则拒绝请求;
[0010] 其中,hash层级的取值范围为[0,N-1],N为服务器的总个数。
[0011] 进一步地,在计算集群收到请求包时,设定hash层级为0之前,上述述方法还包 括:建立用于存储计算集群中的各个服务器信息与索引值的一一对应关系的ServerNode 表。
[0012] 进一步地,请求包包括:外部用户的IP地址。
[0013] 进一步地,确定hash层级对应的服务器,包括:
[0014] 通过下面的公式得到服务器的索引值:
[0015] (ip_addr*265443576lUL) % (N - hash 层级);其中,ip_addr 是对应于 IP 地址的 整数,%是取模运算。
[0016] 根据服务器的索引值,在ServerNode表中找到hash层级对应的服务器。
[0017] 进一步地,调度条件为:服务器存活、权值不为0且服务器的连接数小于2倍的权 值。
[0018] 本发明还公开了一种实现集群负载均衡调度的装置,包括:设置模块、映射模块、 判断模块和分发模块;其中,
[0019] 设置模块,用于当外部用户向计算集群发送请求包时,设定散列hash层级为0 ;
[0020] 映射模块,与设置模块相连,用于根据请求包及hash层级,确定hash层级对应的 服务器;
[0021] 判断模块,用于判断获得的服务器是否满足调度条件;
[0022] 分发模块,用于当服务器满足调度条件时,则将请求分发到该服务器;
[0023] 所述映射模块,还用于当服务器不满足调度条件时,则hash层级增加1,继续确定 hash层级对应的服务器,当hash层级超过最大值,则拒绝请求;
[0024] 其中,hash层级的取值范围为[0,N_1],N为服务器的总个数。
[0025] 进一步地,上述装置还包括存储模块,与设置模块相连,用于:在计算集群收到请 求包时,设定hash层级为0之前,建立用于存储计算集群中的各个服务器信息与索引值的 --对应关系的ServerNode表。
[0026] 进一步地,请求包包括:外部用户的IP地址。
[0027] 进一步地,映射模块具体用于:
[0028] 通过下面的公式得到所述服务器的索引值:
[0029] (ip_addr*265443576lUL) % (N - hash 层级);其中,ip_addr 是对应于所述 IP 地 址的整数,%是取模运算。
[0030] 根据所述服务器的索引值,在ServerNode表中找到所述hash层级对应的服务器。
[0031] 进一步地,调度条件为:服务器存活、权值不为0且服务器的连接数小于2倍的权 值。
[0032] 本申请技术方案包括:当外部用户向计算集群发送请求包时,设定散列hash层级 为〇 ;根据请求包及hash层级,确定hash层级对应的服务器;判断获得的服务器是否满足 调度条件,当服务器满足调度条件时,则将请求分发到所述服务器;当服务器不满足调度条 件时,则hash层级增加1,继续确定hash层级对应的服务器,当hash层级超过最大值,则拒 绝请求;其中,hash层级的取值范围为[0,N_1],N为服务器的总个数。本申请的技术方案 降低了拒绝请求的概率,极大地提高了集群资源的利用率。
【专利附图】
【附图说明】
[0033] 此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发 明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中: [0034] 图1为本发明实现集群负载均衡调度的方法的流程图;
[0035] 图2为本发明实现集群负载均衡调度的方法的实施例的流程图;
[0036] 图3为本发明实现集群负载均衡调度的装置的结构示意图。
【具体实施方式】
[0037] 本发明对已有的源地址散列散列调度算法进行了改进,引入层级参数hash层级 (level),用于指定hash层级。当level为0时就是源地址散列调度所使用的hash函数, 如果level = 0时找不到满足要求服务器则增加一个level级别继续找,如此瀑布式增加 level直到找到满足要求的服务器,该方法只有当level达到服务器数量N时才会宣布找不 到满足要求的服务器,而level达到N值时,表明已经遍历了所有服务器,即所有服务器都 是不满足要求的服务器。
[0038] 下面结合附图及具体实施例对本发明进行详细说明。
[0039] 图1为本发明实现集群负载均衡调度的方法的流程图,如图1所示,包括:
[0040] 步骤101,计算集群收到请求包时,设定散列hash层级为0。
[0041] 本步骤中的请求包来自外部网络某个用户向计算集群发送的,请求包中包括源地 址IP即外部用户使用的IP地址。
[0042] 在本步骤之前,本发明方法还包括:建立用于存储所述计算集群中的各个服务器 信息与索引值的--对应关系的ServerNode表。
[0043] 其中服务器信息包括:服务器的IP,名称,内存,硬盘。关于如何建立ServerNode 表属于本领域技术人员熟知的公知常识,在此不再赘述。
[0044] 需要说明的是,ServerNode表包含了所有服务器及其信息,且ServerNode表中的 每一个索引值都与ServerNode表中一个服务器对应,即找到索引值,就可以获得与之对应 的服务器以及该服务器的信息。
[0045] 上述请求包包括:外部用户的IP地址。
[0046] 步骤102,根据请求包及hash层级,确定hash层级对应的服务器。
[0047] 具体包括:
[0048] 首先,通过下面的公式得到hash层级对应的服务器的索引值:
[0049] (ip_addr*265443576lUL) % (N - hash 层级);其中,ip_addr 是对应于所述 IP 地 址的整数,%是取模运算。
[0050] 其次,根据该服务器的索引值,在ServerNode表中找到该hash层级对应的服务 器。
[0051] 需要说明的是,通过上述公式找到服务器的索引值,类似于现有技术中素数乘法 hash函数,不同之处,也是本发明的核心所在:第一个不同是,hash掩码,即N-hash层级, 不是固定的,而是根据hash层级变化;第二个不同是,获取hash层级对应的服务器索引 值不是用与运算而是用取模运算,使得运算更加的简便,这就大大节省了运算时间。另外, 2654435761UL是一个全局固定的值,是2到2~32 (4294967296)间接近于黄金分割的素数, 2654435761/4294967296 = 0. 618033987,这样保证了不同的源地址会尽量分配到不同的 服务器中。
[0052] 可以通过以下方法得到对应的ip_addr :不足三位的域加0补足三位。
[0053] 举例说明,当IP地址为192. 168. 0. 1时,因为前两个域均为三位,所以只需补足 后两个域即可,即第三个域补充两个〇变成〇〇〇,第四个域补充两个〇变成001,上述IP 地址转化后得到ip_addr = 192168000001。如共1000台服务器即N = 1000, IP地址为 192. 168. 0· 1 时,ip_addr = 192168000001,当 hash 层级=0 时,N-hash 层级=1000 - Ο =1000,则(ip_addr*2654435761UL) % (Ν - hash 层级)=192168000001*2654435761% 1000 = 761,即hash到第761台服务器,当hash层级为1时,N一hash层级=1000 - 1 = 999,则(ip_addr*2654435761UL) % (N - hash 层级)=192168000001*2654435761% 999 =763,即hash到第763台服务器。
[0054] 步骤103,判断获得的服务器是否满足调度条件,当服务器满足调度条件时,则将 请求分发到所述服务器;当服务器不满足调度条件时,则hash层级增加1,返回步骤102,当 hash层级超过最大值,则拒绝请求。
[0055] 本步骤中,调度条件为:服务器存活、权值不为0且服务器的连接数小于2倍的权 值。
[0056] 如果服务器的连接数大于等于2倍的权值时,则表明服务器已超载。
[0057] 本步骤中需要说明的是,可以使用现有技术中的心跳检测技术判断当前服务器是 否存活,此处不再赘述。服务器的权值与连接数保存在调度器中,权值指保存在调度器可人 工编辑的各服务器额定的连接数,可以人工设置,并且在调度时可以实时的更新各个服务 器的连接数,连接数是指与服务器相连的外部用户的个数,可以实时修改。采用现有技术中 源地址散列调度算法中的方法获得及更新各个服务器的权值与连接数。
[0058] 上述方法中,hash层级的取值范围为[0, N-l],N为服务器的总个数。
[0059] 本发明方法只有当level达到服务器数量N时才会宣布找不到满足要求的服务 器,而level达到N (服务器的总的个数)值时,表明已经遍历了所有服务器,即所有服务器 都是不满足要求的服务器,因此该方法是一个最优的调度算法,同时该算法能继承源地址 散列调度算法的优点,即具有调度局部性,在服务器的负载基本平衡情况下,将相同IP地 址的请求调度到同一台服务器,提高了各台服务器的访问局部性和主存命中率,从而提高 了整个集群系统的处理能力。
[0060] 图2为本发明实现集群负载均衡调度的方法的实施例的流程图,如图2所示,包括 以下步骤:
[0061] 步骤201,计算集群收到请求包时,设定散列hash层级为0。
[0062] 步骤202,根据请求包及hash层级,确定hash层级对应的服务器。
[0063] 本步骤与步骤102相同,在此不再赘述。
[0064] 步骤203,判断服务器是否满足调度条件,若满足调度条件,转入步骤204,若服务 器不满足调度条件,则转入步骤205。
[0065] 本步骤中的调度条件与步骤103中的要求相同。
[0066] 步骤204,将请求分发到服务器。至此分发任务完成,结束。
[0067] 步骤205, hash层级增加1。转入步骤206。
[0068] 步骤206,判断hash层级是否超过最大值,若超过最大值,则转入步骤207 ;若未超 过最大值,则返回步骤202。
[0069] 上述hash层级的取值范围为[0, N-l],N为服务器的总个数。
[0070] 步骤207,拒绝请求。
[0071] 图3为本发明实现集群负载均衡调度的装置的结构示意图,如3所示,包括:设置 模块、映射模块、判断模块和分发模块。其中,
[0072] 设置模块,用于计算集群收到请求包时,设定散列hash层级为0。
[0073] 设置模块接收来自外部网络某个用户向计算集群发送的请求包,请求包中包括源 地址IP即外部用户使用的IP地址,设置模块将IP地址以及hash层级发送给映射模块。
[0074] 映射模块,与设置模块相连,用于根据请求包及hash层级,确定hash层级对应的 服务器。
[0075] 进一步地,上述映射模块具体用于:
[0076] 通过下面的公式得到上述服务器的索引值:
[0077] (ip_addr*265443576lUL) % (N - hash 层级);其中,ip_addr 是对应于所述 IP 地 址的整数,%是取模运算。
[0078] 根据所述服务器的索引值,在ServerNode表中找到上述hash层级对应的服务器。
[0079] 需要说明的是,通过上述公式找到服务器的索引值,类似于现有技术中素数乘法 hash函数,不同之处,也是本发明的核心所在:第一个不同是,hash掩码,即N-hash层级, 不是固定的,而是根据hash层级变化;第二个不同是,获取hash层级对应的服务器索引 值不是用与运算而是用取模运算,使得运算更加的渐变,这就大大节省了运算时间。另外, 2654435761UL是一个全局固定的值,是2到2~32 (4294967296)间接近于黄金分割的素数, 2654435761/4294967296 = 0. 618033987,这样保证了不同的源地址会尽量分配到不同的 服务器中。
[0080] 可以通过以下方法得到对应的ip_addr :不足三位的域加0补足三位。
[0081] 举例说明,当IP地址为192. 168. 0. 1时,因为前两个域均为三位,所以只需补足 后两个域即可,即第三个域补充两个〇变成〇〇〇,第四个域补充两个〇变成001,上述IP 地址转化后得到ip_addr = 192168000001。如共1000台服务器即N = 1000, IP地址为 192. 168. 0· 1 时,ip_addr = 192168000001,当 hash 层级=0 时,N-hash 层级=1000 - 0 =1000,则(ip_addr*2654435761UL) % (N - hash 层级)=192168000001*2654435761% 1000 = 761,即hash到第761台服务器,当hash层级为1时,N一hash层级=1000 - 1 = 9",则(ip_addr*265443576lUL)% (N - hash 层级)=192168〇00001*2654435761%"9 =763,即hash到第763台服务器。
[0082] 判断模块,用于判断获得的服务器是否满足调度条件。
[0083] 上述调度条件包括:该服务器存活、权值不为0且所述服务器的连接数小于2倍的 权值。
[0084] 如果服务器的连接数大于等于2倍的权值时,则表明服务器已超载。
[0085] 需要说明的是,可以使用现有技术中的心跳检测技术判断当前服务器是否存活, 此处不再赘述。服务器的权值与连接数保存在调度器中,权值指保存在调度器可人工编辑 的各服务器额定的连接数,并且在调度时可以实时的更新各个服务器的连接数,连接数是 指与服务器相连的外部用户的个数。采用现有技术中源地址散列调度算法中的方法获得及 更新各个服务器的权值与连接数。
[0086] 分发模块,用于当服务器满足调度条件时,则将请求分发到该服务器。
[0087] 上述映射模块,还用于当服务器不满足调度条件时,则hash层级增加1,继续确定 hash层对应的服务器,当hash层级超过最大值,则拒绝请求。
[0088] 上述装置中,hash层级的取值范围为[0,N_1],N为服务器的总个数。
[0089] 上述装置还包括:存储模块,与设置模块相连,用于:在计算集群收到请求包时, 设定hash层级为0之前,建立用于存储所述计算集群中的各个服务器信息与索引值的一一 对应关系的ServerNode表。
[0090] 其中服务器信息包括:服务器的IP,名称,内存,硬盘。关于如何建立ServerNode 表属于本领域技术人员熟知的公知常识,在此不再赘述。
[0091] 需要说明的是,ServerNode表包含了所有服务器及其信息,且ServerNode表中的 每一个索引值都与ServerNode表中一个服务器对应,即找到索引值,就可以获得与之对应 的服务器以及该服务器的信息。
[0092] 本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令 相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘 等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应 地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的 形式实现。本申请不限制于任何特定形式的硬件和软件的结合。
[〇〇93] 以上所述,仅为本发明的较佳实例而已,并非用于限定本发明的保护范围。凡在本 发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范 围之内。
【权利要求】
1. 一种实现集群负载均衡调度的方法,其特征在于,包括: 计算集群收到请求包时,设定散列hash层级为0 ; 根据请求包及hash层级,确定hash层级对应的服务器; 判断获得的服务器是否满足调度条件,当服务器满足调度条件时,则将请求分发到所 述服务器;当服务器不满足调度条件时,则hash层级增加1,继续确定hash层级对应的服 务器,当hash层级超过最大值,则拒绝请求; 其中,hash层级的取值范围为[0, N-l],N为服务器的总个数。
2. 根据权利要求1所述的方法,其特征在于,在所述计算集群收到请求包时,设定hash 层级为〇之前,所述方法还包括:建立用于存储所述计算集群中的各个服务器信息与索引 值的--对应关系的ServerNode表。
3. 根据权利要求1或2所述的方法,其特征在于,所述请求包包括:外部用户的IP地 址。
4. 根据权利要求3所述的方法,其特征在于,所述确定hash层级对应的服务器,包括: 通过下面的公式得到所述服务器的索引值: (ip_addr*2654435761UL)% (N - hash 层级);其中,ip_addr 是对应于所述 IP 地址的 整数,%是取模运算; 根据所述服务器的索引值,在ServerNode表中找到所述hash层级对应的服务器。
5. 根据权利要求1或2所述的方法,其特征在于,所述调度条件为:所述服务器存活、 权值不为〇且所述服务器的连接数小于2倍的权值。
6. -种实现集群负载均衡调度的装置,其特征在于,包括:设置模块、映射模块、判断 模块和分发模块;其中 设置模块,用于当外部用户向计算集群发送请求包时,设定散列hash层级为0 ; 映射模块,与设置模块相连,用于根据请求包及hash层级,确定hash层级对应的服务 器; 判断模块,用于判断获得的服务器是否满足调度条件; 分发模块,用于当服务器满足调度条件时,则将请求分发到所述服务器; 所述映射模块,还用于当服务器不满足调度条件时,则hash层级增加 1,继续确定hash 层级对应的服务器,当hash层级超过最大值,则拒绝请求; 其中,hash层级的取值范围为[0, N-l],N为服务器的总个数。
7. 根据权利要求6所述的装置,其特征在于,所述装置还包括存储模块,与设置模块相 连,用于:在所述计算集群收到请求包时,设定hash层级为0之前,建立用于存储所述计算 集群中的各个服务器信息与索引值的--对应关系的ServerNode表。
8. 根据权利要求6或7所述的装置,其特征在于,所述请求包包括:外部用户的IP地 址。
9. 根据权利要求8所述的装置,其特征在于,所述映射模块具体用于: 通过下面的公式得到所述服务器的索引值: (ip_addr*2654435761UL)% (N - hash 层级);其中,ip_addr 是对应于所述 IP 地址的 整数,%是取模运算; 根据所述服务器的索引值,在ServerNode表中找到所述hash层级对应的服务器。
10.根据权利要求6或7所述的装置,其特征在于,所述调度条件为:所述服务器存活、 权值不为〇且所述服务器的连接数小于2倍的权值。
【文档编号】H04L12/803GK104104611SQ201410327814
【公开日】2014年10月15日 申请日期:2014年7月10日 优先权日:2014年7月10日
【发明者】辛永欣 申请人:浪潮(北京)电子信息产业有限公司