OpenStack

OpenStack 是一个面向 IaaS 层的开源项目,用于实现公有云和私有云的部署及管理。拥有众多大公司的行业背书和数以千计的社区成员, OpenStack 被看做是云计算的将来。目前 OS 基金会里已有500多个企业赞助商,遍及世界170多个国家,其中不乏 HP 、 Cisco 、 Dell 、 IBM 等,值得一提的是 Google 也在2015年加入基金会。web

一.关于项目起源算法

Rackspace (一家美国的云计算厂商)和 NASA (美国国家航空航天局)在2010年共同发起了 OpenStack 项目。数据库

那时候 Rackspace 是美国第二大云计算厂商,但规模只能占到亚马逊的5%。只依靠内部的力量来超越或者追赶亚马逊不大可能,这家公司索性就把本身的项目开源了,也就是后来的 OpenStack 的存储源码( swift )。swift

与此同时, NASA 也对本身使用的 Eucalyptus 云计算管理平台很不爽。 Eucalyptus 有两个版本,开源版本和收费版本, NASA 想给 Eucalyptus 开源版本贡献 patch ,结果 Eucalyptus 不接受,估计是和收费版本功能重叠了。当时 NASA 的六个开发人员,用了一个星期时间拿 Python 作出来一套原型,结果虚拟机在这上面运行的很成功,这就是 Nova (计算源码)的起源。后端

NASA 跟 Raskspace 玩的比较好,因而 NASA 贡献 Nova , Raskspace 贡献 Swift ,在2010年的7月发起了 OpenStack 项目。api

二. OpenStack 架构安全

截至 Grizzly 版本, OpenStack 含七个核心项目:服务器

  • Compute (Nova)
  • Networking (Neutron/Quantum)
  • Identity Management (Keystone)
  • Object Storage (Swift)
  • Block Storage (Cinder)
  • Image Service (Glance)
  • User Interface Dashboard (Horizon)

其中有三个最核心的架构服务单元,分别是:计算基础架构 Nova 、存储基础架构 Swift 和镜像服务 Glance 。网络

Nova 是 OpenStack 云计算架构控制器,管理 OpenStack 云里的计算资源、网络、受权、和扩展需求。 Nova 不能提供自己的虚拟化功能,相反,它使用 libvirt 的 API 来支持虚拟机管理程序交互,并经过 web 服务接口开放他的全部功能并兼容亚马逊 web 服务的 EC2 接口。架构

Swift 为 OpenStack 提供分布式的、最终一致的虚拟对象存储。经过分布式的穿过节点, Swift 有能力存储数十亿计的对象, Swift 具备内置冗余、容错管理、存档、流媒体的功能。而且高度扩展,不论大小(多个 PB 级别)和能力(对象的数量)。

Glance 镜像服务查找和检索虚拟机的镜像系统。

OpenStack 架构图

上图为 OpenStack 架构

三个元素将会与系统中的全部组件进行交互。 Horizon 是图形用户界面,管理员能够很容易地使用它来管理全部项目。 Keystone 处理受权用户的管理, Neutron 定义提供组件之间链接的网络。
Nova 被认为是 OpenStack 的核心,负责处理工做负载的流程。它的计算实例一般须要进行某种形式的持久存储,它能够是基于块的 ( Cinder ) 或基于对象的 ( Swift )。 Nova 还须要一个镜像来启动一个实例。 Glance 将会处理这个请求,它能够有选择地使用 Swift 做为其存储后端。

OpenStack 架构一直努力使每一个项目尽量的独立,这使得用户能够选择只部署一个功能子集,并将它与提供相似或互补功能的其余系统和技术相集成。然而,这种独立性不该掩盖这样一个事实:全功能的私有云极可能须要使用几乎全部功能才能够正常运做,并且各元素须要被紧密地集成。

传统的软件生态模式是用户和开发者之间隔着销售、产品经理等角色,而 OpenStack 等开源的模式打破了这样一种模式, OS 只提供最最底层的框架,剩余一切都围绕着用户,用户可参与从设计、编码、测试、到运维的各类阶段。而这样的模式生命力是最强的。

