虚拟机之间负载均衡的实现方法和装置制造方法【专利摘要】本发明公开了一种虚拟机之间负载均衡的实现方法和装置,该方法实现包括:在接收到数据包的情况下,根据多个虚拟服务器的负载状况,确定处理数据包的虚拟服务器;将数据包发送至确定的虚拟服务器。本发明通过将数据包发送至多个虚拟服务器进行任务处理,从而负载均衡地分配到多个虚拟机上,从而提高工作效率。【专利说明】虚拟机之间负载均衡的实现方法和装置【
技术领域:
】[0001]本发明涉及计算机硬件领域,特别地,涉及一种虚拟机之间负载均衡的实现方法和装置。【
背景技术:
】[0002]负载均衡(LoadBalancing)负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。[0003]图1是现有技术中负载平衡的应用场景的示意图,并且是在物理网络上布置的负载平衡器。但是在虚拟环境下,一个应用服务往往部署在不同的虚拟机服务器上面,这样,当多用户请求的时候,如果没有负载平衡,就会造成一些服务器负载过重,一些服务器负载过轻的情况。为了能达到虚拟机之间的负载平衡,本发明提出一种使用Iptables(应用层面和Netfilter通信并且控制Netfilter的操作模块)和Netfilter(内核当中的一些网络数据处理函数模块)的方式控制虚拟机之间负载的方法,以此来达到虚拟机之间的负载平衡。[0004]Iptables和Netfilter是Iinux环境下一种控制网络数据流的方法,Netfilter通过在内核协议栈上面的规则连上面注册相应的函数,来达到控制网络数据流的目的,而Iptables则是在应用层面来控制Netfilter工作的控制器。图2是现有技术中Netfilter的工作原理图。[0005]现有的市场上的负载平衡方案往往是在不同的服务器上面布置硬件的负载平衡器,但是在虚拟环境下,服务器是以虚拟机的形式在提供,硬件的负载平衡不能作为虚拟环境下的负载平衡解决方案。[0006]针对相关技术中虚拟环境下的负载不均衡,导致工作效率低下的问题,目前尚未提出有效的解决方案。【
发明内容】[0007]针对相关技术中虚拟环境下的负载不均衡,导致工作效率低下的问题,本发明提出一种虚拟机之间负载均衡的实现方法和装置,能够使负载均衡地分配到多个虚拟机上,从而提高工作效率。[0008]本发明的技术方案是这样实现的:[0009]根据本发明的一个方面,提供了一种虚拟机之间负载均衡的实现方法。[0010]该实现方法包括:[0011]在接收到数据包的情况下,根据多个虚拟服务器的负载状况,确定处理数据包的虚拟服务器;[0012]将数据包发送至确定的虚拟服务器。[0013]并且,该实现方法进一步包括:[0014]预先接收负载平衡命令,根据负载平衡命令确定多个虚拟服务器的IP地址,其中,命令中包括端口号以及多个虚拟服务器的目标IP地址。[0015]其中,将数据包发送至确定的虚拟服务器包括:[0016]根据负载平衡命令中包含的确定的虚拟服务器的目标IP地址,更改数据包中的目标IP地址,并根据更改后的目标IP地址发送数据包。[0017]并且,将数据包发送至确定的虚拟服务器包括:[0018]将数据包中端口号为负载平衡命令中端口号的数据发送至确定的虚拟服务器。[0019]优选地,在确定处理数据包的虚拟服务器时,对于属于相同会话的数据包,确定通过相同的虚拟服务器进行处理。[0020]根据本发明的一个方面,提供了一种虚拟机之间负载均衡的实现装置。[0021]该实现装置包括:[0022]确定模块,用于在接收到数据包的情况下,根据多个虚拟服务器的负载状况,确定处理数据包的虚拟服务器;[0023]发送模块,用于将数据包发送至确定的虚拟服务器。[0024]并且,该实现装置进一步包括:[0025]接收管理模块,用于预先接收负载平衡命令,确定模块还用于根据负载平衡命令确定多个虚拟服务器的IP地址,其中,命令中包括端口号以及多个虚拟服务器的目标IP地址。[0026]此外,在将数据包发送至确定的虚拟服务器时,发送模块用于根据负载平衡命令中包含的确定的虚拟服务器的目标IP地址,更改数据包中的目标IP地址,并根据更改后的目标IP地址发送数据包。[0027]进一步地,在将数据包发送至确定的虚拟服务器时,发送模块用于将数据包中端口号为负载平衡命令中端口号的数据发送至确定的虚拟服务器。[0028]优选地,在确定处理数据包的虚拟服务器时,对于属于相同会话的数据包,确定模块确定需要通过相同的虚拟服务器进行处理。[0029]本发明通过将数据包发送至多个虚拟服务器进行任务处理,从而负载均衡地分配到多个虚拟机上,从而提高工作效率。【专利附图】【附图说明】[0030]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0031]图1是现有技术中负载平衡的应用场景的示意图;[0032]图2是现有技术中Netfilter的工作原理图;[0033]图3是根据本发明实施例的实现方法的流程图;[0034]图4是根据本发明实施例的模块关系示意图;[0035]图5是现有技术中未使用负载平衡的方案时数据包的发送流程示意图;[0036]图6是使用根据本发明实施例的负载平衡的数据包的发送流程示意图;[0037]图7是根据本发明的实施例从应用层面下发负载平衡命令到内核层面处理负载平衡命令的过程示意图;[0038]图8是根据本发明实施例的实现装置的框图。【具体实施方式】[0039]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。[0040]根据本发明的一个实施例,提供了一种虚拟机之间负载均衡的实现方法。[0041]如图3所示,根据本发明实施例的实现方法包括:[0042]步骤S301,在接收到数据包的情况下,根据多个虚拟服务器的负载状况,确定处理数据包的虚拟服务器;[0043]步骤S303,将数据包发送至确定的虚拟服务器。[0044]并且,根据本发明实施例的实现方法可以预先接收负载平衡命令,根据负载平衡命令确定多个虚拟服务器的IP地址,其中,命令中包括端口号以及多个虚拟服务器的目标IP地址。[0045]其中,将数据包发送至确定的虚拟服务器可以根据负载平衡命令中包含的确定的虚拟服务器的目标IP地址,更改数据包中的目标IP地址,并根据更改后的目标IP地址发送数据包。[0046]并且,将数据包发送至确定的虚拟服务器可以将数据包中端口号为负载平衡命令中端口号的数据发送至确定的虚拟服务器。[0047]优选地,在确定处理数据包的虚拟服务器时,对于属于相同会话的数据包,确定通过相同的虚拟服务器进行处理。[0048]根据本发明的一个实施例,提供了一种虚拟机之间负载均衡的实现方法,图4是根据本发明实施例的模块关系示意图,其中,Iptables包括目标IP控制模块、目标端口控制模块、命令管理模块,而Netfilter包括IP地址负载平衡模块、解析命令模块。在实际应用中,可以通过Netfilter来实现上述确定模块,或者,可以通过Netfilter来实现上述的发送模块和确定模块。上述接收管理模块可以通过Iptables模块(也可以称为Iptables端)来实现。[0049]通过在管理端,也就是Iptables端(对应于上述接收管理模块)发送负载平衡命令,在命令中定义端口号(和应用绑定)、以及目标IP(数据接收的主机IP,IP的数量可以是两个或更多),然后,根据本发明实施例的虚拟机之间负载均衡的实现装置的确定模块和发送模块就会把数据包中端口号为命令中的端口号的数据平均分发到命令中的主机IP(即,多个虚拟服务器的IP)。图5和图6是根据本发明的方法下的数据包的流向示意图。图5是现有技术中没有使用负载平衡的方案时的数据包的发送流程示意图,包括:数据包(带有IP和接口port)以过虚拟网关全部分配到一个目标地址。[0050]图6是使用根据本发明实施例的负载平衡的方法的数据包的发送流程示意图,包括:数据包(带有IP和接口port)以过虚拟网关平均地分配到多个目标地址(图中只是示例性地示出两个)。[0051]图7是根据本发明的实施例从应用层面下发负载平衡命令到内核层面处理负载平衡命令的过程,包括:[0052]下发负载平衡命令;[0053]判断命令格式是否正确,如果不正确则结束;[0054]如果正确则使用Iptables命令管理模块解析以上命令;[0055]将解析结果发送给Netfilter;[0056]Netfilter根据命令内容处理数据包,例如,命令中目标地址有两个,那么就调用负载平衡模块把相应目标地址的数据包平均分配为两部分,并且把这些数据包的目的地址更改为命令中的目标地址;[0057]把更改完目的地址的数据包转发出去。[0058]本发明通过在虚拟环境下的网关上面部署负载平衡方案,解决了虚拟环境中负载不均的情况。通过在虚拟网关上面的Netfilter上面挂接负载平衡的相应函数,同时在Iptables上面挂接相应的操作函数就能完成虚拟环境下的负载平衡方案。[0059]目的地址返回的数据包不需要Netfilter来处理,这时候Netfilter只是一个路由转发的功能。[0060]根据本发明的一个实施例,提供了一种虚拟机之间负载均衡的实现装置。[0061]如图8所示,根据本发明实施例的实现装置包括:[0062]确定模块81,用于在接收到数据包的情况下,根据多个虚拟服务器的负载状况,确定处理数据包的虚拟服务器;[0063]发送模块82,用于将数据包发送至确定的虚拟服务器。[0064]并且,该实现装置进一步包括:[0065]接收管理模块(未示出),用于预先接收负载平衡命令,确定模块还用于根据负载平衡命令确定多个虚拟服务器的IP地址,其中,命令中包括端口号以及多个虚拟服务器的目标IP地址。[0066]此外,在将数据包发送至确定的虚拟服务器时,发送模块用于根据负载平衡命令中包含的确定的虚拟服务器的目标IP地址,更改数据包中的目标IP地址,并根据更改后的目标IP地址发送数据包。[0067]进一步地,在将数据包发送至确定的虚拟服务器时,发送模块用于将数据包中端口号为负载平衡命令中端口号的数据发送至确定的虚拟服务器。[0068]优选地,在确定处理数据包的虚拟服务器时,对于属于相同会话的数据包,确定模块确定需要通过相同的虚拟服务器进行处理。[0069]综上所述,借助于本发明的上述技术方案,通过将数据包发送至多个虚拟服务器进行任务处理,从而负载均衡地分配到多个虚拟机上,从而提高工作效率,本发明的技术方案将网关虚拟化,并且不改变原有网络拓扑结构,采用Netfilter方式实现负载平衡,并且使用Iptables应用层面控制内核Netfilter的执行,使得用户可以在不添加硬件负载平衡的情况下,在虚拟环境下实现数据包负载平衡。不但达到了负载平衡的效果,而且没有改变原有的网络拓扑关系,因而适合在虚拟环境下部署本方案。[0070]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。【权利要求】1.一种虚拟机之间负载均衡的实现方法,其特征在于,包括:在接收到数据包的情况下,根据多个虚拟服务器的负载状况,确定处理所述数据包的虚拟服务器;将所述数据包发送至确定的所述虚拟服务器。2.根据权利要求1所述的配置方法,其特征在于,进一步包括:预先接收负载平衡命令,根据所述负载平衡命令确定多个虚拟服务器的IP地址,其中,所述命令中包括端口号以及多个虚拟服务器的目标IP地址。3.根据权利要求2所述的配置方法,其特征在于,将所述数据包发送至确定的所述虚拟服务器包括:根据所述负载平衡命令中包含的确定的所述虚拟服务器的目标IP地址,更改所述数据包中的目标IP地址,并根据更改后的目标IP地址发送所述数据包。4.根据权利要求2所述的配置方法,其特征在于,将所述数据包发送至确定的所述虚拟服务器包括:将所述数据包中端口号为所述负载平衡命令中端口号的数据发送至确定的所述虚拟服务器。5.根据权利要求1所述的配置方法,其特征在于,在确定处理所述数据包的虚拟服务器时,对于属于相同会话的数据包,确定通过相同的虚拟服务器进行处理。6.一种虚拟机之间负载均衡的实现装置,其特征在于,包括:确定模块,用于在接收到数据包的情况下,根据多个虚拟服务器的负载状况,确定处理所述数据包的虚拟服务器;发送模块,用于将所述数据包发送至确定的所述虚拟服务器。7.根据权利要求6所述的配置装置,其特征在于,进一步包括:接收管理模块,用于预先接收负载平衡命令,所述确定模块还用于根据所述负载平衡命令确定多个虚拟服务器的IP地址,其中,所述命令中包括端口号以及多个虚拟服务器的目标IP地址。8.根据权利要求7所述的配置装置,其特征在于,在将所述数据包发送至确定的所述虚拟服务器时,所述发送模块用于根据所述负载平衡命令中包含的确定的所述虚拟服务器的目标IP地址,更改所述数据包中的目标IP地址,并根据更改后的目标IP地址发送所述数据包。9.根据权利要求7所述的配置装置,其特征在于,在将所述数据包发送至确定的所述虚拟服务器时,所述发送模块用于将所述数据包中端口号为所述负载平衡命令中端口号的数据发送至确定的所述虚拟服务器。10.根据权利要求6所述的配置装置,其特征在于,在确定处理所述数据包的虚拟服务器时,对于属于相同会话的数据包,所述确定模块确定需要通过相同的虚拟服务器进行处理。【文档编号】H04L29/08GK103701923SQ201310752551【公开日】2014年4月2日申请日期:2013年12月31日优先权日:2013年12月31日【发明者】王健杰,王军林,唐明,徐博,成书晟申请人:曙光云计算技术有限公司