RYU多控制器小结

本文介绍了RYU多控制器环境下,主从控制器的工作原理和数据同步策略。重点讲解了主控制器如何处理数据同步,从控制器的角色以及切换至主控制器的过程。通过Zookeeper进行角色判断和数据交换,确保多控制器模式下的网络稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、多控制器需要同步的信息

  • 路由信息配置
    • 单播路由算法类型
    • 单播路由算法参数
    • 多播路由算法参数
  • ARP缓存表信息
  • 主机发现信息
  • 用于失效恢复的路由信息维护

二、主从控制器工作

由多控制器模块与zookeeper通信,获知当前控制器在zookeeper的角色(master or slave)。
本方案采用逻辑主从,即对于交换机而言每个控制器的角色都是EQUAL,但控制器依据自身的角色进行工作。

1、主控制器模式–数据同步

当zookeeper判断当前控制器为master时,多控制器模块向其他模块发送事件,通知其余模块当前控制器的角色。当packet_in模块得知当前为master时,开始处理交换机发送的packet_in消息;
路由管理模块、代理ARP模块以及主机管理模块发送EventCreateZnode事件至多控制器模块,由多控制器模块执行

  @set_ev_cls(multictrler_event.EventLocked)
    def locked_handle(self, ev):
        self.logger.info("this controllers is:%s", ev.role)
        if ev.role is 'master':
            self.send_event_to_observers(multictrler_event.EventCreateZnode("arp_table", ""))
            self.send_event_to_observers(multictrler_event.EventWatchZnode("arp_table"))
        elif ev.role is 'slave':
            self.send_event_to_observers(multictrler_event.EventWatchZnode("arp_table"))

多控制器模块监听到EventCreateZnode、EventWatchZnode事件,并创建新节点,监听节点数据是否更新。

   @set_ev_cls(multictrler_event.EventWatchZnode, MAIN_DISPATCHER)
    def handle_watch_znode(self, ev):
        flag = ev.flag
        watch_file = PATH + FILE_PATH + flag + ".json"
        fp = open(watch_file, 'w')
        fp.close()
        path = DATA_PATH + "/" + flag
        watch = Watcher(self, path, self.handle, self.role)
        # greenle = gevent.spawn(watch._watcher)
        # greenle.join(
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值