ONOS动态扩容面临的难点与解决方案

简介:

一、ONOS的一致性保障

ONOS主要包括两类一致性机制,最终一致性和强一致性,最终一致性采用乐观异步复制和基于Gossip的熵减方式来实现,乐观异步复制可以高效的实现最终一致,但是一旦集群中发生节点脱离集群或者重启的情况整体集群就会出现越来越失序的现象,基于Gossip的熵减方案就是为了解决此类问题,集群中的节点定期(通常间隔三到五秒)地随机选择一个节点进行数据同步,大多数情况下,熵减互动是平常的,因为每个控制器已经知道发生在网络中的每一个事件。 但是当一个控制器状态稍微漂移时,这个机制很快就会检测到这个状态,并使控制器重新同步。 这种方法还具有快速将新加入的控制器和其他的控制器进行同步的好处。 新加入的控制器与现有控制器之间的第一次熵减互动将很快实现节点同步,而不需要单独的备份/发现机制。

ONOS的一致性保障

在动态扩容的情况下,动态节点的加入会对最终一致性产生影响,表现为新的节点加入集群,在和其他节点的熵减交互以及乐观复制中最终和整体集群达到一致。这部分涉及的子系统包括Device和Link子系统。

而Device,Link子系统也会影响到Topo子系统,所以在进行节点动态扩容时,新加入节点在实现最终一致的过程中如果不承载业务的话影响较小。

强一致性的保障通过Raft算法来实现,ONOS考虑到容错和性能的通盘考虑,选择了分区机制和备份冗余机制。

ONOS的一致性保障

分区机制是指ONOS对任意一个支持强一致性的分布式原语(主要包括其分布式数据结构)支持分区机制,而在每一个分区中支持多个节点之间的备份冗余,实现了CAP理论的折衷性考虑。

二、ONOS逻辑时钟

在分布式系统中时钟是个重要的概念,ONOS选取了以MasterShip Term和本地事件序列号的方式来进行统计。其理论依据如下:

  1. 网络控制器的控制离不开设备,所有的网络事件都是最终都能关联到设备上
  2. MasterShipTerm是全局强一致的,依赖这个数据做时钟的可靠性高
  3. 控制器依赖从设备收上来的信息来发出网络事件,而真正抛出事件的只有Master,Master维护着对应设备上报事件的序列号,在每一个Term周期内从0开始单调递增

三、动态扩容对强一致性的影响

当前ONOS大部分子系统都采用的是强一致性的方式,包括:FlowRule, Host, MasterShip等,其中MasterShip是整体集群数的强一致,其他子系统是基于Partition内部节点的强一致。所以ONOS集群的宕机风险和Partition Member数量有关,如果Partition Member只有三个节点,那么两台设备宕机就会造成系统问题。

在节点动态加入集群的场景下,最大的问题是要防止出现脑裂,所谓脑裂就是一个集群中同时出现两个Leader的场景,在集群节点减少的情况下不会出现,但是在集群添加节点时会出现这种场景,如下图所示:

ONOS的一致性保障

在上图所示的场景之下,假如新的Server先以新配置启动,而旧的Server逐步以新配置运行,此时会存在新配置的大多数和旧配置的大多数共存的情况,操作不慎会导致集群存在两个Leader进而脑裂的情况。

ONOS的raft算法采用Copycat实现,其支持动态节点的加入,但是这个方法不同于Raft论文中提到的两阶段添加的方案,而是采用了单节点添加方案来避免出现脑裂的情况,这样使得方案更简单但是相对操作会麻烦一些。另外在新加入节点开始进行数据同步时,业务要尽量避免写入。以免影响读写性能。

四、ONOS带状态重启

带状态重启也是生产环境中非常重要的一点。ONOS大部分分布式数据结构都是支持持久化的,部分不支持的主要是最终一致性数据结构。 这其中ECMap必须配置持久性选项才能将条目写入磁盘,否则在集群关闭时会丢失。