三. OpenStack 的核心优点

若是仅仅是便宜,那么 OpenStack 对于企业彷佛就没那么大的价值了。相反, OpenStack 提供了一个很是好的有关如何来打造相似于主要公有云好比亚马逊( AWS )和 Google Cloud Platform ( GCP )的弹性私有云的样板。就像 Hadoop 将 Google 的 MapReduce (加上它的参考架构)推向大众同样, OpenStack 将 AWS/GCP 式样的的基础架构即服务( IaaS )推向了每一个用户。它就是能实现企业内部 DevOps 的终极平台。

OpenStack 能在企业内部提供相似的平台。私有云能够基于公有云模型来构造,使得开发者同时拥有集中式 IT 控制和支配。本质上,它是二者融合的最佳平台,这也是 OpenStack 驱动的私有云的真正价值。

由 OpenStack 来实现企业内部的 DevOps ,进而实现敏捷,而敏捷偏偏是驱动云计算的原动力。

四.企业级 OpenStack 的需求
企业级 OpenStack 到底须要什么呢?有如下六个关键的因素:

  • 1.99.999% 的 API 可用性以及可扩展的控制平面

有高可靠性要求的应用须要高可靠的云API向全新的云和 DevOps 模型转型的一个关键能力是提供云原生应用在弹性云中的容错能力。要使一个应用能实时地适应不一样组件的出错,云 API 须要有更高的可用性。

API 的可用性不是惟一的衡量标准。你的云控制平面的吞吐量( throughoutput )一样关键。能够将控制平面想象成云的指挥中枢。这是中央智能和编排层的核心。你的 API 是控制平面的一部分,对于 OpenStack 来讲,包括全部的核心项目,以及平常的云管理系统(一般是 OpenStack 企业级套件的一部分),以及全部必要的辅助服务,好比数据库、 OpenStack 各厂商插件等等。你的云的控制平面必须可以随着云的增加而增加。这意味着,整体上,你将会得到更多的 API 操做的吞吐量(对象上传/下载、镜像上传/下载、元数据更新等待)。

  • 2.健壮的管理和安全模型

安装只是管理 OpenStack 的开端。一个真正的云操做系统将提供一个从设计上就能保证基础设施团队能成功交付服务的以运维为核心的云管理工具套件。这些管理工具将提供:

  • 可重用的架构模型,一般使用参考网络架构将小集群( pod )或者组( block )链接在在一块儿
  • 初始云安装和部署
  • 典型的平常云运维工具,包括日志、系统测量值和相关度分析
  • 供云运维人员使用的用来作整合和自动化的 CLI 和 API
  • 用于可视化和分析的云运维图形界面

OneAPM 的出现,使得企业能够缩减庞大运维团队的开支, OneAPM 的产品能帮助你进行应用性能分析、告警、日志分析记录,并能实现代码级的故障诊断。

  • 3.开放的架构

OpenStack 的开放架构,可以减小厂商锁定,进而下降风险。

  • 4.混合云兼容性

目前环境下,混合云兼具私有云安全性与公有云的弹性扩展能力,混合云必然成为企业云部署的第一选择。根据应用类别和业务特色,将关键应用、性能敏感型、中高密级应用部署在私有云,其余应用部署在公有云;将同一个应用的不一样层部署在不一样云中,时延敏感业务就近用户部署,提高最终用户体验; Web Front 支持 Web 服务灵活扩展,集中控制关键数据;突发型应用,私有云资源不足时(如 Web 网站),向公有云临时租借资源。
混合云的难点在于解决应用的移植性问题。若是你须要一个公有云和私有云组合而成的混合云,无论应用在某个云中被开发,仍是要在两个云之间作迁移,或者从一个云到另外一个云,应用的可移植性都是必须的。当你选定一个应用以及它的云原生的自动化框架,并将它们从一个云移动到另外一个云中,一些关键的东西必须保持一致:

  • 性能相对平稳
  • 底层的存储、网络和计算架构保持一致或者近似
  • 你应用的自动化框架必须和两个云中的 API 都兼容
  • 每一个云中,运行应用的总成本( TCO )都应该在1/2-2倍的范围以内
  • 还有行为上的兼容性,意味着非 API 功能也须要吻合
  • 支持与相关公有云 API 的兼容

