openstack主要组件和作用
OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成具体工作。OpenStack支持几乎所有类型的云环境,项目目标是提供实施简单,可大规模扩展、丰富、标准统一的云计算管理平台。OpenStack通过各种互补的服务提供了基础设施即服务(IaaS)的解决方案,每个服务提供API以进行集成。
OpenStack云计算平台,帮助服务商业和企业内部实现类似于Amazon EC2 和 S3 的云基础架构服务(Infrastructure as a Service,IaaS)。OpenStack包含两个主要模块:Nova和Swift,前者是NASA开发的虚拟服务器部署和业务计算模块;后者是Rackspace开发的分部署云存储模块,两者可以一起用,也可以分开单独用。OpenStack除了有RackStack除了有Rackspace和NASA的大力支持外,还有包括Dell、Citrix、Cisco、Canonical等重量级公司的贡献和支持,发展速度非常快,有取代另一个业界领先的开源云平台Eucalyptus的态势。
下图展示了OpenStack服务之间的关系:
要设计、部署和配置OpenStack、管理员必须了解逻辑体系结构。
如上图所示,OpenStack由几个独立的部分组成,成为OpenStack服务。所有服务都是通过身份服务进行身份验证。各个服务通过公共API
相互交互,除非需要特权管理员命令。
在内部,OpenStack服务由几个进程组成,所有服务至少有一个API进程,它监听API请求,预处理它们并将它们传递给其他部分。除身份服务外,实际工作由不同的流程完成。
对一个服务进程之间的通信,使用AMQP消息代理。服务的状态存储在数据库中。在部署和配置OpenStack云时,您可以选择多种消息代理和数据库解决方案,例如RabbitMQ,MySQL、MariaDB和SQLite。
用户可以通过Horizon Dashboard实现基于Web用户界面,命令行客户端以及通过浏览器插件或curl工具法术API请求来访问OpenStack。对于应用程序,可以使用多SDK。最终,所欲这些访问方法都会向各种OpenStack服务发出REST API调用。
下图显示OpenStack云最常见但不是唯一可能的架构:
整个OpenStack是由控制节点,计算节点,网络节点,存储节点,四大部分组成。(这四个节点也可以单机部署)
其中:
1.控制节点负责对其余几点的控制,包含虚拟机创建、迁移、网络分配、存储分配等等
控制节点架构:
控制节点包括以下服务
- 管理支持服务
- 基础管理服务
- 扩展管理服务
1)管理支持服务包含数据库与消息代理服务
数据库作为基础/扩展服务产生的数据存放的地方
消息代理服务(也称消息中间件)为其他各种服务之间提供了统一的消息通信服务
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:提供对物理资源以及虚拟资源的监控,并记录这些书库,读数据进行分析,在一定条件下出发现货供应动作
控制节点通常来说只需要一个网络端口来用于通信和管理各个节点
2.计算节点负责虚拟机运行
计算节点架构
计算节点包含Nova、Neutron、Telemter三个服务
1)基础服务
Nova:提供虚拟机的创建、运行、迁移、快照等围绕虚拟机的服务、并提供API与控制节点对接、由控制节点下发任务
Neutron:提供计算节点与网络节点之间的通信
2)扩展服务
Telmeter:提供计算节点监控代理、将虚拟机的情况反馈的控制节点,是Centimeter的代理服务
计算节点包含最少两个网络端口
端口1:与控制节点进行通信,受控制节点统一调配
端口2:与网络节点,存储节点进行通信
3.网络节点负责对外网络与内网之间的通信
网络节点架构
网络节点仅包含Neutron服务
Neutron:负责管理私有网络与公有网络的通信,以及管理虚拟机网络之间通信/拓扑、管理虚拟机之上的防火墙等等
网络节点包含三个网络端口
端口1:用于与控制节点进行通信
端口2:用于除了控制节点之外的计算/存储节点之间的通信
端口3:用于外部的虚拟机与相应的网络之间通信
4.存储节点负责对虚拟机的额外存储管理等等
存储节点架构
存储节点包含Cinder,Swift等服务
Cinder:块存储服务,提供相应的块才能出,简单来说,就是虚拟出一块存盘,可以挂载到相应的虚拟机之上,不收文件系统的影响,对虚拟机来说,这个操作像是加了一块硬盘,可以完成对磁盘的任何操作,包括挂载、卸载、格式化,转换文件系统等等操作,大多应用于虚拟机空间不足的情况下的空间扩容等。
Swift:对象存储服务,提供相应的独享存储、简单来说,就是虚拟出一块磁盘空间,可以在这个空间当中存放文件,也仅仅只能存放文件,不能进行格式化,转换文件系统,大多应用于云磁盘/文件
存储节点包含最少两个网络端口
端口1:与控制节点进行通信,接受控制节点任务,受控制节点统一调配
端口2:与计算/网络节点进行通信,完成控制节点下发的各类任务
主要组件介绍
Nova
Nova是OpenStack计算的弹性控制器。OpenStack云实例生命期所需要的各种动作都将由Nova进行处理和支撑,这就意味着Nova以管理平台的身份登场,负责管理整个云的计算资源,网络、授权及测读。虽然Nova本身并不提供任务虚拟能力,但是它将使用libvirt API与虚拟机的宿主机进行交互。Nova通过Web服务API来对外提供处理接口,而且这些接口与Amazon的Web服务接口是兼容的。
Nova它提供了一种配置计算实例(即虚拟服务器)的方法。Nova支持创建虚拟机、裸机服务器,并且对系统容器的支持有限。Nova在现有linux服务器之上作为一组守护进程运行,已提供该服务。
它需要以下额外的OpenStack服务来实现基本功能:
- Keystone:这是为OpenStack服务提供身份和身份验证
- Glance:这提供了计算镜像存储库。所有计算实例都是从Glance镜像启动的。
- Neutron:他负责提供计算机实例在引导时连接到的虚拟或物理网络。
Nova主要功能包括:
- 实例生命周期管理
- 计算资源的管理
- 向外提供REST风格的API
这三个组件组件通过消息中间件传输通信
Nova包含以下主要部分:
API Server(nova-api)位于表示层。用于接受外部请求
消息队列服务(Rabbit MQ)
运算工作站(nova-comoute)负责虚拟机的创建和分配
网络控制器(nova-network)
卷管理(nova-volume)
调度器(nova-scheduler)调度如何选择哪个主机创建VM
详细说明:
1)API服务(nova-api)
API服务提供了云设施与外界交互的接口,它是外界用户对云实施管理的唯一通道。通过使用Web服务来调用各种EC2的API,接着API服务便通过消息队列把请求发送达至云内目标实施进行出路。作为对EC2-api的替代,用户也可以使用OpenStack的原生API,我们把它叫做"OpenStack API".
2)消息队列(Rabbit MQ )
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的实例卷,它能够为一个实例创建、删除、附加卷、也可以从一个实例中分离卷。卷管理为何如此重要?因为它提供了一中保持实例持续存储的手段,比如当结束一个实力后,根分区如果是非持续化的,那么对其的任何改变都将丢失。可是。如果从一个实例中将卷分离出来,或者为这个实例附加上的卷的话,及时实例被关闭,数据仍保存其中。这些数据可以通过将卷附加到原实例或其他实例的方式而重新访问。
因此,为了日后访问,重要数据必要写入卷中。这种应用对于数据服务器实例的存储而言,尤为重要。
Keystone
Keystone为所有的OpenStack组件提供认证和访问策略服务,它依赖资深REST(基于Identity API)系统进行工作主要对(单不限于)Swift、Glance、Nova等进行认证与授权。事实上,授权通过对动作消息来源者请求的合法性进行鉴定,下图显示了身份认证服务的流程:
Keystone采用两种授权方式,一种基于用户名/密码,另一种基于令牌(Token)。
除此之外,Keystone提供一下三种服务:
- 令牌服务:含有授权用户的授权信息
- 目录服务:含有用户合法操作的可用服务列表
- 策略服务:利用Keystone具体制定用户或群组某些访问权限
Keystion认证服务注意点:
服务入口:如Nova、Swift和Glance一样每个OpenStack服务都拥有一个制定的端口和专属的URL,我们称其为入口(endpoints)。
区位:在某个数据中心,一个区位具体制定了一处物理位置。在典型的云架构中,如果不是所有的服务都访问分布式数据中心或服务其的话,则也称其为区位。
用户:Keystone授权使用者
PS:代表一个个体,OpenStack以用户的形式来授权服务给它们。用户拥有证书(credentials),且可能分配个一个或多个租户。经过验证后,会为每个单独的租户提供一个特定的令牌。
服务:总体而言,任何通过Keystone进行连接或管理的组件都被称为服务。举个例子,我们可以称Glance为Keystone的服务
角色:为了维护安全限定,就云内特定用户可执行的操作而言,该用户关联的角色是非常重要的。
PS:一个角色是应用于某个租户的使用权限集合,以允许某个指定用户访问或使用特定操作。角色是使用权限的逻辑分组、它使得通过的权限可以简单的分组并绑定到与某个指定租户相关的用户。
租间:租间指的是具有全部服务入库并配有特定成员角色的一个项目。
PS:一个租间映射到一个Nova的"project-id",在对象存储中,一个租间可以有多个容器。根据不同的安装方式,一个租间可以代表一个客户、账号、组织或项目。
Glance
OpenStack镜像服务器是一套虚拟机镜像发现、注册、检索系统,我们可以将镜像存储到以下任意一种存储中:
本地文件系统(默认)
S3直接存储
S3对象存储(作为S3访问的中间渠道)
OpenStack对象存储等等。
功能及特点:
提供镜像相关服务。
Glance包含以下构件:
1)Glance-API
主要负责接收相应镜像管理命令的Resrful请求,分析消息请求信息并分发其所带的命令(如新增,删除,更新等)默认绑定端口是9292.
2)Glance-Registry:
主要负责接收响应镜像元数据命令的Restful请求。分析消息请求信息并分发其所带的命令(如获取元数据,更新元数据等)。more绑定的端口号是9191.
Swift
Swift是OpenStack提供一种分布式,持续虚拟对象存储,它类似于Amazon Web Service的S3简单存储服务。Swift具有跨节点百级对象存储的能力。Swift内建冗余和失效备源管理,也能欧处理归档和媒体流,特别是对大数据(千兆字节)和大容量(多对象数量)的测度非常高效。
Swift的功能及特点:
海量对象存储
大文件(对象)存储
数据冗余管理
归档能力----处理大数据集
为虚拟机和云应用提供数据容器
处理流媒体
对象安全存储
备份与归档
良好的可伸缩性
系统架构
Swift采用完全对称、面向资源的分布式存储架构设计,所有组件都可扩展,避免因单点失效而扩散并影响整个系统运转;通信方式采用非阻塞式I/O模式,提高了系统吞吐和响应能力。
Swift组件包括:
1)代理服务(Proxy Server):对外提供对象服务API,会根据环的信息来查找服务地址并转发用户请求至相应的账户、容器或者对象服务;由采用无状态的REST请求协议,可以进行横向扩展来均衡负载。
2)认证服务(Authentication Server):验证访问用户的身份信息,并获得一个对象方位令牌(Token),在一定的时间内会一直有效;验证访问令牌的有效性并缓存下来直至过期时间。
3)缓存服务(Cache Server):缓存的内容包括对象服务令牌,账户和容器的存在信息,但不会缓存对象本身的数据;缓存服务可采用Memcached集群,Swift会使用一致性三列算法来分配缓存地址。
4)账户服务(Account Server):提供账户元数据和统计信息,并维护所包含容器列表的服务,每个账户的信息被存储在一个SQLite数据库中。
5)容器服务(Container Server):提供容器元数据和统计信息,并维护所含对象列表的服务,每个容器的信息也存储在一个SQLlite数据库中。
6)对象服务(Object Server):提供对象元数据和内容服务,每个对象的内容会以文件的形式存储在文件系统中,元数据会作为文件属性来存储,建议采用支持扩展属性的XFS文件系统。
7)复制服务(Replicator):会检测本地分区副本和远程副本是否一致,具体是通过对比散列文件和高级水印来完成,发现不一致时会采用推式(Push)更新远程副本,例如对象复制服务会使用远程文件拷贝工具rsync来同步;另外一个任务是确保被标记删除的对象从文件系统中移除。
8)更新服务(Updater):当对象由于高负载的原因而无法立即更新时,任务将会被序列化到本地文件系统中进行排队,以便服务恢复后进行异步更新;例如成功创建对象后容易服务器没有及时更新对象列表,这个时候容器的跟新操作就会进入排队中,更新服务会在系统恢复正常后扫描队列并进行相应的更新处理。
9)审计服务(Auditor):检查对象,容器和账户的完整性,如果发现比特级的错误,文件将被隔离,并复制其他的副本以覆盖本地损坏的副本;其他类型的错误会被记录到日志中。
10)账户清理服务(Account Reaper):移除被标记为删除的账号,删除其所包含的所有容器对和对象。
Cinder
Cinder 是OpenStack Block Storage服务,用于为Nova虚拟机,lronic裸机主机,容器等提供卷。
Cinder的一些目标是:
- 基于组组件体系结构:快速添加新的行为
- 高度可用:扩展到非常严重的工作负载
- 容错:隔离进程避免级联失败
- 可恢复的:故障应该易于诊断,调试和纠正
- 开放标准:成为社区驱动api的参考实现
作为Cinder的最终用户,我们将使用Cinder创建和管理使用欧冠Horizen用户界面,命令行工具, 如python-cinderclient,或者直接使用REST API。
Cinder的所有功能都是通过REST API公开,可用于使用Cinder构建更复杂的逻辑或自动化, 这可以直接使用或者通过各种SDK使用。
Cinder服务通过一系列守护进程的交互来工作,这些进程名称cinder-*永久驻留在主机或机器上,我们可以从单个节点运行所有二进制文件,也可以分布在多个节点上,我们也可以在与其他OpenStack服务想用的节点上运行他们。
Cinder特性:
- 默认的Cinder服务实现是一种iscsi解决方案,它使用linux的逻辑卷管理器(LVM)。
PS:Cinder服务还提供驱动程序,我们可以使用除基本LVM实现之外的多个供应商的后端存储设备。也可以使用这些存储设备代替基本LVM安装。
- 网络模式不会干扰Cinder操作,但您必须为块存储设置网络才能工作。
- 在某些情况下我们也可以从内部卷中存储和运行实例。
- Cinder同时还支持使用NFS存储。
- 可以创建多个后端存储。这些后端存储为相同的OpenStack Compute配置提供服务,并为每个后端存储或后端存储池启动一个cinder-volume
- 通过lvm快照备份块存储服务磁盘
- 能够在支持其卷类型的后端之间前一卷(目前不允许迁移具有快照的卷)
-
volume number weigher调度器。OpenStack允许用户创建云盘时根据后端存储剩余容量和已分配容量来选择后端。而volume number weigher调度器是根据不同存储后端的云盘数量来选择后端,调度到存储后端上云盘数量最少的节点来处理用户有关云盘生命周期的请求,这样做的好处是可以使用不同存储厚点的I/O负载均衡并提高IO性能。
-
一致性组;Cinder提供了一致性组支持。添加了支持以创建一致性组的快照。此功能利用存储级别的一致性技术。它允许在同一时间点采集同一一致性组中的多个卷的快照,以确保数据一致性。可以使用块存储命令行执行。
-
DriverFilter和GoodnessWeigher调度器;根据后端特定属性选择卷后端。可以帮助确保调度程序根据请求的卷属性以及各种后端特定属性选择最佳后端。
-
速率限制卷复制带宽;从映像或现有卷创建新卷时,或者将卷映像上传到映像服务时,大型数据复制可能会对磁盘和网络带宽造成压力。为了减轻来自实例的数据访问速度,OpenStack块存储支持对卷数据复制带宽进行速率限制。
PS:此功能不支持使用远程文件系统(如NFS)的某些后端
- 精简配置中的超额订阅;Cinder可以使用超额配置比率, 根据虚拟容量选择卷后端,以进行精简配置为默认LVM驱动程序提供了参考实现。
- 镜像卷缓存;Cinder具有可选的镜像卷缓存,可以显著提高从镜像创卷卷的性能。改进取决于许多因素,主要是配置的后端克隆卷的速度。
- Volume-backed image;Cinder能够快速的从保存镜像数据的云盘创建新的云盘,与镜像数据保存到File和Swift相比,如果后端存储克隆性能比较好,从Volume-backed image创建新的云盘速度会更快,如果镜像属性是public,那么这个volume-backed image中的数据可以在所有的项目中共享。该功能要求在镜像服务中增加Cinder的locations信息。为了允许镜像服务使用Cinder作为后端存储,需要增加Cinder到允许存储的配置项中。
- 通用卷组;自Nweton发布以来,Cinder中提供了通用卷组支持,添加了支持、用于创建组类和组规范、创建卷组以及创建组的快照,可以使用块存储命令行执行组操作。