openstack概述
如何理解云?
云是基于“云计算”技术,实现各种终端设备之间的互联互通。手机、电视机等都只是一个单纯的显示和操作终端,它们不再需要具备强大的处理能力。用户享受的所有资源、所有应用程序全部都由一个存储和运算能力超强的云端后台来提供。像我们现在经常使用的在线杀毒、网络硬盘、在线音乐等都属于云服务范畴。
云计算的概念可以从用户、技术提供商和技术开发人员三个不同角度来解读。
用户看云计算
从用户的角度考虑,主要根据用户的体验和效果来描述,云计算可以总结为:云计算系统是一个信息基础设施,包含有硬件设备、软件平台、系统管理的数据以及相应的信息服务。用户使用该系统的时候,可以实现“按需索取、按用计费、无限扩展,网络访问”的效果。
简单而言,用户可以根据自己的需要,通过网络去获得自己需要的计算机资源和软件服务。这些计算机资源和软件服务是直接供用户使用而无需用户做进一步的定制化开发、管理和维护等工作。同时,这些计算机资源和软件服务的规模可以根据用户业务变化和需求的变化,随时进行调整到足够大的规模。用户使用这些计算机资源和软件服务,只需要按照使用量来支付租用的费用。
技术提供商看云计算
技术提供商对云计算理解为,通过调度和优化的技术,管理和协同大量的计算资源;针对用户的需求,通过互联网发布和提供用户所需的计算机资源和软件服务;基于租用模式的按用计费方法进行收费。
技术开发人员看云计算
技术开发人员作为云计算系统的设计和开发人员,认为云计算是一个大型集中的信息系统,该系统通过虚拟化技术和面向服务的系统设计等手段来完成资源和能力的封装以及交互,并且通过互联网来发布这些封装好的资源和能力。
所谓大型集中的信息系统,指的是包含有大量的软硬件资源,并且通过技术和网络等对其进行集中式的管理的信息系统。通常这些软硬件资源在物理上或者在网络连接上是集中或者相邻的,能够协同来完成同一个任务。
信息系统包含有软硬件和很多软件功能,这些软硬件和软件功能如果需要被访问和使用,必须有一种把相关资源和软件模块打包在一起并且能够呈现给用户的方式。虚拟化技术和Web服务为最为常见的封装和呈现技术,可以把硬件资源和软件功能等打包,并且以虚拟计算机和网络服务的形式呈现给用户使用。
所以云计算(CloudComputing)是分布式计算(Distributed Computing)、并行计算(Parallel Computing)、效用计算(Utility Computing)、网络存储(Network Storage Technologies)、虚拟化(Virtualization)、负载均衡(Load Balance)等传统计算机和网络技术发展融合的产物。
好比是从古老的单台发电机模式转向了电厂集中供电的模式。它意味着计算能力也可以作为一种商品进行流通,就像煤气、水电一样,取用方便,费用低廉。最大的不同在于,它是通过互联网进行传输的。
云计算的部署类型
云计算可以分成三种不同的类型进行部署,分别是私有云、公有云、混合云。
私有云指的是部署在一个封闭和特定环境(网络封闭或者服务范围封闭)中的一个云计算系统。该系统的系统边界明确,仅对指定范围内的人员提供服务。该范围以外的人员和系统无法使用该云,比如非服务区域或者非指定内部网络的人不能使用私有云上的云服务。
公有云指的是部署在一个开放环境中,为所有具备网络接入能力的人和系统提供服务。用户通过互联网访问和使用公有云的服务,但不拥有云也不管理云。
混合云指的是以私有云为基础,能够在业务负载超越私有云自身能力或其它指定的情况下,把部分业务负载透明地分流到其它云上进行处理,使得私有云和部分其它云的资源整合在一起形成的一个系统。
云计算的服务类型
云计算的服务类型可以分为基础设施即服务(IaaS)、应用平台即服务(PaaS)以及软件即服务(SaaS)三个层次。
基础设施即服务(IaaS)对云计算系统的软硬件和网络等基础设施进行集中管理和调度,并且把这些基础设施以一种可以通过网络进行访问和使用的形式进行封装,并对外以服务的方式提供这些封装好的IT能力。
应用平台即服务(PaaS)在云基础设施上运行的应用软件支撑平台,其提供业务软件开发所需的业务接口和公共基础处理的支持,方便开发人员开发特定业务的云服务;同时,应用平台即服务(PaaS)为业务软件的运行提供运行时刻的语言运行、网络交互、进程通信、同步控制以及调度等支持,使得云服务能够高效可控地运行。
软件即服务(SaaS)指在云计算平台上,通过互联网直接为用户提供软件服务。软件即服务(SaaS)使得用户不用再购买软件,而是向提供商租用通过互联网即可使用的软件来管理企业经营活动,且用户无需对软件进行维护。
2010年,美国国家航空航天局联手Rackspace,在建设美国国家航空航天局的私有云过程中,创建了openstack的项目,之后他们邀请其他供应商提过组件,建立了一个完整的开源云计算解决方案。
注:Rackspace (NYSE:RAX)全球三大云计算中心之一,1998年成立,是一家全球领先的托管服务器及云计算提供商。
2010年诞生的第一个版本Austin,只包含Rackspace和美国国家航空航天局的组件。之后发布的版本包含了已加入该项目的供应商开发的附加组件。最初Rackspace独立管理openstack项目,随着openstack的不断发展,在2012年创建了openstack基金会,该基金会又选举产生的董事会监管。Openstack的技术委员会由每个核心的软件项目和项目领导组成。
目前openstack有来自87个国家或地区的850个基金会成员,白金会员提供最高水平的支持,其次是黄金会员,赞助企业和个人会员。
Cloudstack的历史:
Cloudstack始于cloud.com,其目标是使服务供应商和企业创建,运营能力类似于亚马逊公司的公有云,私有云。2010年,cloud.com提供了基于GPLv3的社区版本,供用户免费下载。
思杰公司在2011年7月收购了cloud.com。思杰公司是openstack社区最早期的成员之一,但在2012年决定离开Openstack社区。根据媒体报道,做出这一决定是因为思杰公司认为,最初由cloud.com提供的代码相比openstack更稳定,可为用户提供更多的功能。
2012年4月,思杰公司提交了cloud.com的代码给apache软件基金会,现在在apache基金会的apache2.0许可证下进行代码开发,思杰公司将继续提供版本支持及解决方案支持。由于过度到了apache,其他厂商也纷纷加入到了开发队伍,增加功能和增强核心软件。
有一点不同的是,openstack的基金会中会有供应商的名单,不同于cloudstack的发布者名单。因为apache基金会负责了大量的项目,而Apache项目成员均为个人名义被列入,而不是他们所代表的公司。
在apache项目中,由感兴趣的公司制定独立工作人员的工作项目。当前cloudstack项目成员有一些思杰公司的员工和一些不太知名的公司,项目的发展方向由个别参与者所代表的雇主的意愿来决定。
Openstack与cloudstack的历史比较
Cloud.com致力于开发和发展一个更大的开源社区,因此,大部分cloudstack核心组件由cloud.com开发,然后由思杰公司增强。
相比之下,openstack项目从最开始就发展开放社区,其直接结果是,openstack里聚集了比cloudstack更多的主流供应商。在大多数情况下,这些厂商开发的组件第一时间提供给openstack,之后才是cloudstack提供接口。
此外,思科和Nicira公司已经成为openstack网络组件neutron的主要开发者。Neutron接收来自虚拟机的指令来定义虚拟机所需的网络,然后发送指令给交换机和路由器来创建这些网络。
每个交换机的供应商必须为Neutron提供插件,这个插件在Neutron中转换为特定厂商设备的特定命令语法。Extreme Networks和brocade这两个openstack基金会成员同样先为openstack提供插件,在进行cloudstack支持。
Openstack也有不完善的地方,如openstack相对于cloudstack来说更加复杂,对终端用户的支持不够,在安装部署上不如cloudstack便捷,在界面显示方面也不如cloudstack丰富。
要确定企业的合适部署,就必须自行对比每一个解决方案,然后进行选择,思杰公司向大型服务提供商,大学以及其他机构展现了cloudstack的成熟和稳定。而要关注openstack的稳定性可以查看IBM,戴尔和rackspace等公司的解决方案,这两款产品一直在持续发展,提供了一系列的存储和网络选项。相比开源项目,openstack是一个更高级且更现代化的开源项目,因为它是高度协作的产物。Openstack的支持者都是世界顶级的供应商,可以看出openstack备受青睐,也是开源界的明星产品。
支持openstack项目的主流供应商
X86服务器供应商 | HP(惠普) | DELL(戴尔) | IBM |
Linux供应商 | Redhat | Suse | Canonical |
路由器供应商 | Cisco | Juniper network | Alcatel-luceent |
刀片服务器供应商 | HP | Cisco | IBM |
交换机供应商 | Cisco | HP | Juniper network |
存储供应商 | Emc | IBM | NetApp |
Hypervisor供应商 | Vmware | Kvm | Xen |
当今的数据中心,许多服务器都遇到过同样的问题,即计算,电源,网络带宽等资源的利用率不足。例如,某个项目可能会需要大量的计算资源来完成计算,而一旦完成了计算任务,将不再需要那么多的计算资源。当用户想要一种灵活的,按需供给计算资源的服务,通过自动化或很少的人工干预就能使用时,那么云计算就是最好的选择之一。云计算通常包含了一个服务责任,表示云计算服务提供商承诺的性能,规格,可用率等。云计算服务让用户通过一个共享的计算资源,网络带宽,存储池,运行应用程序或服务来完成计算工作,并按资源的使用来计费。
关于云计算服务的主要特点如下:
按需自助服务:用户可以提供自己的需要订购所需的计算、存储和网络资源,而几乎无需人工干预。
网络访问:可以通过网络使用任意类型的异构计算能力,通过标准化的机制调用计算资源而不受限于具体的访问设备
资源池:多个用户可以同时访问和使用云计算提供的计算服务,服务提供商根据消费者的计算要求或实际使用量和分配实际的计算资源。
弹性;可根据需要不停机或短暂停机后迅速垂直或横向扩展
计量或测量服务:按照使用的时间,传输或存储的字节数支付云计算服务,并提供消费者具体的资源消费图表。同时,他也可以根据消费者的不同需求提供定制化的计费模式
云计算是网格计算(网格计算是分布式计算(DistributedComputing)的一种,整合大量异构计算机的闲置资源(如计算资源和磁盘存储等),组成虚拟组织,以解决大规模计算问题。),分布式计算,并行计算,效用计算(效用计算(Utility computing)是一种提供服务的模型,在这个模型里服务提供商提供客户需要的计算资源和基础设施管理,并根据应用所占用的资源情况进行计费,而不是仅仅按照速率进行收费.),联机存储技术,虚拟化,负载均衡等一些列传统计算技术和网络技术发展融合的产物。它旨在通过网络将多个成本低廉的计算实体整合成一个大型的计算资源池,并借助Saas,Paas,Iaas等服务模式,将强大的计算能力分发到终端用户手中。云计算的核心理念就是,不断的提高云端处理能力,减轻用户负担,将一系列的IT能力以服务的形式提供给用户,简化用户终端的处理负担,最终使用成为一个单纯的输入/输出设备,享受云提供的强大计算处理及服务能力。
Openstack具有建设这样资源池的能力,通过openstack的各种组件多种模式的排列组合,可以搭建成各种规模的云,这些云可以是私有云,公有云,混合云。
Openstack具有三大核心功能,即计算,存储,网络,分别对应相应的项目Nova,Cinder等。其中Nova提供了计算资源的管理,可以管理跨服务器网络的vm实例。同时Nova还提供了对多种Hyperviosr的支持,如KVM,QEMU,Xen,LXC,Vmware,Hyper-V,Powervm等。Cinder提供了存储资源的管理,可以管理各个厂商提供的专业存储设备。
服务名称 | 项目名称 | 描述 |
Dashboard | Horizon | 基于openstackAPI接口使用django开发的web管理 |
Compute | Nova | 通过虚拟化技术提供计算资源池 |
Networking | Neutron | 实现了虚拟机的网络资源管理 |
Storage存储 | ||
Object Storage | Swift | 对象存储,适用于“一次写入,多次读取” |
Block storage | Cinder | 块存储,提供存储资源池 |
Shared server(共享服务) | ||
Identity | Keystone | 认证管理 |
Imageservice | glance | 提供虚拟机镜像的注册和存储管理 |
Telemetry [t‘lemtr] | Ceilometer [si‘lmt] | 提供监控和数据采集,计量服务 |
Higher-level service(高级服务) | ||
Orchestration [,ks‘tren] | Heat | 自动化部署的组件 |
DatabaseService | Trove | 提供数据库应用服务 |
Mysql:
Openstack所使用的数据库,包括nova,glance,cinder等在内的组件都会建立自己的数据库,保存一些必要的数据。
Keystone:
Openstack的用户认证组件,它的功能主要是建立管理项目的用户和各种服务端口,以及进行用户的身份认证,若要使用openstack的任意的API,第一步就必须通过keystone的验证。
keystone的主要功能是提供认证和编录服务
keystone提供了两种认证方式:token,identifybackend)
token(令牌,实际是一个随机字串,在认证时直接使用),主要用于内部各组件之间
identify(账号,密码),需要用户登陆时,如用户通过horizon访问云资源
catalog(编录):保存当前openstack架构中的调用接口(ip地址,端口,url信息),openstack各个组件之间交互通过api接口,openstack架构各个组件通过http的restful机制(一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制)远程过程调用,基于URI输出。
policy:管理策略,如与用户管理、虚拟机实例管理有关的策略
Glance:
用来存放管理虚拟机镜像和快照的服务,这也是一个最小架构中必须有的服务。
glance存放镜像的元数据的
registry:调用数据库的接口,检索接口
database:映像文件的存储位置等
swift:分布式存储
Neutron:
网络服务,用来提供虚拟机网络通信的组件,负责接收对网络的调用请求。
Nova:
Nova是个至关重要的组件,也是个相对庞大的组件,其中有很多服务,它是进行生成虚拟机工作的主要服务。
Nova计算节点,是openstack的最核心的节点,运行虚拟机实例,分配cpu、内存,nova-compute本身并不能运行虚拟机,是要通过hypervisor,nova-compute通过api调用hypervisor,,nova-compute支持那种api就可以调用那种hypervisor,如nova-compute支持libvirt api就可以调用libvirt支持的hypervisor(如kvm),xenapi可以调用xen
Cinder:块存储
用来创建,删除及管理volume(虚拟磁盘卷),以及给volume做快照等服务的组件
swift:分布式文件系统,用来存储镜像文件模板
Horizion:
Openstack的web管理页面,使用django框架开发。Web管理页面包含了日常使用的大部分功能,提供给用户一个最直观的展现方式。很多简单的二次开发都是从Horizon开始的。
Rabbitmq:
在openstack中,各个服务之间是通过消息来交互的,因为openstack使用AMQP作为消息传递的技术,所以rabbitmq,qpid,zeromq等支持AMQP的软件都是被openstack所支持的。Rabbitmq是第一个被openstack所使用的消息传递软件。Openstack通过AMQP实现RPC服务,来保证不同组件之间的通信,rabbitmq是控制节点中的一个非常关键的服务。
虚拟机运行在nova节点上的,所有组件都围绕vm工作
keystone是openstack的组件之一,用于为openstack家族中的其他组件成员提供统一的认证服务,包括身份验证、令牌发放和校验、服务列表、用户权限定义等。其中服务列表体现在用户登录openstack系统后能够使用的计算,网络,存储等服务的列表。通过下面的图可以看出openstack中所有组件的认证,都需要keystone的参与,所以keystone自身的高可用也非常重要。
keystone服务主要有两个功能
1. 实现用户管理:主要是认证和授权
Keystone实现认证的方式有两种:token认证,用户名密码认证
实现服务管理:openstack集群中每一个服务都有可能在独立的节点上,这些节点的IP地址,监听的端口,访问路径uri都要在Identity中进行注册,部署identity后,只需向外输出一个identity的路径就可以查找到其他组件(image,nova,compute…)的访问路径了。即存储所有可用服务的信息,包含其API的访问入口(API endpoint路径)。
keystone的关键术语:
User:一个user可以关联至多个tenant
Tenant(租户):一个tenant对应一个project或一个组织,一个租户相当于一个公司或一个项目,openstack是可以实现公有云的,每一个项目中也有可能会包含多个虚拟机实例,项目也可以是一个tenant
Tenant的另一种解释:Project(Tenant):可以理解为一个人、或服务所拥有的资源集合。在一个Project(Tenant)中可以包含多个User,每一个User都会根据权限的划分来使用Project(Tenant)中的资源。比如通过Nova创建虚拟机时要指定到某个Project中,在Cinder创建卷也要指定到某个Project中。User访问Project的资源前,必须要与该Project关联,并且指定User在Project下的Role。
Role:角色主要实现向User授权的,openstack有几个内置的角色,admin,member等
Token:定义了令牌的有效时间和令牌中用户的权限,项目等基本信息
Service:对应业务模型服务,如计算(compute),存储(volume),镜像(Glance)等
Endpoint:服务的访问入口每个服务都会有自己的访问入口,也称之为访问端点。
Endpoint:一个可以通过网络来访问和定位某个Openstackservice的地址,通常是一个URL。比如,当Nova需要访问Glance服务去获取image 时,Nova通过访问Keystone拿到Glance的endpoint,然后通过访问该endpoint去获取Glance服务。我们可以通过Endpoint的region属性去定义多个region。Endpoint 使用对象分为三类:
admin url –>给admin用户使用,Post:35357
internal url –>OpenStack内部服务使用来跟别的服务通信,Port:5000
public url –>其它用户可以访问的地址,Post:5000
创建完service后创建API EndPoint. 在openstack中,每一个service都有三种endpoints. Admin, public, internal。 Admin是用作管理用途的,如它能够修改user/tenant(project)。 public 是让客户调用的,比如可以部署在外网上让客户可以管理自己的云。internal是openstack内部调用的。三种endpoints 在网络上开放的权限一般也不同。Admin通常只能对内网开放,public通常可以对外网开放internal通常只能对安装有openstack服务的机器开放。
用户--角色--服务的交互图解:
keystone的逻辑架构图:
1. 可以使用kvs或memcached实现令牌(token)后端存储。Token后端存储用来存储基于token认证相关的token信息
2. Identitybackend(用户名和密码的认证方式),实现方式有:kvs,pam,sql,ldap,etc.
3. Catalogbackend(编录服务后端),keystone可以直接连接到memcached中,将token保存下来,事实上keystone没有memcached也可以正常工作,因为keystone的token backend可以基于keystone自己的存储提供。实现方式有kvs,sql,etc
4. Policykackend(存储策略):存储访问时使用的规则及自定义的其他规则。
keystone验证流程:以创建虚拟机的流程为例
keystone的工作流程总结:
用户像keystone发送用户名和密码,通过验证后,keystone会返回一个临时token和一个service catalog的列表。
用户用这个临时的token向catalog列表中keystone的endpoint请求用户对应的tenant信息,keystone验证token通过后会返回用户对应的tenant列表。
用户从列表中选取tenant,再次向keystone请求,keystone验证通过后,返回与该tenant相关的catalog信息和token。
用户用该token以及tenant/user信息向catalog中的nova服务器端点请求开启虚拟机服务。nova向keystone请求验证:<1>.token是否合法<2>.这个租户和用户是否有权限来向nova请求服务?
keystone返回给nova: <1>.租户-用户具备访问nova权限。<2>. token合法<3>. token属于该租户-用户。
nova根据自己的规则判断用户是否具备开启虚拟机的权限,如果具备,启动虚拟机,并向用户报告状态。
Keystone认证流程:
用户alice登录keystone系统(password或者token的方式),获取一个临时的token和catalog服务目录(v3版本登录时,如果没有指定scope,project或者domain,获取的临时token没有任何权限,不能查询project或者catalog)。
alice通过临时token获取自己的所有的project列表。
alice选定一个project,然后指定project重新登录,获取一个正式的token,同时获得服务列表的endpoint,用户选定一个endpoint,在HTTP消息头中携带token,然后发送请求(如果用户知道project name或者project id可以直接第3步登录)。
消息到达endpoint之后,由服务端(nova)的keystone中间件(pipeline中的filter:authtoken)向keystone发送一个验证token的请求。(token类型:uuid需要在keystone验证token,pki类型的token本身是包含用户详细信息的加密串,可以在服务端完成验证)
keystone验证token成功之后,将token对应用户的详细信息,例如:role,username,userid等,返回给服务端(nova)。
服务端(nova)完成请求,例如:创建虚拟机。
服务端返回请求结果给alice。
glance是openstack项目中负责镜像管理的模块,其功能包括虚拟机镜像的查找、注册和检索等操作。
glance提供restful api可以查询虚拟机镜像的metadata,并且可以获得镜像
通过glance,虚拟机镜像可以被存储到多种存储上,比如简单的文件存储或者对象存储
glance在Openstack中的位置:
Glance基本概念:
image identifiers:就是image URI,格式:<GlanceServer Location>/images/<ID>全局唯一
Image status:
queued:镜像ID已经被保留,镜像的metadata已经被写到数据库中,但镜像还没有上传
saving:镜像正在被上传
active:镜像可以使用了
killed:镜像损坏或者不可用
deleted:镜像被删除
Disk format
raw:raw不是一种真正的磁盘格式,而是代表虚拟机所使用的原始镜像;它并不存储元数据,因此可以作为保证虚拟机兼容性的候选方案,然而也正因为它不存储元数据,因此不能支持某些高级特性,比如快照和压缩等。所以raw性能较好,如果初始创建的虚拟磁盘是10GB,就在文件系统占10G的存储空间。
vhd:vmware,xen,microsoft,virtualbox支持的格式
vmdk:common format 开源社区通用的,规范化的磁盘格式
vdi:virtualbox,qemu emulator这两类hypervisor支持的格式
iso: optical disc光盘镜像,主要用来做归档之用。
qcow2:qemu emulator主要用于qemu类型的虚拟机上,特点在于虚拟磁盘大小是动态扩展,如果初始创建的虚拟磁盘大小是10G,但在文件系统不会占10G空间,用户写入多少就占多少空间。即随着实际的使用空间,虚拟磁盘的物理使用空间会动态变化,但性能比起raw格式会差一些,但qcow2格式支持对虚拟机做快照。
aki:Amazon kernel image
ari:Amazon ramdisk image
ami:Amazone machine image
Container format:
上文中提到了磁盘的格式,但是若要创建一个虚拟机不能仅仅是定义磁盘格式,还要去定义虚拟机使用了多少个CPU,内存是多少,所支持的操作系统的架构是什么样的等等元数据信息,Container format可以使用的选项有:
Bare
ovf
aki
ami
ari
image-create命令至少要接收三个参数:--name 、--container_format、--disk_format。其中--disk_format用于指明磁盘镜像文件的格式,包括raw,qcow2,vhd,vmdk,iso,vdi,aki,ari,ami等。--container_format用于表明镜像文件是否包含了虚拟机的元数据信息,然而,目前compute服务并未使用此信息,因此,在不确定的情况下可以将其指定为bare,而常用的格式主要有bare(没有container或元数据信息)、ovf、aki、ari或ami几种。
Glance的基本架构:
Glance API:对外提供镜像接口服务,包括镜像的上传和下载,更改信息以及虚拟机、云硬盘快照管理等接口服务。
Glance Registry(注册服务):存储镜像元数据信息与数据库交互实现镜像基础信息存储
store adapter(存储适配器):镜像本身的存储,提供多种存储适配,支持亚马逊云存储S3(Simple Storage Service简单存储服务),openstack自由的swift(对象存储)以及常用的文件存储系统,当然也可以自行开发拓展到其他存储上。
store-Adapter
S3
Swift
Filesystem:默认后端存储
RBD:Ceph的Randos blockdevice(RBD)
HTTP:通过http在internet上读取可用的虚拟机镜像。
其他分布式存储,比如sheepdog等
Nova是什么?
openstack是由Rackspace和NASA共同开发的云计算平台,类似于Amazon EC2和S3的云基础架构服务,nova在openstack中提供计算服务。nova服务由多个组件共同组成,这些组件用于提供API,Compute核心组件、网络功能、控制台接口,命令行客户端及其他组件
nova在openstack中的位置
nova的架构:
Compute服务有多个组件共同组成,这些组件用于提供API,Compute核心组件、网络功能、控制台接口,命令行客户端及其他组件
核心组件:
nova-api:接收并响应终端用户对compute api接口调用的服务,除了支持openstack compute API还兼容amazon ec2 api以及专用于特权用户执行管理工作的admin API。另外nova-api还用于管理instance,以及强制生效指定的策略等。
Nova-api-metadata服务:接收并响应有instance发起的metadata调用请求,仅用于nova-network的multi-host模型中。
nova-compute:主要功能是借助于Hypervisor的api(KVM,QEMU,Vmware api)启动及终止虚拟机实例的。主要作用就是在对应的Hypervisor中启动或停止虚拟机的进程,但是他的工作过程主要是从队列中接收操作请求并执行相应的操作,如启动虚拟机操作,在数据库中更新其虚拟机的状态等等。
nova-scheduler: Nova-scheduler进程:compute中最简单的组件,负责从队列中取出一个instance的请求并决定由哪个compute server来运行之。
nova-conductor:是一个模块,位于nova-compute和数据库的中间层,用来避免多个nova-compute与数据库直接进行交互,导致数据库直接暴漏给nova-compute的。所以nova-compute启动虚拟机实例完成以后,对于更新数据库状态的请求操作不是直接由nova-compute向数据库发起的,而是扔回到对列中,再在由Nova-conductor取回之后执行相关更新操作。
网络功能:
Nova-network守护进程:类似于nova-compute,它负责从队列取出网络相关的任务并执行相关的操作,包括设定桥接接口及修改iptables规则等。不过,此功能已经由openstack中专用的组件neutron来实现。
Nova-dhcpbridge脚本:通过dnsmasq的dhcp-script来跟踪IP地址租约并记录与数据库中,目前已经由专门的服务组件neutron来实现。
控制台接口:控制台接口的作用是,当我们在openstack中启动了虚拟机实例以后,这些实例有可能运行在不同的nova-compute节点(计算节点)上,用户连接openstack访问虚拟机实例时,尤其是在没有配置网络接口地址,也不知道在那一台计算节点,用户是无法连接到虚拟机实例的,此时只能通过控制台实现。
在openstack中每一个虚拟机实例启动之后,可以监听在一个VNC的接口上,当用户使用openstack的dashboard图形界面接口中可以对虚拟机进行启动,停止,网络相关的配置,而在这个接口中基于python web打开了一个VNC的客户端工具,VNC的客户端工具本身就支持基于浏览器远程浏览,此时虚拟机是不需要配置IP地址,只需通过VNC协议基于浏览器打开控制台的方式连接虚拟机。
nova-consoleauth:认证由consoleproxies(控制台代理)传入的用户认证token
nova-novncproxy:向经由vnc接口连入各instance的请求提供代理服务,支持基于浏览器的
Nova-xvpnvncroxy守护进程:向经由vnc接口连入个instance的请求提供代理服务,支持基于专为openstack设计的java客户端 接口
nova-cert:管理x509格式的证书。
Client:
nova-client:向nova-api发送请求的client
nova-manage:管理员控制命令,查看和管理包括服务进程,虚拟机,物理主机,套餐,网络,存储等
其他组件:
Queue(AMQP):在各进程间传递消息的消息队列服务,支持rabbitmq,apache qpid以及zeromq
Sql database: 为云基础架构存储构建及运行时的数据,包括可用的实例类型,运行中的实例,可用的网络等信息。理论上,openstack可支持任何SQL类型的数据库管理系统,但实际用的最多是Sqllite,Mysql,Postgresql。
nova内部组件的交互:
为了使得让调用者调用发出请求之后,能立即返回,当被调用者处理结束之后又能通知给调用者,在调用者和被调用者之间需要一个messaging broker(消息代理)负责完成,messaging broker主要是用来实现消息传递及消息存储队列,我们可以把这个消息传递的服务安装一个独立的服务器上面,也可以和控制节点一起部署,当一个调用者需要调用其他主机提供的服务时,调用者只需将请求扔给消息队列服务器,消息队列服务器也能够知道哪些主机能提供相应的服务,所以会把相应的请求在扔给提供服务的主机,当提供服务的主机处理完之后将结果扔回消息队列中,队列服务器将结果返回给请求者。但是很多时候,消息队列的工作机制是这样的,那些能够提供服务的主机为了尽早知道有哪些与自己相关的请求需要进行服务,可以进行订阅与自己相关的消息,这种订阅服务意味着自行向队列注册并监听某一个队列(或者可以认为自己侦听某一类的消息,一旦有相应的消息扔到队列中,订阅者会立即获得相应的消息,并提供相应的服务),而对于发送请求的我们通常称之为消息的生产者,也叫消息的发布者。
openstack中新建云主机的流程
虚拟机启动过程如下:
界面或命令行通过RESTful API向keystone获取认证信息。
keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请求。
界面或命令行通过RESTful API向nova-api发送一个boot instance的请求(携带auth-token)。
nova-api接受请求后向keystone发送认证请求,查看token是否为有效用户和token。
keystone验证token是否有效,如有效则返回有效的认证和对应的角色(注:有些操作需要有角色权限才能操作)。
通过认证后nova-api和数据库通讯。
初始化新建虚拟机的数据库记录。
nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源(HostID)。
nova-scheduler进程侦听消息队列,获取nova-api的请求。
nova-scheduler通过查询nova数据库中计算资源的情况,并通过调度算法计算符合虚拟机创建需要的主机。
对于有符合虚拟机创建的主机,nova-scheduler更新数据库中虚拟机对应的物理主机信息。
nova-scheduler通过rpc.cast向nova-compute发送对应的创建虚拟机请求的消息。
nova-compute会从对应的消息队列中获取创建虚拟机请求的消息。
nova-compute通过rpc.call向nova-conductor请求获取虚拟机消息。(Flavor)
nova-conductor从消息队队列中拿到nova-compute请求消息。
nova-conductor根据消息查询虚拟机对应的信息。
nova-conductor从数据库中获得虚拟机对应信息。
nova-conductor把虚拟机信息通过消息的方式发送到消息队列中。
nova-compute从对应的消息队列中获取虚拟机信息消息。
nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求glance-api获取创建虚拟机所需要镜像。
glance-api向keystone认证token是否有效,并返回验证结果。
token验证通过,nova-compute获得虚拟机镜像信息(URL)。
nova-compute通过keystone的RESTfull API拿到认证k的token,并通过HTTP请求neutron-server获取创建虚拟机所需要的网络信息。
neutron-server向keystone认证token是否有效,并返回验证结果。
token验证通过,nova-compute获得虚拟机网络信息。
nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求cinder-api获取创建虚拟机所需要的持久化存储信息。
cinder-api向keystone认证token是否有效,并返回验证结果。
token验证通过,nova-compute获得虚拟机持久化存储信息。
nova-compute根据instance的信息调用配置的虚拟化驱动来创建虚拟机。
nova通用部署模式,每个服务部署在单个服务器上
高可用的部署模式
nova常见错误排查:
401认证错误
检查用户名和密码以及tenant是否正确
检查认证配置是否正确
409错误
nova服务是否正常运行
no valid host错误
查看是不是没有可用的资源
网络不通
查DHCP、查路由、查openvswitch
基础概念:
交换机和路由器的区别有哪些:
工作层次不同,交换机工作在L2层,路由器工作在L3层
数据转发依据对象不同,交换机基于MAC转发,路由器基于IP数据包转发
解决的问题不同
交换机解决同网段通信,路由器解决多网段之间通信
linux中的路由表,其实就是使用软件实现的路由器
混杂模式(promiscuous mode)
2 接收所有经过设备的数据包
2 一般用于网络抓包
DHCP
功能
统一为主机分配IP地址
好处:
降低了配置和部署设备时间
降低了发生配置错误的可能性
可以集中化管理设备的IP地址分配
DHCP过程:
linux中实现DHCP的实现
工具软件:dnsmasq
网络命名空间
独享网络资源
interface
iptables
router
LXC
网络隔离
网络overlay
下图为使用了网络命名空间和未使用网络命名空间的示意图
叠加网络:
一个数据包(或帧)封装在另一个数据包内,被封装的包转发到隧道端点后在被解封装
叠加网络就是使用这种所谓“包内之包”的技术安全的将一个网络隐藏在另一个网络中,将网络迁移到另一个端点的技术
叠加网络的实现方式:
VLAN :L2 over L2
GRE:L3 over L3 (udp)
Vxlan: L2 over L3 (udp)
叠加网络解决了运行问题:
数据中心网络数量限制:
1-4096个VLAN 突破至1600万VLAN
物理网络基础设施限制
不改变物理网络的前提下变更vm网络拓扑
vm迁移
多租户场景:支持IP地址重叠
VLAN虚拟局域网
2层广播隔离
灵活的组网
最多4096VLAN
直接在L2实现
通用路由封装协议(GRE)
跨不同网络实现二次IP通信
L3上面封装L3
封装在IP报文中
点对点的隧道通信
原文地址:http://liuxiong.blog.51cto.com/12904968/1931330