一种服务器负载均衡的方法与装置与流程

文档序号:12376407阅读:262来源:国知局
一种服务器负载均衡的方法与装置与流程

本发明涉及网络虚拟技术以及负载均衡技术,尤其涉及网络虚拟环境下虚拟服务器集群的负载均衡的方法与装置。



背景技术:

负载均衡技术(Load Balance)就是将负载(工作任务)分摊到多个操作单元上进行执行,从而共同完成工作任务的技术。在网络应用中,它提供了一种廉价有效透明的方法来扩展网络设备和服务器的带宽、增加吞吐量,加强网络数据处理能力,提高网络的灵活性和可用性。这其中服务器的负载均衡是最常见的。由于网络的数据访问流量迅速增长,而服务器处理器速度和内存访问速度的增长却远远低于网络带宽和应用服务的增长,服务器成为了网络瓶颈。为此,通过组建服务器集群,利用负载均衡技术在服务器间进行业务均衡,成为一种低成本、可扩展的有效解决办法。

Linux虚拟服务器(Linux Virtual Server,LVS)负载均衡是服务器负载均衡技术中的一种。LVS主要用于多服务器的负载均衡,工作在网络层,可以实现高性能、高可用的服务器集群技术。

LVS负载均衡,主要包括客户端、负载调度服务器和真实服务器(RealServer,RS)。其中,负载调度服务器最主要的功能是提供数据包转发和负载均衡,负载调度服务器虚拟一个对外访问的虚拟IP地址(vip),当用户访问vip时到达负载调度服务器,负载调度服务器根据一定的规则选择一个RS,RS处理完成后返回给客户端数据。

在LVS负载均衡中,依据转发方式,常见的有通过直接路由技术实现虚拟服务器(Virtual Server via Direct Routing,VS/DR)方式和通过网络地址转换技术实现虚拟服务器(Virtual Server via Network Address Translation,VS/NAT)方式。

在VS/NAT模式中,负载调度服务器将数据报文中的目标地址(即vip)改成具体的某台RS,端口也改成RS的端口,然后把报文发给RS。RS处理完数据后,需要返回给负载调度服务器,然后负载调度服务器将数据包中的源地址和源端口改成vip的地址和端口,最后把数据发送出去。该方式组网灵活,后端服务器可以位于不同的物理位置,不同的局域网内。然而,数据转发都需要通过负载调度服务器,因此负载调度服务器成为系统新的瓶颈。

在VS/DR模式中,负载调度服务器通过改写请求报文的硬件地址,将请求发送到RS,而RS将响应直接返回给客户。由于RS的数据不经过负载调度服务器,因此减少了设备负载,缓解了VS/NAT模式中设备瓶颈的问题。然而,在VS/DR模式中,负载调度服务器与RS需要具有相同的端口,由此带来的问题是:限制了负载调度服务器和RS的部署和级联方式,负载调度服务器不能为跨端口的RS提供服务,只能使用较为扁平的网络拓扑,从而大大局限了网络拓扑。



技术实现要素:

针对以上现有技术中的问题,本发明的目的在于在网络虚拟化的环境下,提供一种服务器负载均衡的方法与装置,能够不受设备瓶颈限制,高性能地进行大量数据吞吐,且能够使用于负载调度服务器与RS具有不同端口的情况。

根据本发明的一个方面,提供了一种服务器负载均衡的方法,其中多个真实服务器以虚拟机的形式运行在至少一个第一宿主机中,包括步骤:负载调度服务器接收来自客户端的请求数据包;负载调度服务器根据负载均衡算法确定处理请求数据包的真实服务器;负载调度服务器将请求数据包中的目标端口转换为真实服务器的端口,将目标硬件地址转换为第一宿主机硬件地址;负载调度服务器将转换后的请求数据包发送至处理请求数据包的真实服务器的第一宿主机;第一宿主机使用openflow协议,第一宿主机向客户端发送真实服务器处理后的回复数据包,第一宿主机通过openflow流表将回复数据包中的源地址端口转换为负载调度服务器端口。