5.可扩展的弹性架构

「当咱们在系统中增长资源后,其性能会按照所增长资源的某种比例增长时,咱们就能够说其服务是可扩展的。」

从多方面看, OpenStack 自身就是个高扩展性的系统。它被设计为松耦合、基于消息通讯的架构,这些技术在已经在各类中级到高级扩展的系统中获得应用和验证,它们也能够适应小规模的部署。问题在于当你配置和部署 OpenStack 时所作的设计上的决定。

一部分默认的配置,以及许多厂商的插件和方案在设计时并无考虑扩展性。

基础架构历来没有真正的弹性过,但是它的特性能支持弹性的应用在它上面运行。一个弹性云,须要被设计为每一个资源,好比虚机、块存储和对象存储,其成本尽量的低。这和杰文斯悖论( Jevon’s Paradox )直接相关,他说随着技术的进步,效率的提高将会带来该技术被采用速度的提高。

  • 6.全面的支持和服务

总结:
OpenStack 做为一个可扩展的打造下一代弹性云的基础架构,尽管它还不是很完美。但做为一个开源项目,它的吸引力确实不容小视。基于平台开放,会有愈来愈多的力量促使它更完善和强大,采用 OpenStack 意味着企业云平台会更加自主可控,并实现技术沉淀和自动化运维水平的提高。

 

OpenStack既是一个社区,也是一个项目和一个开源软件,提供开放源码软件,创建公共和私有云,它提供了一个部署云的操做平台或工具集,其宗旨在于:帮助组织运行为虚拟计算或存储服务的云,为公有云、私有云,也为大云、小云提供可扩展的、灵活的云计算。
OpenStackd开源项目由社区维护,包括OpenStack计算(代号为Nova),OpenStack对象存储(代号为Swift),并OpenStack镜像服务(代号Glance)的集合。 OpenStack提供了一个操做平台,或工具包,用于编排云。

下面列出Openstack的详细构架图

Openstack的网络拓扑结构图

整个OpenStack是由控制节点,计算节点,网络节点,存储节点四大部分组成。(这四个节点也能够安装在一台机器上,单机部署)
其中:
控制节点负责对其他节点的控制,包含虚拟机创建,迁移,网络分配,存储分配等等
计算节点负责虚拟机运行
网络节点负责对外网络与内网络之间的通讯
存储节点负责对虚拟机的额外存储管理等等

控制节点架构:

控制节点包括如下服务

   管理支持服务

   基础管理服务

   扩展管理服务

   1)管理支持服务包含MySQL与Qpid两个服务

MySQL:数据库做为基础/扩展服务产生的数据存放的地方

Qpid:消息代理(也称消息中间件)为其余各类服务之间提供了统一的消息通讯服务

   2)基础管理服务包含Keystone,Glance,Nova,Neutron,Horizon五个服务

Keystone:认证管理服务,提供了其他全部组件的认证信息/令牌的管理,建立,修改等等,使用MySQL做为统一的数据库

Glance:镜像管理服务,提供了对虚拟机部署的时候所能提供的镜像的管理,包含镜像的导入,格式,以及制做相应的模板

Nova:计算管理服务,提供了对计算节点的Nova的管理,使用Nova-API进行通讯

Neutron:网络管理服务,提供了对网络节点的网络拓扑管理,同时提供Neutron在Horizon的管理面板

Horizon:控制台服务,提供了以Web的形式对全部节点的全部服务的管理,一般把该服务称为DashBoard

   3)扩展管理服务包含Cinder,Swift,Trove,Heat,Centimeter五个服务

Cinder:提供管理存储节点的Cinder相关,同时提供Cinder在Horizon中的管理面板

Swift:提供管理存储节点的Swift相关,同时提供Swift在Horizon中的管理面板

Trove:提供管理数据库节点的Trove相关,同时提供Trove在Horizon中的管理面板

