一种多域SDN控制节点故障的双层检测方法与流程

文档序号:15455051发布日期:2018-09-15 00:53阅读:144来源:国知局

本发明属于软件自定义网络技术领域;涉及一种多域sdn控制节点故障的双层检测方法。



背景技术:

当前,网络已经渗入到社会的各个角落,成为人们生活中必不可少的基础设施之一。随着网络应用的快速发展,传统的网络交换设备承载着越来越多的控制逻辑,已难以适应网络虚拟化、云计算及相关业务发展对数据高速传输、资源灵活配置、协议快速部署的需求。相比于互联网上层应用和底层通信技术的快速发展,互联网的网络层和传输层基本架构并未发生太大的变化,这种完全基于tcp/ip的传输层和网络层架构既促进了互联网发展,也在某些方面逐渐成为瓶颈。为了解决这个问题,sdn创始人nickmckeown教授对计算机产业的创新模式和网络产业的创新模式进行了研究和对比后提出了推进网络产业创新的新型架构——软件定义网络(softwaredefinednetworking,sdn)。

sdn的诞生使整个网络更加开放,更加适应不同的业务和应用需求。sdn系统架构分为一个控制平面和数据平面,控制器位于上层应用与物理设备之间,控制器首先负责把网络中的各种功能进行抽象,建立具体的操作模型,并向上层提供编程接口,上层应用着重根据业务需求通过控制器与物理设备进行交互,网络中的设备通过控制器向应用平面传递信息。其核心技术openflow通过将网络设备的控制面与数据面分离开来,而实现网络流量的灵活控制,为核心网络及其应用的创新提供开发平台。sdn极大的降低网络的控制与管理成本,使网络的管理变得更加便捷和灵活,实现业务的自动化部署,提高资源的利用率,降低网络的建设和维护成本;创造性地实现了逻辑集中控制,支持网络资源的全局信息获取并能随时根据用户业务的需要进行资源的全局调配和优化,使得基于整个网络层面的流量工程、负载均衡等策略成为可能。

然而,sdn逐渐成为网络世界新的范式时,控制平面则承担了全部的逻辑与运算任务。做为控制平面的核心组件,sdn控制器的性能关乎整个sdn网络的性能表现。随着sdn商业部署的速度加快,sdn控制器性能越来越多的成为网络用户关心的焦点。

在最初的openflowv1.0标准文档中,网络采用单控制器体系结构,即只有一个控制器实现全网的集中控制。这种结构虽然实现简单,但是没有提供处于核心层的控制面的容错能力,比如控制面遭受恶意攻击后整个网络被控制。同时随着网络规模的迅速扩大,由于单控制器处理性能的限制将成为整个网络的性能瓶颈,进而使全局网络性能下降,甚至造成全网瘫痪。

为解决控制器故障给网络带来的性能问题,分布式控制器等多控制器方案早就已经被提出。相比单控制器而言,多控制器可以保证高可靠性,从而使得在某个控制器发生故障时,不影响整体网络的运行。另外,为保障业务不中断、不冲突,多控制器之间信息还要保持一致性,才能实现容错。当故障发生时,多控制器之间的信息一致性能为接管的控制器提供正确管理交换机的基础。然而,当前的一致性研究内容还仅仅关于控制器状态信息方面,而没有考虑交换机的状态信息,这将导致交换机重复执行命令等问题,而且由于没有关于交换机的状态的记录,交换机也无法回退到一个安全的状态起点。

随着网络规模的不断扩大,调试网络上的故障变成了一项困难的事情,为避免控制节点故障的发生并尽早检测到控制节点的故障问题是保证sdn网络高可用和可靠性的基础,并能为后续的故障恢复做好充分的准备,极大的减少恢复的时间。因此研究控制平面中控制节点故障的检测是保障网络正常运行的重要一环。



技术实现要素:

本发明提供了一种多域sdn控制节点故障的双层检测方法,优化并降低了故障检测时间、实现故障的快速检测与定位,并且降低网络中故障的间隔时间,提高全局网络的可靠性。

