【分享正文】

前言

无论你是基于SDN做物理网络的大二层,还是基于SDN做云计算的网络支撑。商用的基于SDN产品都有一个不可避免的门槛,就是SDN controller的高可用。

交换机已经失去了对网络的控制权,控制转发分离意味着SDN controller需要更加稳固。如果SDNcontroller出现单点故障,这样整个网络系统都会失去控制,甚至会带来不可逆的灾难。

在我们设计SDN controller的部署模式的时候,就需要充分考虑SDNcontroller的单点问题。目前也有一种常用的手动去解决SDNcontroller的单点问题,就是HA。

大部分的开源SDN controller都支持HA(如:ODL、Flooldlight),哪怕我们开发设计一个HA模式也不是一件代价很大的事情。HA模式确实可以解决SDN controller的单点故障,但是无法解决SDNcontroller的首包处理的单点性能瓶颈。这也是我们今天讨论的重点,分析几种SDN controller的部署模式。

SDN controller如何做高可用?

在讲述SDN controller的部署模型之前,我们还是先了解一下SDN controller的高可用实现原理。有了原理的支撑,对于后续的模型会有更清晰的理解。

其实OpenFlow(>= 1.2)协议本身就支持对交换机的角色管理。对于交换机,SDN controller有Master、Slave两种角色,并且在同一时间只有一个Master。

不同的角色有不同的权限,当然这个可以通过SDN controller修订。简要说Master角色可以接收首包、推送流表、监听交换机的信息(交换机的ADD、Remove、Port change)等等,而Slava角色只能监听交换机的信息。SDN controller可以通过OpenFlow协议要求交换机更换角色,SDN controller的高可用就是基于这样的规则下实现的。假设其中一个SDN controller出现故障,另外的SDNcontroller马上要求交换机切换角色即可。

SDN controller模型

  SDN controller HA模型图

如上图:这就是SDN controller HA模型。当Master controller出现故障,Slavecontroller通过心跳线感知,马上要求vSwitch切换角色。Slave controller变成Master。等故障的controller重启,角色变回Slave即可。

这个方案有一个明显的缺点,同一时间只有一个SDNcontroller在工作,这样整体的网络规模受限于单个SDNcontroller的首包处理性能。Slave controller的存在无法分担首包的压力,这样的工作态度不太好。

  SDN controller AA模型图

如上图:这是HA模型的演进版,SDN controller1既是vSwitch1、vSwitch2的Master,又是vSwitch3、vSwitch4的Slave。SDN controller2既是vSwitch3、vSwitch4的Master,又是vSwitch3、vSwitch4的Slave。假设SDN controller1出现故障,SDNcontroller2会接管vSwitch1,vSwitch2。这样的设计有效地分摊了SDN controller的首包压力。

AA模式在技术上其实存在几个难点,第一,SDN controller之间处理心跳以外,还需要知道各自接管的交换机信息。第二,SDN controller之间需要实现负载均衡,假设新的交换机接入进来,需要选择最空闲的SDN controller接管。第三,自修复功能,假设有交换机脱管了,需要重新接管过来。第四,远程方法问题,应用层不可能知道哪个Controller现在负责哪个交换机,这时候就需要SDNcontroller实现多控制器之间的远程方法调用。只要解决这些技术难点,SDN controller AA模型落地不成问题。也可以满足一定规模的网络。

竟然AA模型已经做出来的,我们离集群模型还远吗?SDNcontroller cluster模型最难的地方是多控制器之间的同步问题。分析一下两种最常见的SDN controller的同步模型。

自同步模型:

  SDN controller Cluster模型

如上图:AA模型只需要一对一的同步,但是如果N多个Controller之间,就类似与画星星一样,这样模型的收敛时间会变得很长,而且SDN controller之间选举算法也变得非常复杂。我们需要针对这样的模型设计高可靠容错的机制,因为一旦这个模型数据同步出现问题,我们很难排除究竟是哪个Controller出现坏数据。不过只要算法做得足够高效,并且合理规避风险,自同步模型是完全可以满足大规模网络的需求的。SDN controller的扩张性也有足够高。

  统一管理模型(三层模型)