Heat:提供了基于模板来实现云环境中资源的初始化,依赖关系处理,部署等基本操做,也能够解决自动收缩,负载均衡等高级特性。

Centimeter:提供对物理资源以及虚拟资源的监控,并记录这些数据,对该数据进行分析,在必定条件下触发相应动做

控制节点通常来讲只须要一个网络端口用于通讯/管理各个节点

网络节点架构

网络节点仅包含Neutron服务

Neutron:负责管理私有网段与公有网段的通讯,以及管理虚拟机网络之间的通讯/拓扑,管理虚拟机之上的防火等等

网络节点包含三个网络端口

eth0:用于与控制节点进行通讯

eth1:用于与除了控制节点以外的计算/存储节点之间的通讯

eth2:用于外部的虚拟机与相应网络之间的通讯

计算节点架构

计算节点包含Nova,Neutron,Telemeter三个服务

  1)基础服务

Nova:提供虚拟机的建立,运行,迁移,快照等各类围绕虚拟机的服务,并提供API与控制节点对接,由控制节点下发任务

Neutron:提供计算节点与网络节点之间的通讯服务

  2)扩展服务

Telmeter:提供计算节点的监控代理,将虚拟机的状况反馈给控制节点,是Centimeter的代理服务

计算节点包含最少两个网络端口

eth0:与控制节点进行通讯,受控制节点统一调配

eth1:与网络节点,存储节点进行通讯

存储节点架构

存储节点包含Cinder,Swift等服务

Cinder:块存储服务,提供相应的块存储,简单来讲,就是虚拟出一块磁盘,能够挂载到相应的虚拟机之上,不受文件系统等因素影响,对虚拟机来讲,这个操做就像是新加了一块硬盘,能够完成对磁盘的任何操做,包括挂载,卸载,格式化,转换文件系统等等操做,大多应用于虚拟机空间不足的状况下的空间扩容等等

Swift:对象存储服务,提供相应的对象存储,简单来讲,就是虚拟出一块磁盘空间,能够在这个空间当中存放文件,也仅仅只能存放文件,不能进行格式化,转换文件系统,大多应用于云磁盘/文件

存储节点包含最少两个网络接口

eth0:与控制节点进行通讯,接受控制节点任务,受控制节点统一调配

eth1:与计算/网络节点进行通讯,完成控制节点下发的各种任务

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

下面说一说Openstack的各个组件做用及关系

Openstack发展至今,总共集成了下面几个组件:

Nova - 计算服务
Neutron-网络服务
Swift - 对象存储服务
Cinder-块存储服务
Glance - 镜像服务
Keystone - 认证服务
Horizon - UI服务
Ceilometer-监控服务
Heat-集群服务
Trove-数据库服务

组件间的关系图以下:

重要组件介绍

OpenStack认证服务(Keystone)
Keystone为全部的OpenStack组件提供认证和访问策略服务,它依赖自身REST(基于Identity API)系统进行工做,主要对(但不限于)Swift、Glance、Nova等进行认证与受权。事实上,受权经过对动做消息来源者请求的合法性进行鉴定。下图显示了身份认证服务流程:

 

Keystone采用两种受权方式,一种基于用户名/密码,另外一种基于令牌(Token)

除此以外,Keystone提供如下三种服务:
    令牌服务:含有受权用户的受权信息
    目录服务:含有用户合法操做的可用服务列表
    策略服务:利用Keystone具体指定用户或群组某些访问权限

keystone认证服务注意点:

服务入口:如Nova、Swift和Glance同样每一个OpenStack服务都拥有一个指定的端口和专属的URL,咱们称其为入口(endpoints)。

区位:在某个数据中心,一个区位具体指定了一处物理位置。在典型的云架构中,若是不是全部的服务都访问分布式数据中心或服务器的话,则也称其为区位。

用户:Keystone受权使用者
  PS:表明一个个体,OpenStack以用户的形式来受权服务给它们。用户拥有证书(credentials),且可能分配给一个或多个租户。通过验证后,会为每一个单独的租户提供一个特定的令牌。

