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