本发明的技术方案是:一种多域sdn控制节点故障的双层检测方法,该多域sdn网络架构的控制平面具有多个控制节点,其数据平面划分为多个子域,每个子域具有多个交换机,且每个子域中的所有交换机只能有一个主控制节点和从控制节点;所述检测方法包括以下步骤:

步骤s1,对控制平面进行心跳检测;其结果为:同一个控制节点c的心跳请求和心跳响应均故障;

步骤s2,进行数据平面的检测;控制平面监听数据平面的状态,当控制节点d接收到数据平面发送的lldp,控制节点c为子域p的主控制节点,且控制节点d为子域p的从控制节点,且lldp为子域p发送的;则控制节点c发生故障,同时启动故障恢复。

更进一步的,本发明的特点还在于:

其中步骤s1中心跳检测的具体过程包括以下步骤:步骤s11,构建控制平面中控制节点心跳检测循环队列;步骤s12,每个控制节点周期性的向其队列顺序的下一个控制节点发送含有时间戳的心跳请求,并且收到下一个控制节点的心跳响应;步骤s13,控制平面中的同一个控制节点c的心跳请求和心跳响应均丢失。

其中步骤s13中当某一个控制节点存在心跳响应丢失,则该控制节点连续向下一个控制节点发送3个心跳请求,若该控制节点未获得心跳响应,则判断该控制节点存在心跳响应丢失。

其中步骤s11中控制节点按照相邻域相邻的原则,以循环队列的排序方式为排序依据,构建得到控制节点心跳检测循环队列。

其中s12中控制节点接收到心跳请求后,读取其中的时间戳,并且得到与当前时间的差值,从而调整时间周期。

其中步骤s2中数据平面检测的具体过程包括以下步骤:步骤s21,子域p中的交换机向主控制节点c发送ofpt_packet_in消息,并等待接收新流表;步骤s22,子域p中的交换机未收到新流表项,此时向主控制节点c发送ofpt_echo_request消息;步骤s23,子域p中的交换机未收到主控制节点c发送的ofpt_echo_reply消息,则子域p中的交换机发送lldp给从控制节点d。

其中步骤s2中从控制节点d接收到非自身管理子域交换机发送的lldp消息后,控制平面将步骤s1中得到的故障控制节点c与发送lldp的交换机所在域的主控制节点进行对比;若为同一控制节点,则判断该sdn的控制平面中控制节点c故障;若为不同的控制节点,则控制平面丢掉lldp。

与现有技术相比,本发明的有益效果是:将sdn网络架构控制节点的故障检测划分为控制平面的检测与数据平面的检测,最后通过双层检测的依据共同判断并定位故障的控制节点。这种双层的故障检测机制,通过不同层面的状态切换,可以快速检测与定位故障,细粒度的故障检测过程可以准确的定位到故障控制节点,缩短了故障检测的时间,并减少因故障恢复而导致的故障间隔,最终保证了全局网络的可靠性。

更进一步的,针对控制层面提出的循环队列检测方式,在提高检测有效性的同时也避免了因检测信息占用过多的带宽而造成的资源浪费。带有时间戳的心跳检测不仅提供最新的检测信息,还能通过计算来判断当前控制链路的拥塞程度,为故障恢复提供参考因素。

更进一步的,当多个sdn互相联系时,需要对控制平面确定的故障控制节点和数据平面确定的故障控制节点进行进一步的对比确认,从而精确判断发生故障的控制节点。

附图说明

图1为本发明的流程示意图;

图2为本发明的sdn中控制平面与数据平面中交换机的状态切换示意图;

图3为本发明中sdn的部署架构图。

具体实施方式

下面结合附图和具体实施例对本发明的技术方案进一步说明。

本发明提供了一种多域sdn控制节点故障的双层检测方法。其中多域sdn场景下,控制平面由n(n>1)个分布式控制节点共同构成。当多域sdn初始化完毕后,分布式的控制节点之间不仅需要及时的同步全局的网络拓扑信息以保证各自存储的网络拓扑信息的准确性与一致性,而且需要周期性的检测其他控制节点的状态,以确保全局的网络性能,防止因控制节点失效而导致部分网络瘫痪。