优选地,openflow流表由多条流表项组成,其中包含转换端口的流表项,第一宿主机接收真实服务器的回复数据包,并从回复数据包中提取第二特征,将第二特征与多条流表项的匹配字段进行匹配,当第二特征与转换端口的流表项中的匹配字段匹配时,则执行转换端口的流表项中的指令字段,将回复数据包中的源端口转换为负载调度服务器端口。

优选地,第二特征包括目标IP地址,源端口,转换端口的流表项中的匹配字段包括客户端IP地址,真实服务器端口。

优选地,负载调度服务器基于地址解析协议广播接收来自客户端的请求数据包,第一宿主机通过openflow流表对来自客户端的请求数据包的地址解析协议广播进行代答,从而屏蔽真实服务器对请求数据包的地址解析协议信息广播的响应。

优选地,openflow流表由多条流表项组成,其中包含代答指令的流表项,第一宿主机接收来自客户端的请求数据包,并从请求数据包中提取第一特征,将第一特征与多条流表项的匹配字段进行匹配,当第一特征与代答指令的流表项中的匹配字段匹配时,则执行代答指令的流表项中的指令字段,向客户端返回代答数据。

优选地,第一特征包括目标IP地址,数据包是否包含ARP报头,源宿主机IP地址,代答指令的流表项中的匹配字段包括负载调度服务器虚拟IP地址,ARP报头,客户端宿主机IP地址。

优选地,第一宿主机抛弃接收到的客户端发送的请求数据包的地址解析协议信息,从而屏蔽真实服务器对请求数据包的地址解析协议信息进行响应。

优选地,上述的服务器负载均衡的方法还包括步骤:第一宿主机安装QEMU guest agent,通过QEMU guest agent对运行其中的真实服务器进行虚拟IP地址设置。

优选地,第一宿主机通过QEMU guest agent调用ip address add命令添加虚拟IP地址。

优选地,第一宿主机通过QEMU guest agent修改操作系统中的网卡配置文件,在网卡配置文件中添加虚拟IP地址。

根据本发明的另一个方面,提供了一种服务器负载均衡的装置,真实服务器以虚拟机的形式运行在服务器负载均衡的装置中,服务器负载均衡的装置使用openflow协议,服务器负载均衡的装置包括:端口转换模块,端口转换模块接收真实服务器的回复数据包,端口转换模块通过openflow流表将回复数据包中的源地址端口转换为负载调度服务器端口;数据包发送模块,数据包发送模块将回复数据包向客户端发送。

优选地,openflow流表由多条流表项组成,其中包含转换端口的流表项,端口转换模块从回复数据包中提取第二特征,将第二特征与多条流表项的匹配字段进行匹配,当第二特征与转换端口的流表项中的匹配字段匹配时,则执行转换端口的流表项中的指令字段,将回复数据包中的源端口转换为负载调度服务器端口。

优选地,第二特征包括目标IP地址,源端口,转换端口的流表项中的匹配字段包括客户端IP地址,真实服务器端口。

优选地,上述服务器负载均衡的装置还包括:代答指令模块,代答指令模块接收来自客户端的请求数据包,代答指令模块通过openflow流表对来自客户端的请求数据包的地址解析协议广播进行代答,从而屏蔽真实服务器对请求数据包的地址解析协议信息广播的响应。

优选地,openflow流表由多条流表项组成,其中包含代答指令的流表项,代答指令模块从请求数据包中提取第一特征,将第一特征与多条流表项的匹配字段进行匹配,当第一特征与代答指令的流表项中的匹配字段匹配时,则执行代答指令的流表项中的指令字段,向客户端返回代答数据。

优选地,第一特征包括目标IP地址,数据包是否包含ARP报头,源宿主机IP地址,代答指令的流表项中的匹配字段包括负载调度服务器虚拟IP地址,ARP报头,客户端宿主机IP地址。

根据本发明的第三方面,提供了一种设置真实服务器IP地址的方法,真实服务器以虚拟机的形式运行在第一宿主机中,第一宿主机安装QEMUguest agent,通过QEMU guest agent对运行其中的真实服务器进行虚拟IP地址设置。

优选地,第一宿主机通过QEMU guest agent调用ip address add命令添加虚拟IP地址。