服务:整体而言,任何经过Keystone进行链接或管理的组件都被称为服务。举个例子,咱们能够称Glance为Keystone的服务。

角色:为了维护安全限定,就云内特定用户可执行的操做而言,该用户关联的角色是很是重要的。
  PS:一个角色是应用于某个租户的使用权限集合,以容许某个指定用户访问或使用特定操做。角色是使用权限的逻辑分组,它使得通用的权限能够简单地分组并绑定到与某个指定租户相关的用户。

租间:租间指的是具备所有服务入口并配有特定成员角色的一个项目。
  PS:一个租间映射到一个Nova的“project-id”,在对象存储中,一个租间能够有多个容器。根据不一样的安装方式,一个租间能够表明一个客户、账号、组织或项目。

OpenStack计算设施----Nova

Nova是OpenStack计算的弹性控制器。OpenStack云实例生命期所需的各类动做都将由Nova进行处理和支撑,这就意味着Nova以管理平台的身份登场,负责管理整个云的计算资源、网络、受权及测度。虽然Nova自己并不提供任何虚拟能力,可是它将使用libvirt API与虚拟机的宿主机进行交互。Nova经过Web服务API来对外提供处理接口,并且这些接口与Amazon的Web服务接口是兼容的。

功能及特色: 
实例生命周期管理
计算资源管理
网络与受权管理
基于REST的API
异步连续通讯
支持各类宿主:Xen、XenServer/XCP、KVM、UML、VMware vSphere及Hyper-V

Nova弹性云(OpenStack计算部件)包含如下主要部分:
API Server(nova-api)
消息队列(rabbit-mq server)
运算工做站(nova-compute)
网络控制器(nova-network)
卷管理(nova-volume)
调度器(nova-scheduler)

解释以下:
1)API服务器(nova-api)
API服务器提供了云设施与外界交互的接口,它是外界用户对云实施管理的惟一通道。经过使用web服务来调用各类EC2的API,接着API服务器便经过消息队列把请求送达至云内目标设施进行处理。做为对EC2-api的替代,用户也可使用OpenStack的原生API,咱们把它叫作“OpenStack API”。

2)消息队列(Rabbit MQ Server)
OpenStack内部在遵循AMQP(高级消息队列协议)的基础上采用消息队列进行通讯。Nova对请求应答进行异步调用,当请求接收后便则当即触发一个回调。因为使用了异步通讯,不会有用户的动做被长置于等待状态。例如,启动一个实例或上传一份镜像的过程较为耗时,API调用就将等待返回结果而不影响其它操做,在此异步通讯起到了很大做用,使整个系统变得更加高效。

 3)调度器(nova-scheduler)  

调度器负责把nova-API调用送达给目标。调度器以名为“nova-schedule”的守护进程方式运行,并根据调度算法从可用资源池中恰当地选择运算服务器。有不少因素均可以影响调度结果,好比负载、内存、子节点的远近、CPU架构等等。强大的是nova调度器采用的是可插入式架构。

目前nova调度器使用了几种基本的调度算法:
  随机化:主机随机选择可用节点;
  可用化:与随机类似,只是随机选择的范围被指定;
  简单化:应用这种方式,主机选择负载最小者来运行实例。负载数据能够从别处得到,如负载均衡服务器。

4)运算工做站(nova-compute)
运算工做站的主要任务是管理实例的整个生命周期。他们经过消息队列接收请求并执行,从而对实例进行各类操做。在典型实际生产环境下,会架设许多运算工做站,根据调度算法,一个实例能够在可用的任意一台运算工做站上部署。

 5)网络控制器(nova-network)
网络控制器处理主机的网络配置,例如IP地址分配,配置项目VLAN,设定安全群组以及为计算节点配置网络。

 6)卷工做站(nova-volume) 
卷工做站管理基于LVM的 实例卷,它可以为一个实例建立、删除、附加卷,也能够从一个实例中分离卷。卷管理为什么如此重要?由于它提供了一种保持实例持续存储的手段,好比当结束一个 实例后,根分区若是是非持续化的,那么对其的任何改变都将丢失。但是,若是从一个实例中将卷分离出来,或者为这个实例附加上卷的话,即便实例被关闭,数据 仍然保存其中。这些数据能够经过将卷附加到原实例或其余实例的方式而从新访问。