在初始化建立控制平面的过程中,根据多域sdn的网络架构,每个控制节点都将作为数据平面子域中一部分交换机的主控制节点,并且这些子域互不重合,同时为避免控制平面的检测信号占据带宽资源,控制节点之间将按照相邻子域相邻的顺序进行排列,并最终排序成为循环队列,便于执行控制节点之间的心跳检测。

具体的,一个sdn的控制平面共有m个控制节点c={c1,c2,……,cm},其数据平面划分为n个子域p={p1,p2,……,pn},且数据平面中共有n个交换机,每个子域包含任意p个交换机s={s1,s2,...,sp},并规定一个子域p中的所有交换机只能有一个主控制节点和一个从控制节点。

如图3所示,控制平面由控制节点a、b和c共同构成,由于多域sdn网络为分布式架构,所以三个控制节点所存储的全局网络拓扑视图保持一致;数据平面由交换机s1-s9共同构成一个全局的数据平面,控制节点a、b、c将数据平面分割成三个子域,其中交换机s1-s3构成的子域由控制节点a作为其master控制节点,交换机s4-s5构成的子域由控制节点b作为其master控制节点,剩余交换机由控制节点c作为master控制节点,这样数据平面就由三个控制节点划分为三个互不重合的子域。

根据控制平面的检测需要,这三个控制节点按照子域相邻的方式排列成a、b、c、a…的循环队列,并周期性的发送带有时间戳的心跳请求。

为了方便理解本方法的运行过程,将检测过程中的不同过程划分为不同的状态,具体的控制平面中进行心跳检测的过程为控制平面故障检测状态,当控制平面中心跳检测发现某个控制节点发生心跳请求丢失和心跳响应丢失时,控制平面为故障预警状态;当控制平面确定出某个控制节点可能发生故障时,数据平面进入故障检测状态,并且当数据平面中的子域与其主控制节点之间无通信相应,则数据平面为故障预警;当数据平面与控制平面共同确定某一个控制节点发生故障时,此时sdn进入故障恢复状态。

因此,控制平面与数据平面的状态切换过程如图2所示,控制平面在网络正常状态下都保持故障检测的状态,以保障多域sdn架构的可靠性,同时确保快速检测故障实现毫秒级的故障恢复,保证网络的整体性能;控制平面确定某一个控制节点可能故障时,控制平面进入故障预警状态,并且数据平面进入故障检测状态;当数据平面的流表请求无响应且echo请求无响应时,数据平面进入故障预警状态;控制平面和数据平面共同确定发生故障的控制节点之后,sdn为故障恢复状态。

本发明提供的多域sdn控制节点故障的双层检测方法的流程图如图1所示,以图3所示的sdn网络架构为例,对该方法进行具体说明。

首先,进行控制平面检测;多域sdn网络架构初始化完成之后,控制平面为故障检测状态,即控制平面中的控制节点之间启动心跳检测,即控制节点a向控制节点b发送含有时间戳的心跳请求并及时接收来自控制节点c发送的含有时间戳的心跳请求;控制节点b接收到控制节点a发送的含有时间戳的心跳请求,并向控制节点a发送心跳相应,同时控制节点b向控制节点c发送含有时间戳的心跳请求。

判断控制平面的心跳检测是否正常;若某一个控制节点出现心跳检测异常,则首先判断是否由于心跳响应丢失导致该异常;如果不是,则判断是否由于心跳请求丢失导致该异常;如果存在心跳响应丢失,则该控制节点立刻发送三个连续的心跳请求给其相邻的下一个控制节点。

当控制平面中发生心跳请求丢失和心跳相应丢失均为同一个控制节点,则该控制节点可能发生故障;此时控制平面进入故障预警状态,此时控制平面监听数据平面,进行数据平面检测,数据平面为故障检测状态。