但是大多数分布式原语(强一致性)使用了Raft集群,并且它们是持久化的。 ConsistentMap,ConsistentTreeMap,DocumentTree,DistributedSet,LeaderElector以及这些基元的所有Async *版本都使用单个Raft分区或所有Raft分区。 这些原语有效地由持久的复制日志支持,该日志将从该/ data目录中读取,并在重新启动群集时重播。


原文发布时间为:2017-11-14

本文作者:江睿

本文来自云栖社区合作伙伴51CTO,了解相关信息可以关注51CTO。

目录
相关文章
|
2月前
|
存储 前端开发 JavaScript
前端技术趋势:在动态变化中寻求稳定
【10月更文挑战第7天】前端技术趋势:在动态变化中寻求稳定
62 0
|
4月前
|
安全 网络安全 网络虚拟化
优化大型企业网络架构:从核心到边缘的全面升级
大型企业在业务运作中涉及多种数据传输,涵盖办公应用、CRM/ERP系统、数据中心、云环境、物联网及安全合规等多个方面。其复杂的业务生态和全球布局要求网络架构具备高效、安全和可靠的特性。网络设计需全面考虑核心层、汇聚层和接入层的功能与冗余,同时实现内外部的有效连接,包括广域网连接、远程访问策略、云计算集成及多层次安全防护,以构建高效且可扩展的网络生态系统。
优化大型企业网络架构:从核心到边缘的全面升级
|
4月前
|
边缘计算 Kubernetes Cloud Native
边缘计算问题之中等规模标准集群的配置与大规模的差异如何解决
边缘计算问题之中等规模标准集群的配置与大规模的差异如何解决
39 1
|
3月前
|
运维 监控 数据可视化
高效运维的秘密武器:自动化工具链的构建与实践在当今数字化时代,IT系统的复杂性和规模不断增加,使得传统的手动运维方式难以应对日益增长的业务需求。因此,构建一套高效的自动化工具链成为现代运维的重要任务。本文将深入探讨如何通过自动化工具链提升IT运维效率,确保系统稳定运行,并实现快速响应和故障恢复。
随着企业IT架构的不断扩展和复杂化,传统的手动运维已无法满足业务需求。自动化工具链的构建成为解决这一问题的关键。本文介绍了自动化工具链的核心概念、常用工具及其选择依据,并通过实际案例展示了自动化工具链在提升运维效率、减少人为错误、优化资源配置等方面的显著效果。从监控系统到自动化运维平台,再到持续集成/持续部署(CI/CD)的流程,我们将一步步揭示如何成功实施自动化工具链,助力企业实现高效、稳定、可靠的IT运维管理。
|
4月前
|
物联网 测试技术 持续交付
持续部署的内涵和实施路径问题之持续部署过程中需要控制过程成本并保持高效的问题如何解决
持续部署的内涵和实施路径问题之持续部署过程中需要控制过程成本并保持高效的问题如何解决
|
4月前
|
Cloud Native
核心系统转型问题之平衡核心架构中的功能性与非功能性需求如何解决
核心系统转型问题之平衡核心架构中的功能性与非功能性需求如何解决
|
5月前
|
存储 缓存 监控
通用研发提效问题之动态调整干预能力,如何解决
通用研发提效问题之动态调整干预能力,如何解决
|
5月前
|
数据库
交易链路设计原则&模式问题之在软件开发中,平衡业务需求和平台能力的边界,如何解决
交易链路设计原则&模式问题之在软件开发中,平衡业务需求和平台能力的边界,如何解决
|
机器学习/深度学习 数据采集 人工智能
人工智能如何解决数据中心的工作负载管理难题
随着数据中心工作负载量呈螺旋式增长,越来越多的企业开始寻求采用人工智能技术帮助他们减轻IT团队的管理负担,同时提高效率,并削减开支。
371 0
|
存储 弹性计算 监控
多元化数据管理与快速弹性能力,确保沙盒网络业务的稳定性
多元化数据管理与快速弹性能力,确保沙盒网络业务的稳定性
1303 0
多元化数据管理与快速弹性能力,确保沙盒网络业务的稳定性