Openstack是看着AWS成长起来的,这点毋庸置疑;所以AWS大规模商用已成事实的情况下,Openstack也需要从架构和产品实现上进行优化,以满足大规模商用的要求。从已有的实现来看其中两种方式值得借鉴:华为推出的Openstack级联方案和社区已有的Cell方案。在上海11月21号的Openstack Meeting up中华为高级架构师黄登辉的分享里也提及,华为公有云使用了级联架构。其中Cell方案(https://wiki.openstack.org/wiki/Blueprint-nova-compute-cells,http://comstud.com/GrizzlyCells.pdf)是从Openstack的G release版提出的新模块,Openstack级联方案(https://wiki.openstack.org/wiki/OpenStack_cascading_solution)提出时间稍晚,但更有优势。

Cell从其BP简单来说实现主要是通过根Cell(API-Cell)的Nova-API为整个Openstack的Nova-API,其他子Cell( Child-Cell )没有Nova-API服务,二者都有独立的AMQP Broker、Database、nova-cells等服务,全局服务有Keytone和Glance;Cell提出的背景有这么几点:

第一,Openstack的主机规模(主要是计算节点的数目,因为当时网络和存储分别还是Nova-network和Nova-volume,Neutron之后才出现)超过几百台后(英国电信主管声称只能管理约500个计算节点)在管理性能上就遇到了大的瓶颈,主要是MessageQueue使用RPC导致的,这点也反映了Openstack初期架构设计的“着急”(当然,这些不仅仅体现在RPC上,后续网络组件Neutron的管理协议更是体现了Openstack初期开源重实现不重商用的短板,但也反映了Openstack注重的是这种解耦式的架构和易集成平台,而不是底层确切的技术实现,所以也得到了尽可能多厂商的参与和支持);

第二,上一点也提及当时版本还是G版,即当时网络和存储分别还是Nova-network和Nova-volume,并没有独立的组件,所以如果解决了Nova的管理瓶颈,也基本解决了网络和存储的管理瓶颈;所以推出Cell方式被支持是可以理解的;

第三,Nova有了层级概念后,其上层选择下层的调度算法应该多种多样,以满足客户多种场景的需求,但是这点Nova的调度算法当时还不是很丰富;

图1  Cell 架构示意图

级联架构提出的时候Openstack的基础组件基本都已完善,所以对于现在的Openstack考虑比较全面些,对重要的Openstack组件比如Nova、Cinder、Neutron、Glance以及Ceilometer等的处理都有考虑;Openstack级联支持规模场景包括10万主机、百万虚机等,真真实实的大规模部署。


图2 级联架构示意图

但Openstack的级联初衷解决的不是规模问题,而是跨多DC的多OS统一管理问题,这个需求是非常常见的,因为通常的云平台厂商部署时,会考虑多个多Openstack来考虑客户业务部署(比如灾备、CDN等),有这类需求的客户华为遇见很多。当然多个Openstack可以通过一个管理端来分别对多个Openstack通过北向API进行管理,但是这个管理端不仅无法整体协调管理资源(比如Neutron中Network的大二层部署无法被这种形式支持,只能每个Openstack一个Network,虚拟机无法直接L2互通,形成不了VPC),而且还破坏了Openstack的生态圈和API统一性,并且也导致无法将后续不断发展的社区特性或组件叠加到云平台上,包括Heat、Magnum等。

如果整套Openstack通过几个Cell共享存储Cinder和大二层网络Neutron打通,功能都是没有问题,但是多DC情形下的RPC通信会给运维、管理和Troubleshooting等带来问题;那么Cascading相比Cell到底有什么优势?

第一,级联架构适用于较多组件大规模部署时解决管理性能瓶颈;上文也提及,Cell只针对Nova做了实现,随着Neutron和Cinder等组组件从Nova中独立出来,已经不再适用Cell了,社区也暂时没有看到这方面的进展;所以如果用Cell实现大规模商用,Neutron和Cinder等组件的管理将成为性能瓶颈;而级联架构考虑了基本所有重要组件的级联架构,实现了整体管理性能的瓶颈突破;数据转发面将每个被级联层划分成一个L2的广播域,通过Underlay的L3打通不同的被级联层,实现大二层互联;而且每个被级联层Openstack也是一个故障隔离域,便于运维和定位问题;

第二,级联架构适用于混合云架构;按照公有云比如HWS平台作为公有云、而客户厂家自己是私有云的场景,可以将自己的私有云作为被级联层接入到华为的HWS平台(即HWS平台作为级联层),这样可以实现通过公有云平台来管理的混合云架构;

第三,级联场景适用多种云平台的异构云架构;上述第二点里提及的混合云场景中,客户的私有云作为被级联层可以是不用Openstack来实现的云平台,甚至可以是基于AWS或阿里云等厂家的云平台,从而实现异构云做跨厂商、跨云平台的整体管理解决方案;

第四,级联场景适合不同版本的Openstack的架构;基于Openstack的公有云或私有云管理平台,整体升级和版本兼容性成为可持续性的一个运维点,而级联模式下,被级联层的Openstack版本可以不同,甚至不同级联层的Nova的虚拟化资源可以是不同的虚拟化技术(比如KVM、ESXi、XEN、Hyper-v等等),而Neutron的底层网络实现也可以基于不同的底层网元或管理方式,甚至在不同的被级联Neutron对接不同的SDN Controller,从而实现更为开放的集成模式,更适于多加厂商的参与;

第五,级联架构具备更好的可升级性;由于Openstack级联架构具备良好的异构性,所以在Openstack升级的时候,可以对不同被级联层逐步升级,从而实现不影响业务的正常运行;所以Openstack级联技术架构下,基于Openstack的云平台具备良好的可升级性;

第六,级联架构具备更好的可扩展性;在单Openstack(没有使用Openstack级联场景)对底层服务器进行扩展除了规模有限制外,也需要导致Openstack管理节点的感知,从而存在潜在的风险;而使用级联技术时,先对被级联层进行部署完毕,甚至进行充分的测试后,再连接到级联层进行被管理,从这点来说,Openstack的级联技术更容易横向规模扩展,包括跨DC管理多个Region等,结合多AZ技术实现超大规模云主机的云平台。

当然Openstack级联实现也有些不足的地方,比如实现稍微复杂则需要云平台厂商技术人员有相应水平的技术能力,代码实现也需要更多的优化;所以不上规模的Openstack使用级联似乎性价比没有Cell高;而Cell的能力经过优化到1K台左右则会遇到明显的管理性能瓶颈,这点是不容置疑的,而不经过优化的Openstack云平台性能瓶颈更甚;当然一个私有云1K台物理机亦是不小的规模,但对于大规模公有云,还远远不够且需要更多的优化,而Openstack的级联则提供了一种选择,因为1K台物理机规模在Openstack级联模式下只是一个被级联层Openstack的规模(被级联层使用Cell方式也是一个值得考虑的场景)。

总体来看Openstack的现有实现版本,Cell只是局部的优化方式,而Openstack级联则是解决管理层性能方面的整体架构解决方案,且可商用;而结合社区来看Neutron中的Dragonflow/OVN等提出,已有在解决Neutron管理性能方面因素的考虑,而Dragonflow亦是由华为开源社区团队贡献的,如果后续实现Openstack级联和Dragonflow很好的结合,那么必定是华为对Openstack开源社区的又一重大贡献。

作者:李俊武 华为云计算网络架构和设计部

https://wiki.openstack.org/wiki/OpenStack_cascading_solution

(转)Openstack Cascading和Nova Cell的更多相关文章

  1. Nova Cell

    Nova Cell V2 详解 现在 ,OpenStack 在控制平面上的性能瓶颈主要在 Message Queue 和 Database . 尤其是 Message Queue , 随着计算节点的增 ...

  2. 在Openstack H版部署Nova Cell 时 ,终端输入nova service-list 和 nova host-list 命令将报错

    关于Cell的基本介绍,可以参考贤哥的一篇文章: [OpenStack]G版中关于Nova的Cell  http://blog.csdn.net/lynn_kong/article/details/8 ...

  3. OpenStack 安装:nova服务

    上一篇介绍了glance,并且成功创建了一个镜像,这一篇介绍Nova. 首先创建Nova用户,需要记得先source环境变量,然后创建Nova用户,并设置密码为nova [root@linux-nod ...

  4. 照着官网来安装openstack pike之nova安装

    nova组件安装分为控制节点和计算节点,还是先从控制节点安装 1.前提条件,数据库为nova创建库和账户密码来连接数据库 # mysql -u root -p MariaDB [(none)]> ...

  5. 云计算管理平台之OpenStack计算服务nova

    一.nova简介 nova是openstack中的计算服务,其主要作用是帮助我们在计算节点上管理虚拟机的核心服务:这里的计算节点就是指用于提供运行虚拟机实例的主机,通常像这种计算节点有很多台,那么虚拟 ...

  6. openstack搭建之-nova配置(10)

    一. base节点设置数据库 mysql -u root -proot CREATE DATABASE nova_api; CREATE DATABASE nova; CREATE DATABASE ...

  7. OpenStack 计算服务 Nova计算节点部署(八)

    如果使用vmware虚拟机进行部署,需要开启虚拟化:如果是服务器需要在bios上开启. nova计算节点IP是192.168.137.12 环境准备 安装时间同步 yum install ntpdat ...

  8. OpenStack 计算服务 Nova介绍和控制节点部署(七)

    介绍 Nova是openstack最早的两块模块之一,另一个是对象存储swift.在openstack体系中一个叫做计算节点,一个叫做控制节点.这个主要和nova相关,我们把安装为计算节点nova-c ...

  9. openstack 部署笔记--nova

    控制节点 配置用户与服务 $ . admin-openrc $ openstack user create --domain default --password-prompt nova $ open ...

随机推荐

  1. java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x87<b

    实际开发中遇到的 情景: 解决方案:  复制的别人的博客,没测试, Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1 这个 ...

  2. js对多行字符串的处理

    f = [] g = str(f) h = ''.join(f) dic_ = () gd = str(dic_) hd = ''.join(dic_) 0 老板1 北京2 上海3 天津4 重庆5 河 ...

  3. pycharm 调试django 服务端断点调试

    django  runserver 服务端断电调试 D:\model\gitlab\eebo.ehr.analysis\venv\Scripts\python.exe "C:\Program ...

  4. Oracle DBA的学习(笔记)

    1.软件任务分组:系统分析师.系统设计师.程序员.测试人员.开发dba.系统架构师.实施人员. 2.常用设计图:活动图.用例图.类图.序列图. 2010-9-15(dba学习) 1.1 Oracle产 ...

  5. gnu libiconv(可以下载)

    Chinese EUC-CN, HZ, GBK, CP936, GB18030, EUC-TW, BIG5, CP950, BIG5-HKSCS, BIG5-HKSCS:2004, BIG5-HKSC ...

  6. ajax异步请求分页显示

    html代码: <!DOCTYPE html> <html lang="en"> <head>     <meta charset=&qu ...

  7. HAProxy的访问控制

    HAProxy的ACL用于实现基于请求报文首部.响应报文的内容或其他的环境状态信息来做出转发决策,这大大增强了其配置弹性,其配置法则通常分为两步,首先去定义ACL,即定义一个测试条件,而后在条件得到满 ...

  8. [转] CentOS---网络配置详解

    原文地址: http://blog.chinaunix.net/uid-26495963-id-3230810.html 一.配置文件详解在RHEL或者CentOS等Redhat系的Linux系统里, ...

  9. linux shell 入门

    本文是本人学习linux shell入门收集整理,不完全原创. 参考博文: http://www.cnblogs.com/suyang/archive/2008/05/18/1201990.html ...

  10. oracle数据向历史表数据迁移————procedure

    create or replace procedure remove_refund_his_pro isbegin declare cursor refund_query_cur is select ...