专栏首页SDNLABRYU多控制器通信

RYU多控制器通信

作者简介:满明磊,山东科技大学本科生,研究方向SDN

随着SDN控制平面不断扩展,单一的控制器很难满足需求,这时候部署多个控制器是势在必行的,一旦部署了多控制器,如何使它们协同工作就成了亟待解决的问题。Ryu是基于Python的控制器,不像java类型的控制器一样带有集群功能,不过好在比java方便,本篇文章就介绍一下如何利用C/S架构进行多控制器之间的通信。

设计原理

因为控制器一旦运行,就要占用一个TCP端口,如果跟其他控制器直接通信,需要再占用其他端口,如果控制器数量很多,那么控制器全互联的代价很大,配置也很不方便。为了解决这个问题,我们设置一个第三方服务器,其他的控制器都与服务器建立连接,把信息发送给服务器,这样既能够让控制器专注于控制网络,也使得网络层次更加分明。每个控制器相当于一个客户端,自己持有自己那部分网络的信息,同时为了获得其他网络的信息而不断与服务器进行交互。

为了创建一个高效方便的服务器,我们使用gevent的StreamServer模块。

gevent 是一个基于协同程序的Python网络库,它以greenlet为核心,提供了非常高的并发性能,简单的说就是可以让多线程更加高效,StreamServer是一个通用的TCP服务器,当客户端连接到它的时候可以运行用户提供的处理函数。

StreamServer的定义是这样的:

在Ryu中lib/hub.py中可以找到这个类的定义。

服务器设计

作为服务器,我们需要监听客户端的请求,同时还需要与客户端通信,还要存储客户端传来的数据,那么它的结构是下面这样

服务器框架

每一个控制器连接到服务器时,服务器都会分出一个线程来建立连接,然后再启动用于服务器和控制器通信的线程,当控制器传过来数据时,负责连接控制器的线程会把数据存到服务器中。传输的消息采用json格式,方便读取。

客户端设计

作为客户端的控制器只需要在启动后连接到服务器(要先保证服务器已经启动),然后创建线程接受和发送消息即可。要发送的消息储存再发送队列,由发送线程周期性发送。

实验验证

下面做一个简单的检测全局拓扑的实验

拓扑是这样的:

每个控制器的输出表明,每个控制器只能检测到连接到自己的交换机之间的链路

而服务器的输出则展示了全局拓扑

总结

多控制器的应用越来越广泛,C/S架构是一种简单的多控制器之间通信模式,通过服务器收集所有控制器的信息,可以实现网络模块化,分布式部署以及交换机迁移等功能,对于管理者来说也十分方便,源码已上传Github,希望本文能够对读者有所帮助。

本文分享自微信公众号 - SDNLAB(SDNLAB),作者:满明磊

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何提高SDN可拓展性

    Software Defined Networking是一种控制平面和数据平面分离的可编程的网络架构,目前已经有许多商业落地案例。在部署SDN时,往往会因SDN...

    SDNLAB
  • 脱坑神器,让你一步了解ODL控制器集群

    一、控制器集群基本知识 1.1 Consensus一致性 Consensus一致性是指多个服务器在状态达成一致,但是在一个分布式系统中,因为各种意外可能,有的...

    SDNLAB
  • SDN开发笔记(四):md-sal应用程序开发

    环境搭建 继前3篇文章SDN开发环境的搭建(win7环境)、SDN控制器的使用(ubuntu环境搭建、controller使用、mininet的使用)和ODL源...

    SDNLAB
  • VR开发--SteamVR框架工具(1):VRTK

    1、GitHub远程仓库: git clone https://github.com/thestonefox/SteamVR_Unity_Toolkit 2...

    雷潮
  • iOS多控制器之UINavigationController&UITableBarController1. 多控制器2. UINavigationController3. UITableBarCont

    stanbai
  • 如何提高SDN可拓展性

    Software Defined Networking是一种控制平面和数据平面分离的可编程的网络架构,目前已经有许多商业落地案例。在部署SDN时,往往会因SDN...

    SDNLAB
  • PHP-TP框架中的控制器

    表示默认情况下,控制器无特殊后缀。例如 Index控制器,文件名为Index.php

    cwl_java
  • Jmeter(四)_16个逻辑控制器详解

    1、 Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in which Samplers a...

    飞天小子
  • 浅析 Kubernetes 控制器的工作原理

    Kubernetes 中运行了一系列控制器来确保集群的当前状态与期望状态保持一致,它们就是 Kubernetes 的大脑。例如,ReplicaSet 控制器负责...

    米开朗基杨
  • JMeter逻辑控制器08

    前言 在jmeter中逻辑控制器主要分类两类: 控制jmeter测试计划中节点的逻辑执行顺序等等 对jmeter的节点进行分组,方便结果统计等等 进一步简化下,...

    苦叶子

扫码关注云+社区

领取腾讯云代金券