发明内容
本发明的目的在于提供一种虚拟机集群的负载均衡方法、服务器及系统,能够无需在虚拟机内做额外配置,提高了系统的安全性。本发明提供了如下方案:
一种虚拟机集群的负载均衡方法,应用在已创建至少一个虚拟机的服务器中,所述方法包括:
服务器中的代理单元拦截客户端发送的ARP请求;其中,所述代理单元设置在虚拟机的虚拟网卡与服务器物理网卡之间;所述代理单元为每个虚拟机配置一个虚拟IP地址,所述虚拟IP地址与负载均衡器的IP地址相同;
被负载均衡器选定的虚拟机接收所述负载均衡器发来的第二请求报文;所述第二请求报文是所述负载均衡器接收到所述客户端发送的所述第一请求报文后,将所述第一请求报文的目的MAC地址由所述负载均衡器的MAC地址转换为所述选定的虚拟机的MAC地址后生成的,所述第一请求报文是客户端根据负载均衡器收到所述ARP请求后返回的ARP响应中的MAC地址发送的;
所述选定的虚拟机根据所述第二请求报文生成应答报文,所述应答报文的源地址为所述虚拟IP地址;
所述代理单元将所述应答报文发送至所述客户端。
本发明还提供了一种服务器,所述服务器包括:
代理单元和虚拟机;
所述代理单元设置在虚拟机的虚拟网卡与服务器物理网卡之间,用于拦截客户端发送的ARP请求,以及为每个虚拟机配置一个虚拟IP地址,所述虚拟IP地址与负载均衡器的IP地址相同;
所述虚拟机,用于根据接收的负载均衡器发来的第二请求报文生成应答报文,所述应答报文的源地址为所述虚拟IP地址;所述第二请求报文是所述负载均衡器将接收的第一请求报文的目的MAC地址由所述负载均衡器的MAC地址转换为选定的所述虚拟机的MAC地址后生成的;其中,所述第一请求报文是客户端根据负载均衡器对应所述ARP请求返回的ARP响应中的MAC地址发送的;
所述代理单元,还用于将所述虚拟机生成的所述应答报文发送至所述客户端。
本发明还提供了一种虚拟机集群系统,所述系统包括:
负载均衡器和服务器;
所述负载均衡器,用于接收客户端发送的第一请求报文,并将所述第一请求报文的目的MAC地址由所述负载均衡器的MAC地址转换为所述服务器选定的虚拟机的MAC地址后,生成第二请求报文;其中,所述第一请求报文是客户端根据负载均衡器收到ARP请求后返回的ARP响应中的MAC地址发送的;
所述服务器包括:代理单元和虚拟机;
所述代理单元设置在虚拟机的虚拟网卡与服务器物理网卡之间,用于拦截客户端发送的ARP请求,以及为每个虚拟机配置一个虚拟IP地址,所述虚拟IP地址与负载均衡器的IP地址相同;
所述虚拟机,用于根据接收的负载均衡器发来的第二请求报文生成应答报文,所述应答报文的源地址为所述虚拟IP地址;
所述代理单元,还用于将所述虚拟机生成的所述应答报文发送至所述客户端。
根据本发明提供的具体实施例,本发明公开了以下技术效果:
本发明中通过设置于虚拟机的虚拟网卡与服务器物理网卡之间的代理单元拦截客户端发送的ARP请求;并通过该代理单元为每个虚拟机配置与负载均衡器的IP地址相同的虚拟IP地址,解决了现有技术中需要进入虚拟机内设置ARP忽略,在虚拟机内分配虚拟IP地址,从而导致系统不安全的问题。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,本发明所有实施例中的负载均衡器和虚拟机都处在同一子网范围内,而且本发明中所提到的客户端是指与负载均衡器和虚拟机处在同一个子网范围内的用于接收用户发送的第一请求报文并发送至负载均衡器的设备。
本发明实施例1提供了一种虚拟机集群的负载均衡方法,应用在服务器中,参见图1,该方法包括以下步骤:
S1、服务器中的代理单元拦截客户端发送的ARP请求;其中,所述代理单元设置在虚拟机的虚拟网卡与服务器物理网卡之间;所述代理单元为每个虚拟机配置一个虚拟IP地址,所述虚拟IP地址与负载均衡器的IP地址相同。
在本发明的具体实施例中,可先为虚拟机配置虚拟网卡,然后通过设置在虚拟机的虚拟网卡与服务器物理网卡之间的代理单元为该虚拟网卡分配虚拟IP地址的形式从虚拟机外为虚拟机配置与负载均衡器相同的虚拟IP地址。
客户端在发送一个目的地址为虚拟IP地址的请求报文前,会先发出ARP请求,询问该虚拟IP对应的MAC地址。为避免后台的虚拟机对此应答,本实施例通过在上述的设置在虚拟机的虚拟网卡与服务器物理网卡之间的代理单元中设置ARP忽略将此ARP请求过滤掉。这样虚拟机就无法获知该ARP请求,从而无法作出应答,仅有负载均衡服务器回复该ARP。于是,客户端便会将请求报文发送给负载均衡器。此时,请求报文的目的IP是负载均衡器的IP地址(即虚拟机的虚拟IP),目的MAC地址是负载均衡器的MAC地址。
具体的可将代理单元设置在虚拟机外的虚拟机监视器或虚拟机监视器与服务器物理网卡之间。
S2、被负载均衡器选定的虚拟机接收所述负载均衡器发来的第二请求报文;所述第二请求报文是所述负载均衡器接收到所述客户端发送的所述第一请求报文后,将所述第一请求报文的目的MAC地址由所述负载均衡器的MAC地址转换为所述选定的虚拟机的MAC地址后生成的,所述第一请求报文是客户端根据负载均衡器收到所述ARP请求后返回的ARP响应中的MAC地址发送的。
如之前所述,客户端根据负载均衡器收到所述ARP请求后返回的ARP响应中的MAC地址发送第一请求报文至负载均衡器。
在负载均衡器中保存有后端所有虚拟机的MAC地址。因此,在接收到该第一请求报文后,负载均衡器会从后端选定一个虚拟机,并将该第一请求报文的MAC地址修改为该选定的虚拟机的MAC地址,生成第二请求报文发送至该虚拟机。
在具体的选择过程中,负载均衡器可以按照一定的规则选定虚拟机,比如根据后端虚拟机的负载情况。在本发明中,不对具体的选定过程做限制。
在本发明的具体实施例中,为保证请求报文被发送准确,负载均衡器还会根据后端虚拟机的变化情况对保存在其中的虚拟机的真实IP地址和MAC地址进行更新,以确保其保存的虚拟机的MAC地址与后端的虚拟机相对应。
可选地,为使负载均衡器维护后端虚拟机的状态信息,如某一具体的虚拟机是否可以提供服务或其对应的MAC地址是否变化等等,在本发明的具体实施例中,后端的虚拟机还配置拥有一个所述服务器所属内网中唯一的真实IP地址,用以与所述负载均衡器周期性地交互心跳消息,从而使负载均衡器能够更新上述信息。
S3、所述选定的虚拟机根据所述第二请求报文生成应答报文,所述应答报文的源地址为所述虚拟IP地址。
因为虚拟机都设置了虚拟IP地址,因此在接收到目的地址为虚拟IP地址的报文时会直接进行处理,具体的处理过程与第二请求报文请求的业务相关,例如查询数据库,请求计算一组数据等等,在这里不进行限定,并生成应答报文。根据报文的生成规则,该应答报文的源地址为虚拟IP地址。
S4、所述代理单元将所述应答报文发送至所述客户端。
因为应答报文的源地址为虚拟IP地址,即与客户端发送的第一请求报文的目的地址相同,因此该应答报文可被虚拟机发送至代理单元后被直接发送至客户端。
综上所述,本发明通过设置于虚拟机的虚拟网卡与服务器物理网卡之间的代理单元拦截客户端发送的ARP请求,并通过该代理单元为每个虚拟机配置与负载均衡器的IP地址相同的虚拟IP地址,在实现虚拟机集群的负载均衡的情况下,无需在虚拟机内部分配虚拟IP地址或修改内部数据以设置ARP请求,解决了现有技术中需要进入虚拟机内做额外配置,从而导致系统不安全的问题,提高了系统的安全性。
本发明实施例2还提供了一种服务器,参见图2,所述服务器包括:
代理单元21和虚拟机22。
其中,代理单元21设置在虚拟机的虚拟网卡与服务器物理网卡之间,用于拦截客户端发送的ARP请求,以及为每个虚拟机配置一个虚拟IP地址,所述虚拟IP地址与负载均衡器的IP地址相同。
在本发明的具体实施例中,可先为虚拟机配置虚拟网卡,然后通过设置在虚拟机的虚拟网卡与服务器物理网卡之间的代理单元21为该虚拟网卡分配虚拟IP地址,以从虚拟机外为虚拟机配置与负载均衡器相同的虚拟IP地址。
在本发明的实施例中,代理单元21包括防火墙或虚拟机监视器。具体的可在虚拟机监视器中运行有ARP忽略功能的proxy程序来实现。通过在代理单元21中设置ARP忽略,在客户端发出目的地址为虚拟IP地址的请求报文的ARP请求,询问该请求报文的MAC地址时,将发送至虚拟机22的ARP请求拦截,这样虚拟机22就无法响应该ARP请求。在虚拟机集群系统中,只有负载均衡器进行响应,因此客户端会将该请求报文发送至负载均衡器。该请求报文的目的地址为该负载均衡器的虚拟IP地址,MAC地址为负载均衡器的MAC地址。
值得注意的是,该代理单元21设置在虚拟机22的虚拟网卡与服务器物理网卡之间,即是设置在虚拟机22之外的,这样就避免了进入虚拟机22内部做设置。
所述虚拟机22,用于根据接收的负载均衡器发来的第二请求报文生成应答报文,所述应答报文的源地址为所述虚拟IP地址;所述第二请求报文是所述负载均衡器将接收的第一请求报文的目的MAC地址由所述负载均衡器的MAC地址转换为选定的所述虚拟机的MAC地址后生成的;其中,所述第一请求报文是客户端根据负载均衡器对应所述ARP请求返回的ARP响应中的MAC地址发送的。
如之前所述,客户端根据负载均衡器收到所述ARP请求后返回的ARP响应中的MAC地址发送第一请求报文至负载均衡器。
在负载均衡器中保存有后端所有虚拟机的MAC地址。因此,在接收到该第一请求报文后,负载均衡器会从后端选定一个虚拟机,并将该第一请求报文的MAC地址修改为该选定的虚拟机的MAC地址,生成第二请求报文发送至该虚拟机。
在具体的选择过程中,负载均衡器可以按照一定的规则选定虚拟机,比如根据后端虚拟机的负载情况。在本发明中,不对具体的选定过程做限制。
在本发明的具体实施例中,为保证请求报文被发送准确,负载均衡器还会根据后端虚拟机的变化情况,对保存在其中的虚拟机的真实IP地址和MAC地址进行更新,以确保其保存的虚拟机的MAC地址与后端的虚拟机相对应。
可选地,为使负载均衡器维护后端虚拟机的状态信息,如某一具体的虚拟机是否可以提供服务或其对应的MAC地址是否变化等等,在本发明的具体实施例中,后端的虚拟机还配置拥有一个所述服务器所属内网中唯一的真实IP地址,用以与所述负载均衡器周期性地交互心跳消息。
代理单元21,还用于将虚拟机22生成的应答报文发送至客户端。
生成的应答报文的源地址与客户端发送的第一请求报文的目的地址相同,因此该应答报文可通过代理单元21被直接发送至客户端。对于在集群外的客户端看起来好像所有报文都是通过一个IP地址即负载均衡器的IP地址进行发送和接收的。
在本发明的实施例3中,参见图2,可以在所述虚拟机22上设置两块虚拟网卡221,222,其中第一块虚拟网卡221上设置虚拟机22的虚拟IP地址。第二块虚拟网卡222上设置虚拟机22的真实IP地址。虚拟机22通过该真实IP地址与负载均衡器周期性地交互心跳消息,使所述负载均衡器维护所述虚拟机的状态信息。其中虚拟IP地址与负载均衡器的地址相同。虚拟机22的虚拟网卡221和222连接到虚拟网桥23上,代理单元21连接虚拟网桥23和服务器的物理网卡24。在本发明中,虚拟网卡221可以通过桥接的方式连接到虚拟网桥。桥接具体指通过一台或几台设备把几个网络串起来形成的连接。本发明不对具体的连接方式做限制。
如图2所示,代理单元21通过第一虚拟网卡221为虚拟机22分配虚拟IP地址。并连接虚拟网桥23和服务器的物理网卡24,对物理网卡24接收到的客户端发送的ARP请求进行过滤;将虚拟机22通过所述第一虚拟网卡221发来的应答报文,通过物理网卡24发送至所述客户端。
综上所述,本发明实施例中提供的服务器通过设置于虚拟机的虚拟网卡与服务器物理网卡之间的代理单元拦截客户端发送的ARP请求,并通过该代理单元为每个虚拟机配置与负载均衡器的IP地址相同的虚拟IP地址,在实现虚拟机集群的负载均衡的情况下,无需在虚拟机内部分配虚拟IP地址或修改内部数据以设置ARP请求,解决了现有技术中需要进入虚拟机内做额外配置,从而导致系统不安全的问题,提高了系统的安全性。
本发明实施例4还提供了一种虚拟机集群系统,在本发明的一个具体实施例中,系统可以为Linux虚拟服务器。参见图3,该系统包括:
负载均衡器31和服务器32。
负载均衡器31,用于接收客户端发送的第一请求报文,并将所述第一请求报文的目的MAC地址由所述负载均衡器的MAC地址转换为所述服务器选定的虚拟机的MAC地址后,生成第二请求报文;其中,所述第一请求报文是客户端根据负载均衡器对应ARP请求返回的ARP响应中的MAC地址发送的。
负载均衡器拥有一个IP地址,用于与客户端通信。在负载均衡器31中保存有后端所有虚拟机MAC地址。因此,在接收到该第一请求报文后,负载均衡器31会从后端选定一个虚拟机,并根据该虚拟机的MAC地址。将该第一请求报文的MAC地址修改为该选定的虚拟机的MAC地址,生成第二请求报文发送至该虚拟机。在具体的选择过程中,负载均衡器31可以按照一定的规则选定虚拟机,比如根据后端虚拟机的负载情况。在本发明中,不对具体的选定过程做限制。
在本发明的具体实施例中,为保证请求报文被发送准确,负载均衡器31还会根据后端虚拟机的变化情况对保存在其中的虚拟机的MAC地址进行更新,以确保其保存的虚拟机的MAC地址与后端的虚拟机相对应。
所述服务器32包括:代理单元321和虚拟机322。
所述代理单元321,设置在虚拟机的虚拟网卡与服务器物理网卡之间,用于拦截客户端发送的ARP请求,以及为每个虚拟机配置一个虚拟IP地址,所述虚拟IP地址与负载均衡器的IP地址相同。
在本发明的实施例中,代理单元321包括防火墙或虚拟机监视器。具体的可在虚拟机监视器中运行有ARP忽略功能的proxy程序来实现。通过在代理单元321中设置ARP忽略,在客户端发出ARP请求,用以询问其中携带的IP地址对应的设备的MAC地址时,将发送至虚拟机322的ARP请求拦截,这样虚拟机322就无法响应该ARP请求。在虚拟机集群系统中,只有负载均衡器进行响应,因此客户端会将业务请求报文发送至负载均衡器。该请求报文的目的地址为该负载均衡器的虚拟IP地址,MAC地址为负载均衡器的MAC地址。
值得注意的是,该代理单元321设置在虚拟机322的虚拟网卡与服务器物理网卡之间,即是设置在虚拟机322之外的,这样就避免了进入虚拟机322内部做设置。
虚拟机322,用于根据接收的负载均衡器31发来的第二请求报文生成应答报文,所述应答报文的源地址为所述虚拟IP地址。
可选地,为使负载均衡器维护后端虚拟机的状态信息如某一具体的虚拟机是否可以提供服务或其对应的MAC地址是否变化等等,在本发明的具体实施例中,后端的虚拟机还配置拥有一个所述服务器所属内网中唯一的真实IP地址,用以与所述负载均衡器周期性地交互心跳消息。
代理单元321,还用于将虚拟机322生成的应答报文发送至客户端。
虚拟机322生成的应答报文的源地址与客户端发送的第一请求报文的目的地址相同,因此该应答报文可通过代理单元321被直接发送至客户端。对于在集群外的客户端看起来好像所有报文都是通过一个IP地址即负载均衡器的IP地址进行发送和接收的。
在本发明的实施例5中,参见图4,可以在虚拟机41上设置两块虚拟网卡411,412,在虚拟机42上设置虚拟网卡421,422。其中第一虚拟网卡411和421上分别设置虚拟机41和虚拟机42的虚拟IP地址。第二虚拟网卡412和422上分别设置虚拟机41和42的真实IP地址。虚拟机41、42通过真实IP地址与负载均衡器周期性地交互心跳消息,使所述负载均衡器维护所述虚拟机的状态信息。其中虚拟IP地址与负载均衡器的地址相同。虚拟网卡411,412连接到虚拟网桥43上,虚拟网卡421,422连接到虚拟网桥44上。代理单元45连接虚拟网桥43,44到服务器的物理网卡46上。在本发明中,虚拟网卡411、412可以通过桥接的方式连接到虚拟网桥43、44上。桥接具体指通过一台或几台设备把几个网络串起来形成的连接。本发明不对具体的连接方式做限制。
代理单元45连接虚拟网桥43、44和服务器的物理网卡46,对物理网卡46接收到的所述客户端发送的ARP请求进行过滤;将所述虚拟机通过所述第一虚拟网卡发来的应答报文,通过所述物理网卡发送至所述客户端。
当负载均衡器选中虚拟机41时,会将第二请求报文发送至虚拟机41。虚拟机41处理后,会将其对应的应答报文通过第一虚拟网卡411发送至代理单元45,并通过该代理单元45和物理网卡46直接发送至客户端。
该应答报文的源地址与客户端发送的第一请求报文的目的地址相同,因此对于在集群外的客户端看起来好像所有报文都是通过一个IP地址即负载均衡器的IP地址进行发送和接收的。
需要说明的是,本发明的服务器和系统实施例与本发明方法实施例相对应,相关部分参照方法实施例即可,此处不再做详细介绍。
以上对本发明所提供的一种虚拟机集群的负载均衡方法、服务器和系统,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。