优选地,第一宿主机通过QEMU guest agent修改操作系统中的网卡配置文件,在网卡配置文件中添加虚拟IP地址。

本发明中第一宿主机通过openflow流表将真实服务器处理后的回复数据包中的源端口改为负载调度服务器的端口,从而简单地解决了负载调度服务器与真实服务器端口不一致的问题。进一步地,由于本发明通过第一宿主机的设置而不是通过真实服务器而改变回复数据包中的源端口,因此避免了真实服务器运营商的复杂设置。

由于回复数据包不需要经过负载调度服务器而直接发送至客户端,因此减少了设备负载,能够高性能地进行大量数据吞吐。

附图说明

以下结合附图和具体实施例对本发明的技术方案进行详细的说明,以使本发明的特性和优点更为明显。

图1为实施本发明方法的一个实施例的数据流向示意图;

图2为本法明的方法的流程示意图;

图3为本发明的图2中的S105步骤的详细流程示意图。

具体实施方式

以下将对本发明的实施例给出详细的说明。尽管本发明将结合一些具体实施方式进行阐述和说明,但需要注意的是本发明并不仅仅只局限于这些实施方式。相反,对本发明进行的修改或者等同替换,均应涵盖在本发明的权利要求范围当中。

一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。

应当理解的是,虽然在这里可能使用了术语“第一”、“第二”等等来描述各个单元或是数据,但是这些单元或数据不应当受这些术语限制。使用这些术语仅仅是为了将一个数据与另一个数据进行区分。举例来说,在不背离示例性实施例的范围的情况下,第一特征可以被称为第二特征,并且类似地第二特征可以被称为第一特征。

本发明所提供的一种服务器负载均衡的方法,是在传统的VS/DR模式上的改进,因此也具有传统的VS/DR模式中的真实服务器(RS)直接将回复数据包发回客户端的步骤,由于RS的数据不经过负载调度服务器,因此减少了设备负载,能够高性能地进行大量数据吞吐。同时,本发明提供的方法能够方便地解决负载调度服务器不能为跨端口的RS提供服务的问题。

下面首先结合附图,说明本发明的方法的原理以及数据流向。

图1为实施本发明方法的一个实施例的数据流向示意图。如图1所示,VS/DR服务器集群401中包括负载调度服务器102,以及RS103,需要说明的是,通常在VS/DR服务器集群401中包含多个RS103,图1为了方便说明因此仅示例性地设置了一个RS103,未示出的RS的结构以及运行原理等与图1示例的RS103相同。RS103是真实地处理客户端请求数据的服务器,负载调度服务器102则用于确定处理请求数据的RS103,并将从客户端101接收的请求数据包301转换并发送至该RS103。

在本发明中,RS103以虚拟机的形式运行在第一宿主机203中。实践中,在一台第一宿主机中可以运行一个RS,即多个RS可以单独运行在多个第一宿主机中,也可以在一台第一宿主机中运行一个以上的RS。

为了便于说明数据通信的方式,本实施例在说明时负载调度服务器102也以虚拟机的形式运行在第二宿主机202中,客户端101以虚拟机的形式运行在客户端宿主机201中。实际使用时,负载调度服务器102通常为一个实体的服务器(即不采用虚拟机的形式),但模拟虚拟机-宿主机的形式构建通信数据结构,从而便于与RS103进行通信。实际使用时,当实体客户端发送请求数据包时,可以将实体客户端的请求数据包通过虚拟网关转化为模拟虚拟客户端的形式。在本实施例中,在各个主体间传送的各数据包中均包含源IP地址,源端口,源宿主机IP地址,源硬件地址,目标IP地址,目标端口,目标宿主机IP地址,目标硬件地址。以上数据包中的字段均通过IP协议存储,通过以上字段的设置可以方便地实现各数据包传输定位。为了方便说明,在本实施例中,示例性地将各个主体的IP地址设置如下:

客户端101的IP地址为10.10.1.10,端口为36000。运行客户端101的客户端宿主机201的IP地址为172.24.1.10。

负载调度服务器102的虚拟IP地址(vip)为10.10.1.100,端口为80。运行负载调度服务器102的第二宿主机202的IP地址为172.24.1.100。