然后,进行数据平面检测;控制平面监控是否接收到数据平面的交换机发送的lldp消息,如果接收到lldp消息,则判断控制平面检测得的可能故障控制节点与数据平面中发送lldp消息的交换机的主控制节点为同一控制节点;如果是同一控制节点,则判断该控制节点为故障控制节点,同时启动故障恢复;如果不是同一控制节点,控制平面丢掉该lldp消息。

其中控制平面中控制节点之间心跳检测的具体过程为:

任意控制节点ci以时间t为周期,向其循环队列相邻的下一个控制节点ci+1发送带有时间戳tci的心跳请求,且接收控制节点ci+1发送心跳相应;为每个控制节点设置一个故障预警计数li,其初始值为0。当控制节点ci发生心跳请求丢失或者心跳响应丢失时,li+1,且当控制节点ci同时发生心跳请求丢失和心跳响应丢失,即li=2的情况下,则该控制节点ci可能故障,此时控制平台为故障预警状态,同时控制平台监听数据平台,数据平台为故障检测状态。

在上述过程中,任意控制节点ci在某个周期发送心跳检测给控制节点ci+1后,无法收到来自控制节点ci+1的心跳响应消息确认,则立刻发送连续的三个心跳请求给控制节点ci+1,如果仍未收到任何确认消息,则控制节点ci将自身状态切换为“故障预警”,并告知其他控制节点,控制节点ci+1可能故障,非故障控制节点的“故障预警”计数li+1。同样,在控制节点ci没有收到任何确认消息的同时,与控制节点ci在循环队列上间隔的控制节点ci+2未收到任何心跳检测,则亦将自身状态切换至“故障预警”且“故障预警”计数li+1,并告知其他控制节点,控制节点ci+1可能故障。在控制平面每个控制节点均收到来自两个不同控制节点的“故障预警”信息,即控制平面中控制节点的“故障预警”计数等于2,并均指明故障的控制节点为控制节点ci+1,则控制平面为故障预警状态,并等待数据平面的信息。

在上述过程中,当控制节点ci+1在限定的超时检测t间隔内收到来自循环队列上一个控制节点ci的心跳检测信息,并通过计算当前时间tci+1与心跳信号所携带的时间戳tci的差值δ=tci+1-tci,其中理想情况下差值δ∈[t,(ε+1)t],ε→0可以判断当前控制节点ci+1与ci是否运行正常,差值大小反映控制节点a与b之间的链路拥塞程度;控制节点ci+1收到来自控制节点ci的心跳检测后立刻做出响应,以告知控制节点ci以及周期t的修正参数θ,当δ≤(ε+1)t时,修正参数θ为负,表示为控制节点ci的心跳周期保持不变;当δ≥(ε+1)t时,修正参数θ为正,表示当前控制平面链路状态较差,容易因链路拥塞而导致控制节点失效,因此需要缩短心跳检测的时周期t,心跳周期与修正参数之间的关系为t=t-θ。

多域sdn场景下,每个交换机均只属于一个子域,并有一个主控制节点和从控制节点。同一个域中,交换机的主控制节点相同,但是不一定有相同的从控制节点。主控制节点具有最高权限可以对交换机进行修改等操作,而从控制节点只作为交换机的备份控制节点,可以读取交换机信息,但不能做修改操作。在多域sdn初始化建立后,交换机与控制节点的通信主要包含controller-to-switch、异步以及对称三种消息类型,其中后两种的消息类型由于其对称性,因此可以辅助进行控制节点故障检测的判断依据。当数据平面为故障检测状态,即控制平面监听数据平面时,其具体过程为:交换机需要请求控制节点下发新的流表项时,给控制节点发送ofpt_packet_in消息并等待流表下发;当交换机无法收到来自控制平面的ofpt_packet_out消息后,将自身状态切换为“故障预警”,并向控制平面发送ofpt_echo_request消息;如果交换机收到来自控制平面的ofpt_echo_request消息,则交换机将撤回“故障检测”状态,如果交换机未收到ofpt_echo_reply消息,则立刻切换至“故障恢复”;处于“故障恢复”状态的交换机,立刻向控制平面发送lldp消息后等待来自控制平面的故障恢复方案。

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