当前位置:文档之家› 服务器负载均衡的设计与实现

服务器负载均衡的设计与实现

服务器负载均衡的设计与实现
在该架构中OpenFlow控制器可以获取每个服务器的运行状态,并根据运行状态分发用户请求,最大程度地利用每台服务器的计算资源,并且可以在系统运行期间动态地添加或删除服务器,使系统具备很高的灵活性。

1、动态负载均衡架构的整体设计
负载均衡架构是在一个非结构化的网络中使用集中式的控制器实现多台服务器共同对外提供服务。

OpenFlow网络中的所有交换机都连接在一个控制器上,每台服务器有两块网卡,一块网卡连接到OpenFlow网络对用户提供网络服务,另一块通过以太网交换机和控制器相连,以便控制器通过SNMP协议获取服务器的运行状态,具体架构如图所示。

在上述负载均衡架构中控制器是网络的核心,其主要功能有四个,分别为:
保证网络正常的通信、获取服务器的运行状态、通过负载均衡算法计算服务器的综合负载、向交换机下发流表项以转发用户请求;控制器的模块设计如图所示。

本文阐述的负载均衡架构可以工作在任意openflow网络中,而不是专门为某个服务器
所设计的负载均衡,控制器的首要任务就是保证网络可以提供正常的数据转发服务,为了保证网络既可以为其他服务提供基础支持又保证负载均衡能够正常工作,在控制器的转发控制中有两个模块,第一个模块负责负载均衡服务,第二个模块负责网络的基本通信。

当一个数据包到达Openflow交换机后,如果交换机找不到可以匹配的流表项,就会向控制发送packet-in消息,控制器收到packet-in消息之后首先交给负载均衡模块,由负载均衡模块处理该消息,如果该数据包的目的IP 不是负载均衡所负责的网络服务,如果该数据包的目的IP不是负载均衡所负责的网络服务,负载均衡模块就不会做任何处理而是直接packet-in 消息传递给网络通信模块,以保证其它业务正常通信。

如果该数据包的目的IP是负载均衡所负责的网络服务,负载均衡模块就向交换机下发流表项让交换机完成负载均衡服务。

为了有效地利用计算资源,控制器还需要根据服务器的运行状态转发用户请求,因此控制器还要完成这方面的工作。

在此架构中每台服务器都有一块通过以太网交换机和控制器相连的网卡,控制器通过以太网交换机和服务器通信,利用SNMP协议获取服务器的运行状态。

在此架构中就算没有和服务器相连的网卡,控制器也可以通过Openflow网络和服务器通信,本文之所以没有这么做是因为控制器直接和连接在openflow网络中的服务器通信需要交换机把所有服务器所发送的消息封装成packet-in消息发送给交换机,控制器也必须通过向交换机发送packet-out消息才能把数据发送给服务器,这样做会给交换机和控制器同时带来很大的压力。

因为服务器的运行状态必须由多条信息才能描述清楚,所以就算得到服务器的运行状态之后,也无法根据多条信息判断哪台服务器的负载最低。

因此本文在控制器中运行了一个负载均衡算法,控制器会把服务的运行状态作为负载均衡算法的参数代入到服务器综合负载的运算中,计算出服务器的综合负载,并根据综合负载得到负载最小的服务器。

负载均衡的核心内容就是让交换机分发用户的请求,用户请求的第一个数据包到达交换级之后,交换机会通过packet-in消息把数据包发送给控制器,控制器中的负载均衡模块会通过SNMP协议获取所有服务器的运行状态,并根据运行状态计算服务器的综合负载,之后把用户的请求转发给综合负载最小的服务器。

2、动态负载均衡架构的设计与实现
负载均衡常用的算法有随机、轮训和最小连接数,原因是这三种算法很容易用硬件实现,这三种算法中最小连接数算法的效果是最理想的,但是如果集群中的服务器在CPU、内存、网络带宽上的配置不相同,这三个算法都不能充分地发挥服务器集群的计算能力。

在openflow网络中,网络的控制层由软件制定,负载均衡算法也可以集成在控制器中,使用软件完成,这样可以更准确地评估服务器的负载情况。

本文阐述的负载均衡方案中就设计了一个负载均衡算法,根据服务器的运行状态计算服务器的综合负载,并返回综合负载最小的服务器。

该算法可以在服务器性能差距较大的集群中充分发挥每一台服务器的计算能力,算法的具体实现过程如下:
1)动态反馈当前服务器负载量
主要收集每台服务器CPU和内存的使用率,这些信息并不能直接表示一台服务器的负载情况,所以使用公式1把CPU和内存信息转换为服务器的负载量,其中LC为第i台服务器CPU的使用率,LM为第i台内存的使用率,r1和r2为权值,用于强调该服务类型对各个部分的不同影响程度,r1+r2=1,LS为计算得出的第i台服务器负载量
LS=r1LC+r2*LM
2)服务器处理能力计算;
集群中服务器的性能也可能不同,在计算服务器负载的时候还要考虑服务器的处理能力,第i台服务器的处理能力使用C(i)表示,C的计算方法如公式所示,其中P为第i台服务器CPU的个数,M为第i台服务器内存的大小,r1和r2为权值,r1+r2=1。

C=r1*P+r2*M
3)通过服务器当前的负载量和服务器的计算能力,计算第i台计算机的综合负载AL,AL的计算方法如下
AL=LS/C
基于服务器运行状态的动态反馈负载均衡算法(SBLB)
该算法根据虚拟机的实时运行状态计算出每个服务器的综合负载,并返回负载差距在一定范围内的拥有最小负载的服务器队列,当有客户请求到达时,以一定的概率从该队列中选择某个虚拟机服务器为其提供服务,从而最小化服务器响应时间和提高系统的吞吐率。

如图所示,显示了基于服务器运行状态的动态反馈负载均衡算法的工作环境,在
floodlight控制器上运行虚拟机管理模块,虚拟机管理模块调用libvirt API来采集服
务器的CPU使用率、空闲内存等负载信息,之后将收集到的每个服务器的负载信息
发送给负载均衡策略模块,用以计算服务器的综合负载值以便floodlight控制器制
定响应客户的流表。

为了准确的表示服务器是否达到我们想要的利用率,引入权值
的概念,权值通过服务器反馈的综合负载值进行动态调整,他们之间为相关关系。

当新算出的权值变小时表示当前服务器比较忙,这样就可以相应减少分配到服务器
的客户请求。

反之,当权值变大时表示当前服务器比较空闲并没有达到理想状态,这样就可以响应增加分配到该服务器的客户请求。

相关主题