RS103的虚拟IP地址(vip)为10.10.1.100,端口为8080。运行RS103的第一宿主机203的IP地址为172.24.1.20。

其中负载调度服务器102的vip与RS103的vip设置一致,这是VS/DR模式中,根据数据包转发的需要而设置,否则RS103会拒绝处理该数据包。

通常,对于RS103的vip需要通过RS103的运营商手动进行设置,对于RS103的运营商而言,需要特殊设置,操作麻烦。

在本发明中,在第一宿主机203中安装QEMU guest agent(QGA)软件。QGA是一个运行在虚拟机内部的应用程序,其目的是实现一种宿主机和虚拟机进行交互的方式。具体而言,QGA在虚拟机中安装的一个代理,宿主机通过通道(即unix socket)与虚拟机内部的代理进行通信,这样宿主机就有了一种从外部控制/获取虚拟机的手段。比如:宿主机可以向虚拟机下发执行修改hostname的指令,或者获取宿主机内所有进程信息的指令。QGA时刻监听这个通道,一旦发现有指令发送来,分析该指令,并执行,通过通道返回执行结果,传输的是json字符串。

第一宿主机203通过QGA对运行其中的RS103进行vip设置。具体而言,第一宿主机203通过QGA调用ip address add命令在RS103中添加vip,从而实时地设置vip。

为了防止RS103重启后RS103的vip丢失,第一宿主机203通过QGA修改RS103操作系统中的网卡配置文件,在网卡配置文件中添加vip,从而使得RS103重启后,vip仍然成功设置。

通过以上的方法,不再需要RS103的运营商手动设置RS103的vip,而能够通过第一宿主机203的设置达到配置RS103vip的效果。

图2为本法明的方法的流程示意图。

结合图1以及图2,客户端101基于地址解析协议(ARP)广播向VS/DR服务器集群401发送请求数据包301。

如步骤S101,负载调度服务器102接收请求数据包301。具体而言,负载调度服务器102设有一个vip,VS/DR服务器集群401使用该负载调度服务器102的vip作为统一对外的IP地址,即客户端101发出的请求数据包301的目标地址设为该vip,从而实现客户端101对VS/DR服务器集群401的访问。

在图1所示的示例中,由客户端101发出的请求数据包301中,源IP地址以及源端口均为客户端101的IP地址10.10.1.10以及端口36000。请求数据包301的源宿主机IP地址以及源硬件地址均为客户端宿主机201的IP地址172.24.1.10以及硬件地址(未示出)。请求数据包301的目标IP地址,目标端口,为负载调度服务器102的vip10.10.1.100,负载调度服务器102的端口80。请求数据包301的目标宿主机IP地址以及目标硬件地址均为第二宿主机202的IP地址172.24.1.100以及硬件地址(未示出)。

负载调度服务器102根据请求数据包301的目标IP地址10.10.1.100以及目标端口80接收请求数据包301。

由于请求数据包301需要首先由负载调度服务器102进行接收并处理,因此对于RS103而言,在客户端101基于ARP广播发送请求数据包301时,需要对RS103对于ARP广播的响应进行屏蔽,从而保证客户端101不会收到RS103对ARP广播的响应。

本发明通过第一宿主机203实现屏蔽RS103对请求数据包的ARP广播的响应。

在本发明中,第一宿主机203使用openflow协议。openflow协议是Nick McKeown教授等人在2007年提出的软件定义网络(Software DefinedNetworking,SDN)中的核心技术,SDN架构主要由openflow交换机和openflow控制器组成,交换机主要由openflow流表(FlowTable)、安全通道和OpenFlow协议三部分构成。其中,OpenFlow流表用来进行数据包的查找和转发。

第一宿主机203上安装了Open VSwitch软件,从而实现相当于openflow交换机的功能。由虚拟网络中的其他远端服务器实现控制器的功能。第一宿主机203中包括openflow流表。openflow流表由多条流表项组成,每个流表项就是一个转发规则。进入第一宿主机203的数据包通过查询流表来获得转发的目的端口。流表项包括匹配字段,匹配字段用于查询匹配特征。流表项还包括指令字段,指令字段用于执行相应操作。