所以,为了往后访问,重要数据务必要写入卷中。这种应用对于数据服务器实例的存储而言,尤其重要。

OpenStack镜像服务器----Glance

OpenStack镜像服务器是一套虚拟机镜像发现、注册、检索系统,咱们能够将镜像存储到如下任意一种存储中:
本地文件系统(默认)
S3直接存储
S3对象存储(做为S3访问的中间渠道)
OpenStack对象存储等等。
  
功能及特色:
提供镜像相关服务。

Glance构件:
1)Glance-API:
  主要负责接收响应镜像管理命令的Restful请求,分析消息请求信息并分发其所带的命令(如新增,删除,更新等)。默认绑定端口是9292。
2)Glance-Registry:
  主要负责接收响应镜像元数据命令的Restful请求。分析消息请求信息并分发其所带的命令(如获取元数据,更新元数据等)。默认绑定的端口是9191。

OpenStack存储设施----Swift

Swift为OpenStack提供一种分布式、持续虚拟对象存储,它相似于Amazon Web Service的S3简单存储服务。Swift具备跨节点百级对象的存储能力。Swift内建冗余和失效备援管理,也可以处理归档和媒体流,特别是对大数据(千兆字节)和大容量(多对象数量)的测度很是高效。

swift功能及特色:  
海量对象存储
大文件(对象)存储
数据冗余管理
归档能力-----处理大数据集
为虚拟机和云应用提供数据容器
处理流媒体
对象安全存储
备份与归档
良好的可伸缩性

Swift组件
Swift帐户
Swift容器
Swift对象
Swift代理
Swift RING
  
Swift代理服务器  
用户都是经过Swift-API与代理服务器进行交互,代理服务器正是接收外界请求的门卫,它检测合法的实体位置并路由它们的请求。
此外,代理服务器也同时处理实体失效而转移时,故障切换的实体重复路由请求。

Swift对象服务器
对象服务器是一种二进制存储,它负责处理本地存储中的对象数据的存储、检索和删除。对象都是文件系统中存放的典型的二进制文件,具备扩展文件属性的元数据(xattr)。

注意:xattr格式被Linux中的ext3/4,XFS,Btrfs,JFS和ReiserFS所支持,可是并无有效测试证实在XFS,JFS,ReiserFS,Reiser4和ZFS下也一样能运行良好。不过,XFS被认为是当前最好的选择。

Swift容器服务器
容器服务器将列出一个容器中的全部对象,默认对象列表将存储为SQLite文件(译者注:也能够修改成MySQL,安装中就是以MySQL为例)。容器服务器也会统计容器中包含的对象数量及容器的存储空间耗费。

Swift帐户服务器
帐户服务器与容器服务器相似,将列出容器中的对象。

Ring(索引环)

Ring容器记录着Swift中物理存储对象的位置信息,它是真实物理存储位置的实体名的虚拟映射,相似于查找及定位不一样集群的实体真实物理位置的索引服务。这里所谓的实体指帐户、容器、对象,它们都拥有属于本身的不一样的Rings。

OpenStack管理的Web接口----Horizon

Horizon是一个用以管理、控制OpenStack服务的Web控制面板,它能够管理实例、镜像、建立密匙对,对实例添加卷、操做Swift容器等。除此以外,用户还能够在控制面板中使用终端(console)或VNC直接访问实例。

总之,Horizon具备以下一些特色:   实例管理:建立、终止实例,查看终端日志,VNC链接,添加卷等 访问与安全管理:建立安全群组,管理密匙对,设置浮动IP等 偏好设定:对虚拟硬件模板能够进行不一样偏好设定 镜像管理:编辑或删除镜像 查看服务目录 管理用户、配额及项目用途 用户管理:建立用户等 卷管理:建立卷和快照 对象存储处理:建立、删除容器和对象 为项目下载环境变量