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

一、ONOS的一致性保障

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

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

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

强一致性的保障通过Raft算法来实现,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的场景,在集群节点减少的情况下不会出现,但是在集群添加节点时会出现这种场景,如下图所示:

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

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

四、ONOS带状态重启

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

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

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

本文作者:江睿

时间: 2024-12-24 04:28:14

ONOS动态扩容面临的难点与解决方案的相关文章

JS动态计算移动端rem的解决方案_javascript技巧

在做移动端web app的时候,众所周知,移动设备分辨率五花八门,虽然我们可以通过CSS3的media query来实现适配,例如下面这样: html { font-size : 20px; } @media only screen and (min-width: 401px){ html { font-size: 25px !important; } } @media only screen and (min-width: 428px){ html { font-size: 26.75px !

MongoDB 1.6.1已发布 增强动态扩容功能

MongoDB发布了1.6.0版本,这是其继1.0,1.2,1.4版本后的第四个主要稳定版本,8月17日发布了1.6.1版本. 本版本主要着重在增强动态扩容(scale-out)功能,http://www.aliyun.com/zixun/aggregation/14273.html">Sharding功能已可用于生产环境.同时使用水平分区与复制集合(replica sets)可以用来建立可平行扩充的资料储存群集,可以实现动态扩容集群规模,而且没有单点故障问题.和其它支持分布式集群的存储系

一脸懵逼学习Hdfs---动态增加节点和副本数量管理(Hdfs动态扩容)

1:按照上篇博客写的,将各个进程都启动起来: 集群规划:    主机名        IP                安装的软件                    运行的进程   master     192.168.3.129    jdk.hadoop                      NameNode.DFSZKFailoverController(zkfc)   slaver1    192.168.3.130   jdk.hadoop                  

博客营销两大难点及解决方案

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 作为一种新型营销渠道,博客营销已经越来越受到各企业.网站站长.网络写手等的关注和喜爱.但在博客营销中也广泛存在一些问题,笔者就从事博客营销的经验分享下,希望对大家能有些帮助. 所谓博客营销,博客只是形式,营销才是本质.对大多数人来说,进行博客营销最大的难点有两个.一是如何使自己的博客在短时间内迅速被知晓,起到推广作用;二是怎样获得受众对博客内

作一个支持过载自适应和动态扩容的负载均衡服务

摘要: 考虑一种情况,一组机器来提供一个服务,客户端要以相同的机会访问各台机器,而且其中一台机器负载过高的时候,要减少对这台服务器的访问,直到它的负载降低下来,而且如果我们添加了一台新的服务器,要把客户端的请求也均衡到这台新机器上. 思路及分析: 说到负载均衡,多半会用到哈希算法,比如说我们有a,b,c三台机器,我们会用一个很大的盒子去放这3台机器,比如这个盒子有10个格子,那我们这三台机器要均匀的放到各个格子里,如下: 1-a,2-b,3-c,4-a,5-b,6-c,7-a,8-b,9-c,1

android处理拍照与选择相册并可动态设置是否可裁剪上传解决方案 并且真机测试通过(小米\魔族\htc)sdk2.1-4.x系统

[java] view plaincopy package org.wavefar.lib.utils;      import java.io.ByteArrayOutputStream;   import java.io.File;   import java.io.FileNotFoundException;   import java.io.FileOutputStream;   import java.io.IOException;      import org.wavefar.li

微博:春节日活跃用户超一亿,探秘如何实现服务器分钟级扩容

直播视频: (点击图片观看) 幻灯片下载地址:https://oss.aliyuncs.com/yqfiles/4c5964b7d5e15c418558160f067b9e02.pdf 3月30日在线实时分享顺利结束,本次由微博研发中心技术经理及高级技术专家陈飞分享了微博利用阿里云实现分钟级服务器规模成倍扩容的技术体系,包括Docker与虚机结合的使用经验.网络架构以及负载均衡.缓存架构的跨IDC服务部署的一些经验.本次视频直播的整理文章.视频.幻灯片整理完毕,如下内容. DCP设计"初心&qu

新浪微博应对弹性扩容的架构演进

本文讲的是新浪微博应对弹性扩容的架构演进[编者的话]本文结合架构图和数据图,详细介绍了LNMP服务的Docker化,如何制作PHP服务相关镜像,最后结合DCP平台完成PHP服务的首次部署.配置更改.代码上线等.目前,新浪微博主站TV视频站.头条问答.话题.红包飞.通行证等LNMP项目已全量部署,方便弹性扩容.同时,也将继续推进PC主站服务的部署. [3 天烧脑式 Docker 训练营 | 上海站]随着Docker技术被越来越多的人所认可,其应用的范围也越来越广泛.本次培训我们理论结合实践,从Do

大数据爆发性增长 存储技术面临难题

随着大数据应用的爆发性增长,大数据已经衍生出了自己独特的架构,而且也直接推动了存储.网络以及计算技术的发展.毕竟处理大数据这种特殊的需求是一个新的挑战.硬件的发展最终还是由软件需求推动的.大数据本身意味着非常多需要使用标准存储技术来处理的数据.大数据可能由TB级(或者甚至PB级)信息组成,既包括结构化数据(数据库.日志.SQL等)以及非结构化数据(社交媒体帖子.传感器.多媒体数据).此外,大部分这些数据缺乏索引或者其他组织结构,可能由很多不同文件类型组成.从目前技术发展的情况来看,大数据存储技术