第一宿主机203的openflow流表中包含代答指令的流表项。第一宿主机203接收来自客户端101的请求数据包301,并从请求数据包301中提取第一特征,将第一特征与多条流表项进行的匹配字段匹配。当第一特征与代答指令的流表项中的匹配字段匹配时,则执行代答指令的流表项中的指令字段,向客户端返回代答数据。

第一特征包括目标IP地址,数据包是否包括ARP报头,源宿主机IP地址。代答指令的流表项中的匹配字段包括负载调度服务器102的vip,ARP报头,客户端宿主机201IP地址。也就是说,当第一特征的目标IP地址为负载调度服务器102的vip,请求数据包301包括ARP报头,源宿主机IP地址为客户端宿主机201IP地址,判断匹配代答指令的流表项,从而执行代答指令的流表项中的指令字段,向客户端101返回代答数据,并将RS103对于ARP广播的响应信息抛弃。

由于第一宿主机203向客户端101返回代答数据,从而使得RS103对于ARP广播应答无法到达客户端101,也就是说屏蔽了RS103对请求数据包301的ARP广播的响应。

本实施例中采用了openflow流表的代答方式,在其他实施例中,也可以通过其他方式实现,例如第一宿主机203抛弃接收到的客户端101发送的请求数据包301的地址解析协议信息,从而屏蔽RS103对请求数据包301的ARP广播进行响应。然而,使用抛弃请求数据包301的方式,会使得客户端101不断发送ARP广播,而本实施例中采用的openflow流表的代答方式不会发生这样的情况。

接着如步骤S102,负载调度服务器102接收来自客户端101的请求数据包301后,根据设定的负载调度算法确定用于处理客户端请求数据包301的RS103。负载调度算法可以采用已有的VS/DR模式中的负载调度算法。

如步骤S103,负载调度服务器102将请求数据包301中的目标端口转换为RS103的端口,将目标硬件地址转换为第一宿主机203的硬件地址,从而得到转换后的的请求数据包302。

通常的VS/DR模式中要求负载调度服务器和RS需要在同一个网段中,负载调度服务器将请求数据包中的目标硬件地址转换为RS的硬件地址从而使得与负载调度服务器同网段中的RS可以接收到请求数据包。当负载调度服务器和RS不在一个网段中时,负载调度服务器无法将请求数据包发送至RS。

在本发明中,由于RS103以虚拟机的形式运行在第二宿主机203中,因此对于虚拟机的IP地址可以根据独立于第二宿主机203的IP地址而根据需要设置为与负载调度服务器拥有相同的vip地址。但是,还存在RS103端口可能与负载调度服务器102的端口不一致的情况,由于端口不同,仍然会使得负载调度服务器102无法将请求数据包发送至RS103。

针对以上的问题,本示例中负载调度服务器102将请求数据包301中的目标端口转换为RS103的端口,将目标硬件地址转换为第一宿主机203硬件地址,从而使得转换后的请求数据包302能够被RS103接收。

负载调度服务器102将请求数据包301中的目标端口转换为RS103的端口,将目标硬件地址转换为第一宿主机203硬件地址的方法可采用直接修改数据包的方法。

如图1所示,负载调度服务器102处理后,第二宿主机202对请求数据包301进行转换并得到转换后的请求数据包302。具体而言,第二宿主机202将目标端口转换为RS103的端口8080,将目标宿主机IP地址以及目标硬件地址改为第一宿主机203的IP地址172.24.1.20以及硬件地址(未示出)。

接着,如步骤S104,负载调度服务器102将转换后的请求数据包302发送至RS103。

RS103根据转换后的请求数据包302的目标IP地址10.10.1.100以及目标端口8080接收转换后的请求数据包302。

RS103在接收转换后的请求数据包302后,对请求数据进行处理响应,并构建回复数据包303。

如步骤S105,第一宿主机203向客户端101发送回复数据包303。图3示出了图2中的S105步骤的详细流程。

如图3所示,如步骤S1051,第一宿主机203接收RS103构建的回复数据包303。

