基于SDN的数据中心网络流量负载均衡的研究与应用
2018-11-02钟九洲
钟九洲
(达州职业技术学院公共事务管理系,四川达州635000)
1 引言
在互联网、云计算弹性扩展,方式灵活的高速推广下,大量的高流量业务快速增长.传统的组网方式一般是按照业务需求增加百分比扩充的方式部署整个网络架构,数据中心作为网络架构的中心位置,起着至关重要的角色.企业在今天互联网+环境下,业务瞬息万变,业务量随时在发生巨大的变化.[1]传统方式架构的数据中心一般采用OSPF、BGP等路由协议多路连接的协议来增加冗余路径,通过ECMP进行负载均衡,但实际运用过程中由于不能快速、直接的部署到数据中心网络上,均衡分布不彻底,多层配置网络设备工作量大等原因导致备之间负载不均衡,网络带宽使用率底等突出问题.[2-5]
软件定义网络(Software Defined Network, SDN)重要的中心思想是将数据层和网络控制层进行分离,然后通过集中可编程的软件平台控制底层设备,最终灵活实现网络资源按需分布.[6]本文提出利用SDN优势,选择Ryu作为控制平台,REST API定义相应的模块来对网络数据中心流量的负载均衡进行研究.[7-8]数据中心应用SDN后,业务需求一旦发生变化,只需要控制平台编程定义配置策略,数据中心设备会自动更新运行,无需重新部署网络中多个节点.最后利用仿真模拟平台进行测试,结果表明使用该策略可以有效的提高网络流量的利用率,减少网络延迟等问题.
2 SDN相关简介
SDN即软件件定义网络(Software Defined Network),是互联网技术影响未来十项技术之一.SDN是一种新型的网络架构,中心思想是将数据层和网络控制层进行分离,然后通过集中可编程的软件平台控制底层设备,最终灵活实现网络资源按需分布.网络中的硬件设备只是负责根据控制平台转发数据包而已,网络操作系统以及设备之间的通讯、更新都通过控制平台编程实现.SDN与传统网络对比如图1所示.
图1 SND与传统网络对比
在SDN网络中中有两个重要的元素一个是交换机,一个是控制平台,所有的网络部署、更新都是通过控制平台来编程后完成,网络设备之间没有任何网络协议,交换机和控制平台进行是通过OpenFlow协议通讯来完成部署.OpenFlow协议核心思想将原来由交换机通过协议转发的数据包,变成由OpenFlow交换机和控制平台分别完成的独立过程.OpenFlow交换机只是通过OpenFlow协议从控制平台接受一个流表,根据流表对应项进行数据转发,从而实现数据层和网络控制层进行分离.SDN优点可以使得网络部署、更新更快捷,降低网络组建、升级成本,同时SND网络开放能力可以更好促进网络服务创新和企业业务创新.
3 系统设计思想
数据中心网络流量主要特点是容量集中、缓存高等,利用SDN技术建立负载均衡主要目的是将网络中大量的数据实时分析,同时根据策略自动的分发到多台设备进行并发处理,降低响应的时间,提高数据中心处理能力.SDN技术利用控制平台配置整个网络策略,不需要增加冗余链路和升级硬件就可以将配置最优策略发布到每个设备.
图2 SND工作流程图
在SDN中首先要获取全局网络拓扑结构,是利用Ryu控制器发送报文LLDP得到,控制器 Yes-KSP算法计算最优路径,在利用OpenFlow交换机、OpenFlow协议实时监测网络变化,当数据中心业务出现变动更新,控制器自动下发相应策略的流表到相应交换机,从而实现网络中心流量负载均衡.流程图如图2
4 整体架构
SDN的数据中心网络流量负载均衡系统主要包括5个模块,分别是网络拓扑感知模块、网络状态实时监测模块、k最短路径计算模块、链路状态评估模块、流表分配模块.网络拓扑感知模块主要作用是获取整个个网络各个节点、链路之间的链接关系拓扑结构;网络状态实时监测模块作用是监测网络带宽、泛洪、堵塞等参数;k最短路径计算模块主要通过ksp计算最短路径;链路状态评估模块对最短路径综合评估优先级;流表分配模块依照最优路径封装至OpenFlow交换机,交换机按对应的流表分配并转发数据.
整体架构图如下图所示.
图3 SND整体架构图
5 实现过程
5.1 利用Ryu控制器进行全局拓扑学习
SDN首先是通过Ryu控制器来学习整个网络拓扑结构, 为异动转发策略奠定基础.本文采用二层链路层LLDP协议将网络设备配置信息封装在LLDP数据包中,Ryu控制器在探测网络主机、节点、链路状态时,会先LLDP数据包中Packet-Out发送给OpenFlow交换机,各个OpenFlow交换机以及邻居设备收到数据包后,首先对应本设备流表,在把LLDP数据包封装到Packet-In中发给Ryu控制器,Ryu控制根据信息解析后获取整个拓扑结构.获取后Ryu控制器会自主学习保存整个网络设备的MAC地址,利用STP生成树协议防止二层网络因设备环路产生广播风暴.
Ryu全局拓扑获取流程图如下
图4 Ryu全局拓扑获取流程图
5.2 网络状态实时监测
网络状态主要是通过OpenFlow协议监测网络设备端口流量变化情况,从而周期性获取网络带宽流量、延迟等变化情况.流量的计算是链路上行速率和下行速率决定,SDN主要利用端口的最大带宽减去当前带宽得到剩余带宽.网络延迟是Ryu控制器向OpenFlow交换机发送一个包含时间节点的LLDP报文,交换设备邻居之间相互转发,流表中没有匹配项,则发回Packet-In报文给Ryu控制器,控制器根据不同交换机发回的数据得到延迟参数.网络中宽带利用率以及网络延时是衡量网络状况的重要参照,SDN控制器网络监测可以实时的获取网络状况信息,网络监测模块既可以为下一个链路状况评估模块提供相关的数据,也能够帮助流表分配模块提供决策数据.
5.3 κ最短路径算法
学习到全局拓扑关系后,数据包按单一最短路径转发,常用的路由算法有Dijkstra(迪杰斯特拉)算法和Floyd-Warshall算法等.但是要负载均衡在利用单一路由策略来保证性能最优,同时也要利用多路径策略来保证全局负载均衡.本文通过κ条最短路径算法来计算最优链路负载均衡路径.κ最短路径算法即KSP算法(Top-k-shortest paths),主要由改进智能算法,删除路径算法,偏离路径算法,限定无环算法等,本文利用Yen算法来计算κ最短路径.算法描述如下:
先用Dijkstra算法求出最短路径κ=1;
这条path中的任意两节点构成的边都可以作为偏离边,此边的开始节点为偏离节点
然后依次将这条path上的偏离边去掉求最短路径.去最短的为次短路径,κ=2;
依次循环,κ求出
function YenKSP(Graph, source, sink, K):
//Determine the shortest path from the source to the sink.
A[0] = Dijkstra(Graph, source, sink);
// Initialize the heap to store the potentialkth shortest path.
B = [];
for k from 1 to K:
//The spur node ranges from the first node to the next to last node in the previous k-shortest path.
for i from 0 to size(A[k-1])-1:
// Spur node is retrieved from the previous k-shortest path, k-1.
spurNode = A[k-1].node(i);
//The sequence of nodes from the source to the spur node of the previous k-shortest path.
rootPath = A[k-1].nodes(0, i);
for each path p in A:
if rootPath == p.nodes(0, i):
// Remove the links that are part of the previous shortest paths which share the same root path.
remove p.edge(i, i + 1) from Graph;
for each node rootPathNode in rootPath except spurNode:
remove rootPathNode from Graph;
//Calculate the spur path from the spur node to the sink.
spurPath = Dijkstra(Graph, spurNode, sink);
// Entire path is made up of the root path and spur path.
totalPath = rootPath + spurPath;
//Add the potential k-shortest path to the heap.
B.append(totalPath);
//Add back the edges and nodes that were removed from the graph.
restore edges to Graph;
restore nodes in rootPath to Graph;
if B is empty:
//This handles the case of there being no spur paths, or no spur paths left.
//This could happen if the spur paths have already been exhausted (added to A),
// or there are no spur paths at all - such as when both the source and sink vertices
// lie along a "dead end".
break;
// Sort the potential k-shortest paths by cost.
B.sort();
//Add the lowest cost path becomes the k-shortest path.
A[k] =B[0];
B.pop();
5.4 链路状态评估与流表分配
κ最短路径算法算出路径后,需要进行综合测评并确定优先级别为流表分配提供策略.路径优先级主要是路径跳数和设备的流量负载情况,Ryu控制器进行全局拓扑的学习以及网络状态实时监测提供相应的参数,设备的负载主要是综合报文、字节数来分析,端口的转发率来体现链路的负载情况.不同路径的评估,矩阵关系如下:
归一变化如下:
rp=1.0/eh
rp=1.0/log(p+0.1)
rp=1.0/log(b+0.1)
rp=1.0/e-r/50.0
设置权重向量Q=(a1,a2,…an),a1+a2+…an=1.
评估结果可以把Q和R合并计算
G=(g1,g2,…gn)
最后流表分配根据实时最优路由进行封装发送给OpenFlow交换机,OpenFlow交换机通过OpenFlow协议全局同步参数.链路上的数据包根据实时网络情况选择最优路径发送数据包.
6 实验结果与分析
实验平台采用虚拟化网络技术的Mininet,Mininet支持 OpenFlow、OpenvSwith 等各种协议,方便的模拟一个完整的网络主机、链接和交换机等网络设备.基于两个数据中心的网络拓扑,如图5所示
图5 Mininet数据中心的网络拓扑
通过Mininet模拟25台交换设备以及20台主机的胖树网络,并连接控制器Ryu后,指定源主机A和目标主机B之间发送广播UDP,中间间隔5S,大小128kb,间隔1m收集一次数据.代码截图如下:
图6 代码截图
通过对20台主机发送的数据流分析,得到的实验结果如下:
图7 数据流分析表
从图中可看到本文采用的多路径负载均衡方法,在网络中心负载较小时网络流量影响不明显,在网络中心负载较大时,负载分担路径增多,降低了网络延时,有效的缓解了数据中心的压力,增强了网络利用率.
结 语
针对数据中心网络流量负载均衡的问题,提出了基于SDN的多路径负载均衡的方法来解决.构建了整体架构,并详细解释了各个功能模块.最后通过Mininet仿真实验结果表明,利用SDN控制与转发的理念,能有效的降低网络的时延,提高网络利用率,效果满意.