加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 教程 > 正文

干货:一种基于SDN的服务器负载均衡方案

发布时间:2018-07-10 01:32:04 所属栏目:教程 来源:唐月婷
导读:副标题#e# 【资讯】 引言 网络已经成为许多商业的支撑脊柱,世界网络中每天都有新的设备加入,致使网络规模巨大化。众多的网络设备不仅意味着需要投入更多的资源,且使网络结构越加复杂化,管理难度增大且易错。为了避免网络管理错误的发生,一种新型的网络
副标题[/!--empirenews.page--]

  【资讯】

  引言

  网络已经成为许多商业的支撑脊柱,世界网络中每天都有新的设备加入,致使网络规模巨大化。众多的网络设备不仅意味着需要投入更多的资源,且使网络结构越加复杂化,管理难度增大且易错。为了避免网络管理错误的发生,一种新型的网络架构出现,即软件定义网络(Software Defined Networking,SDN)[1]。SDN技术旨在实现控制层与数据层面的分离,而控制层是物理上集中的一系列控制器。这些控制器通过开发一系列应用能够检测和管理网络行为,实现网络可编程化。SDN可以实现各种传统物理网络的功能,如负载均衡。软件定义网络中的控制器通过改变数据平面交换机的流表项来调整受影响的流到冗余路径上传输,从而避免网络资源被过度占用[2]。

  干货:一种基于SDN的服务器负载均衡方案

  在云场景中,LBaaS(Load Balancing as a Service,负载均衡即服务)是Openstack[3]云计算平台已经投入研究的负载均衡解决方案。但是,它搭载的Openstack项目——网络和地址管理(Neutron)仅能实现指定目标的网络访问。在大型云应用场景中,LBaaS并不能支撑起负载均衡业务。于是,Openstack中将SDN作为Neutron模块的一个插件发展网络业务解决LBaaS的局限,如NFV(Network Function Virtualization,网络功能虚拟化)。Window基于云平台的操作系统Azure中的云规模负载均衡方案(Ananta)[4],也借鉴于SDN的控制层面和数据平面分离的架构,实现了云规模下可扩展的基于软件的四层地址转换负载均衡服务。它的控制部分不能检测网络中大小负载的流量,将数据部分规模设计得很大,成本相应也增大。相比于前两者,SDN拥有独立的控制器来自主管理网络,可支持编程完成指定业务;不似Anata,SDN将控制层面和数据平面分别以不同的软件运行,并以网络接口连接,内部程序互不干扰。目前,对于SDN环境中的负载均衡以算法研究为主,方案部署研究甚少。在以SDN架构为主的Google的B4[5]网络中,也没有合适的负载均衡方案。

  SDN的开源控制器有NOX、Opendaylight、RYU和Floodlight等[6]。Floodlight集成了SDN的控制层与部分应用层,内部的南向接口通过Restful API实现。比起NOX、POX以及Maestro几款SDN控制器,Floodlight拥有更好的性能,支持各个应用模块,同时处理Openflow消息[7]。本文提出的负载均衡方案作为一个应用模块,运行在Floodlight控制器程序框架中,可同时扩展服务器负载均衡算法与路径选择的负载均衡方案。实验环境基于Mininet[8]仿真,每个节点默认的配置相同,服务器群的均衡策略采用轮询算法,路径则选择最短路径。模块中添加多个网络检测参数,使得此方案可扩展性强。

  1 负载均衡方案

  1.1 Laodbalancer逻辑架构

  本文将负载均衡方案部署为一个封装的应用模块(Loadbalancer),并整合在Floodlight的程序框架中。按照此次的试验环境,负载均衡方案架构显示如图1所示。Floodlight用Restful API实现南向接口连接控制器模块与应用模块,网络远程连接实现其北向接口至Mininet软件仿真的网络,检测网络数据并下发流表到各Openflow交换机。Loaderbalancer作为整合在其中的一项应用,参与流表的制定。交换机按照流表进行数据传输,即实现了负载均衡服务。

  干货:一种基于SDN的服务器负载均衡方案

  1.2 Loadbalancer服务过程

  负载均衡的服务过程中包含了分析Packet_In消息、负载均衡决策、路径选择以及流表下发。图2为整个负载均衡服务的通信流程。

  干货:一种基于SDN的服务器负载均衡方案

  ①主机发送请求包(Request Packet),此处dstIp=VIPIp;

  ②交换机检测到其流表中不存在与此Request packet相匹配的流表,即发送Packet_In包向控制器请求决策,此处dstIp=VIPIp;

  ③首先Floodlight控制器检测到Packet_In消息中的VIP地址与其Port之后,即调用负载均衡算法,经由算法选择Mininet创建的虚拟服务器。选择目标服务器后,计算主机到目标服务器的路径(选择跳数最少的路径),并将其进向路由以流表的方式下发到Openswitch(pushInVipRoutes)。其次,进行地址转换,将Request Packet的目的IP地址与Mac地址,由dstIp=VIPIp、dstMac=VIPMac转换为负载均衡策略选中服务器的IP地址与MAC地址dstIp=SeverIp、dstMac=SeverMac。最后,发送Packet_out到Openswitch,通知对此包按照下发流表工作;

  ④Sever收到dstIp=SeverIp、srcIp=HostIp的Request packet;

  ⑤Sever回复主机发送的Reply packet,dstIp=HostIp,srcIp=SeverIp;

  ⑥同第②步,发送Packet_out至控制器,此处srcIp=SeverIp;

  ⑦同第③步,首先找到服务器到主机的路径,其次进行地址转换;

  ⑧主机收到dstIp=HostIp、srcIp=VIPIp的Request Packet。

  第一次通信流程结束后,Openswitch将流表进行存储,之后需要相同路径的连接直接通过交换机转发。

  1.3 轮询调度算法

  在SDN环境中,虚拟服务器都有相同的配置,轮询调度算法可以节约负载策略耗费的时间。在Floodlight控制器中,负载均衡策略采用轮询调度算法能够为其他模块提供计算空间。轮询调度算法将每一次来自网络的请求都可以轮流分配给内部中的服务器,从1到 ,然后重新循环。它每次调度执行 ,并选出第 台服务器。

  轮询调度算法的相关代码如下:

  public String pickMember(IPClient client){ if (members.size()>0){ previousMemberIndex=(previousMemberIndex +1)%members.size(); return members.get(previousMemberIndex); } else{ return null;}

  2 实验及分析

  本方案的实验操作系统采用的是Ubuntu。SDN数据平面由虚拟机中的Mininet搭建,运行在主机中的Floodlight作为控制器与负载均衡器。Floodlight支持网络可视化,通过访问其端口页面可以发现网络拓扑、网络连接、交换机流表、交换机以及主机信息。

  2.1 配置Loadbalancer

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读