如上图:既然SDN controller之间的同步如此复杂,我们可以单独将同步这个功能抽离出来变成一个角色。这个角色负责多Controller之间的同步,而Controller就可以专心负责业务功能,不用过多关系同步的问题。这样的设计模型我们统称“三层模型”。也是很多Cluster方案在演进过程中的必经之路。这样的模型在HP的一个项目中,有见过。自同步模型的问题都在这个方案上得到很好解决。但是Sync Manager却成为了单点,所以SyncManager需要做HA。假设SDN controller的数量达到一定的量级之后,SyncManager也会网络收敛的瓶颈。这样岂不是SyncManager需要做Cluster?四层模型?三层模型在我的观点上已经是极限了。所以Sync Manager也不是万灵药。

我们回到云计算,假设Cluster模型扩张到最大规模也就是在每个NC(计算节点)上运行一个SDN Controller。这时候,其实我们还需不需要做SDNcontroller的角色切换呢?

  SDN controller分布式模型

如上图:SDN controller分布式模型最大的特点是SDNcontroller只负责管理本地的交换机,SDNcontroller之间不存在心跳,假设SDNcontroller1发生故障了,就重启SDN controller1进程。如果NC宕机了,就迁移VM。这样也是一个高可用方案。SDN controller之间的数据同步是通过分布式数据库完成。在云计算中,大量使用的分布式数据库,技术相对成熟。所以我们不用但是分布式数据库的可靠性。我们只需要设计好远程方法调用,让应用对分布式无感知。这样的设计SDN controller的首包处理能力会随着NC的增加而提升。并且如果其中一个实例出现大量的首包(如:DDos攻击),影响范围也只是VM所在的NC,这样我们可以做出很多有效的处理。这样的模式,我认为是未来SDN云网络发展的一个重要的分界线。只要在真正意义上,摆脱SDN controller的瓶颈,才能将SDN推向一个产品化之路。

总结

我们分析了很多SDN相关的模型,这样模式都是在实际的项目场景中,发展演进的产物。我们在设计SDN网络的过程中,不能只看到SDN的长处,而忽略它的短处。SDN的集中化管理、控制转发分离特性恰恰是我们设计者的痛点。我们既要原汁原味地保留SDN的特性的同时还需要坚持走高可用、高扩展产品化之路。所以逻辑值集中,模型上分布才是SDN技术的一大精髓。
本文转自d1net(转载)