在上文中已经描述第一宿主机203使用openflow协议,如步骤S1052,第一宿主机203通过openflow流表将回复数据包303中的源地址端口转换为负载调度服务器102端口。

具体而言,openflow流表中包含转换端口的流表项,第一宿主机203从回复数据包303中提取第二特征,将第二特征与多条流表项的匹配字段进行匹配。当第二特征与代答指令的流表项中的匹配字段匹配时,则执行转换端口的流表项中的指令字段,将回复数据包303中的源地址端口转换为负载调度服务器102端口。

第二特征包括目标IP地址,源端口。转换端口的流表项中的匹配字段包括客户端101IP地址,RS103端口。也就是说,当第二特征的目标IP地址为客户端101IP地址,且源端口为RS103端口时,则判断匹配转换端口的流表项,从而执行转换端口的流表项中的指令字段,将回复数据包303中的源地址端口转换为负载调度服务器102端口。

由于回复数据包303由第一宿主机203发出,因此回复数据包303的源硬件地址设置为第一宿主机203的硬件地址。

回复数据包303的源IP地址以及源端口为负载调度服务器102的vip10.10.1.100以及负载调度服务器102的端口80。源宿主机IP地址以及源硬件地址为第一宿主机203的IP地址172.24.1.20以及第一宿主机203的硬件地址(未示出)。目标IP地址以及目标端口为客户端101IP地址10.10.1.10以及客户端101端口36000。

对于客户端101而言,由于回复数据包303的源IP地址以及源端口均与客户端101发出的请求数据包301的目标IP地址以及目标端口一致,因此客户端101将接收该回复数据包303并进行关联。

通过以上对本发明的流程以及数据流向的介绍可以得知,本发明通过第一宿主机203借助openflow流表对回复数据包303进行转换,从而方便地实现了在负载调度服务器102和RS103端口不一致的情况下实现数据通信的方法。且通过本发明的方法,只需要对第一宿主机203进行设置,而无需对RS103进行设置。

在实践中,负载调度服务器102以及第一宿主机203的运营主体与RS103的运营主体通常不一致,通过本发明的方法,RS103无需做任何变动即可实现跨端口的服务器负载均衡。

根据以上方法,本发明还提供了一种服务器负载均衡的装置,即第一宿主机203,第一宿主机203使用openflow协议。

第一宿主机203包括端口转换模块,数据包发送模块以及代答指令模块。

其中端口转换模块接收RS103的回复数据包303,并通过openflow流表将回复数据包303中的源地址端口转换为负载调度服务器102的端口。具体的转换方法在上文描述方法时已说明,此处不再赘述。

数据包发送模块将转换后的回复数据包303向客户端103发送。

代答指令模块接收来自客户端101的请求数据包301,代答指令模块通过openflow流表对来自客户端101的请求数据包301的ARP广播进行代答,从而屏蔽RS103对请求数据包301的ARP信息广播的响应。具体的代答指令方法在上文描述方法时已说明,此处不再赘述。

需要说明的是,本发明是计算机在虚拟环境下负载均衡技术的一种应用。在本发明的实现过程中,会涉及到多个软件功能模块的应用。如在仔细阅读申请文件、准确理解本发明的实现原理和发明目的以后,在结合现有公知技术的情况下,本领域技术人员完全可以运用其掌握的软件编程技能实现本发明。前述软件功能模块包括但不限于:数据包接收模块,openflow流表获取模块等,凡本发明申请文件提及的均属此范畴,申请人不再一一列举。

由于本发明是在传统的VS/DR模式上的改进,因此对于本发明中未详细描述的实现步骤,本领域技术人员可采用现有VS/DR模式实现。关于本发明中未详细描述的宿主机对于虚拟机的控制,本领域技术人员可采用现有的宿主机-虚拟机控制方式。对于基于SDN架构的openflow交换机与openflow控制器的交互也可采用现有的交互方式。

以上仅是本发明的具体应用范例,对本发明的保护范围不构成任何限制。除上述实施例外,本发明还可以有其它实施方式。凡采用等同替换或等效变换形成的技术方案,均落在本发明所要求保护的范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1