技术干货 | SDN controller高可用之路相关推荐

  1. 阿里10年分布式技术沉淀:阿里高可用体系核心缔造者、全链路压测创始人告诉你!...

    原文链接 7月27日,云栖社区.阿里中间件将举办首届阿里巴巴中间件技术峰会,揭秘阿里10年分布式技术干货.目前活动官网已上线:https://yq.aliyun.com/promotion/262,  ...

  2. 阿里10年分布式技术沉淀:阿里高可用体系核心缔造者、全链路压测创始人告诉你!

    原文链接 7月27日,云栖社区.阿里中间件将举办首届阿里巴巴中间件技术峰会,揭秘阿里10年分布式技术干货.目前活动官网已上线:https://yq.aliyun.com/promotion/262,  ...

  3. 一页技术:B站高可用架构实战总结

    最近,在云+社区听到了B站技术总监毛剑关于B站高可用的实践的分享,内容丰富,干货满满,本人对该分享的内容进行了总结,形成了思维导图的形式,便于以后快速回顾. 参考文献: Google - Site R ...

  4. 干货 | 阿里巴巴HBase高可用8年抗战回忆录

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 前言 2011年毕玄和竹庄两位大神将HBase引入阿里技术 ...

  5. 技术人的成长手册|勤思考、反内卷,史海峰关于技术人职业『高可用』的探索与实践...

    经历过谷底的低迷,也有过高潮的狂欢.也许史海峰的经历和思考,能够给那些只经历过互联网繁荣.时下正在经受所谓『互联网寒冬』的年轻工程师们一些新的职业感悟. 2022 年虽然还有 3 个月,但这已经注定是 ...

  6. 【稳定性day8】付钱拉支付系统的高可用之路 - 避免和歼灭的两种打法

    本文来自当当付钱拉冯忠旗老师的分享. 对于互联网应用和企业大型应用而言,多数都尽可能地要求做到7*24小时不间断运行,而要做到完全的不间断运行可以说"难于上青天". 为此,对应用的 ...

  7. 数据库高可用(HA)技术有哪些?

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 数据库高可用是一个复杂的系统工程,本文主要介绍了几种数据库高可用的基本技术 ...

  8. SQL Server - 高可用与灾难恢复(HADR)技术 -- AlwaysOn可用性组(理论篇)

    因为篇幅原因,AlwaysOn可用性组被拆成了两部分:理论部分和实战部分.而实战部分又被拆成了准备工作和AlwaysOn可用性组搭建. 三篇文章各自的链接: SQL Server ->> ...

  9. 【秒杀购物商城业务服务】「分布式架构服务」盘点中间件服务的高可用模式及集群技术的方案分析

    秒杀购物商城业务服务-分布式架构介绍 基于MySQL数据库集群技术实现服务的高可用 基于Tomcat的集群负载机制实现Tomcat服务器的高可用 基于Nginx负载均衡机制实现负载均衡(介绍和配置) ...

  10. 蚂蚁集团俞仁杰:金融级云原生之多活容器集群高可用建设实践

    本文整理自蚂蚁集团金融云产品技术部SOFAStack产品专家俞仁杰在2020 GIDC全球互联网数据大会的分享.详细讲解了云原生架构下的多活高可用平台和产品建设相关经验和观点. 过去几年是云原生理念高 ...

最新文章

  1. LTE-V2X车联网无线通信技术发展
  2. IDEA突然自动关闭然后无法启动
  3. 碎片化学习前端资料分享~
  4. redis动态扩展内存
  5. irule jar包无法导入_poi表格的导入导出
  6. 重庆理工大学图像处理实验二:图像增强
  7. mysql查询最接近的记录
  8. 电子签的背后江湖:腾讯、蚂蚁、字节跳动的较量
  9. Word2003入门动画教程75:在Word中插入文本框
  10. Digital Radiography厂家
  11. 【漏洞复现-maccms-命令执行】vulfocus/maccms-cve_2017_17733
  12. 【项目管理】如何制定进度计划?
  13. 设置Win10 输入法默认简体中文
  14. Java调用百度AI开放平台API
  15. html怎样用for循环添加表格,萌新提问!!!如何用for循环循环表单?
  16. 揭开光宇华夏高层几位伪君子炒作的真相
  17. rk3399 rv1126上使用wk2124
  18. 学生学籍管理系统包括成绩c语言,学籍管理系统设计C语言代码
  19. Iviews视频搜索引擎
  20. 企业微信公告可以发布图片吗?

热门文章

  1. Python使用wxpython制作简单文本编辑器
  2. 【python|多进程】打印进度条
  3. 微波遥感SNAP(一)——基于Sentinel-1雷达数据重建数字高程模型
  4. 【统计分析】2 地理统计
  5. C++ error C3867 请使用 ““ 来创建指向成员的指针
  6. 未来的计算机想象,关于未来电脑的想象作文
  7. mysql 导入1045错误_解决MyQL数据库中1045错误的方法——Windows系统
  8. Java多线程为什么使用while循环来调用wait方法
  9. 这场直播,我们把 Apache 顶级项目盛会搬来了!
  10. 连麦互动技术及其连麦调研