防伪码:有朝一日龙腾水,我让长江水倒流。
如何理解云?
云是基于“云计算”技术,实现各种终端设备之间的互联互通。手机、电视机等都只是一个单纯的显示和操作终端,它们不再需要具备强大的处理能力。用户享受的所有资源、所有应用程序全部都由一个存储和运算能力超强的云端后台来提供。像我们现在经常使用的在线杀毒、网络硬盘、在线音乐等都属于云服务范畴。
云计算的概念可以从用户、技术提供商和技术开发人员三个不同角度来解读。
用户看云计算
从用户的角度考虑,主要根据用户的体验和效果来描述,云计算可以总结为:云计算系统是一个信息基础设施,包含有硬件设备、软件平台、系统管理的数据以及相应的信息服务。用户使用该系统的时候,可以实现“按需索取、按用计费、无限扩展,网络访问”的效果。
简单而言,用户可以根据自己的需要,通过网络去获得自己需要的计算机资源和软件服务。这些计算机资源和软件服务是直接供用户使用而无需用户做进一步的定制化开发、管理和维护等工作。同时,这些计算机资源和软件服务的规模可以根据用户业务变化和需求的变化,随时进行调整到足够大的规模。用户使用这些计算机资源和软件服务,只需要按照使用量来支付租用的费用。
技术提供商看云计算
技术提供商对云计算理解为,通过调度和优化的技术,管理和协同大量的计算资源;针对用户的需求,通过互联网发布和提供用户所需的计算机资源和软件服务;基于租用模式的按用计费方法进行收费。
技术开发人员看云计算
技术开发人员作为云计算系统的设计和开发人员,认为云计算是一个大型集中的信息系统,该系统通过虚拟化技术和面向服务的系统设计等手段来完成资源和能力的封装以及交互,并且通过互联网来发布这些封装好的资源和能力。
所谓大型集中的信息系统,指的是包含有大量的软硬件资源,并且通过技术和网络等对其进行集中式的管理的信息系统。通常这些软硬件资源在物理上或者在网络连接上是集中或者相邻的,能够协同来完成同一个任务。
信息系统包含有软硬件和很多软件功能,这些软硬件和软件功能如果需要被访问和使用,必须有一种把相关资源和软件模块打包在一起并且能够呈现给用户的方式。虚拟化技术和Web服务为最为常见的封装和呈现技术,可以把硬件资源和软件功能等打包,并且以虚拟计算机和网络服务的形式呈现给用户使用。
所以云计算(Cloud Computing)是分布式计算(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 |
当今的数据中心,许多服务器都遇到过同样的问题,即计算,电源,网络带宽等资源的利用率不足。例如,某个项目可能会需要大量的计算资源来完成计算,而一旦完成了计算任务,将不再需要那么多的计算资源。当用户想要一种灵活的,按需供给计算资源的服务,通过自动化或很少的人工干预就能使用时,那么云计算就是最好的选择之一。云计算通常包含了一个服务责任,表示云计算服务提供商承诺的性能,规格,可用率等。云计算服务让用户通过一个共享的计算资源,网络带宽,存储池,运行应用程序或服务来完成计算工作,并按资源的使用来计费。
关于云计算服务的主要特点如下:
按需自助服务:用户可以提供自己的需要订购所需的计算、存储和网络资源,而几乎无需人工干预。
网络访问:可以通过网络使用任意类型的异构计算能力,通过标准化的机制调用计算资源而不受限于具体的访问设备
资源池:多个用户可以同时访问和使用云计算提供的计算服务,服务提供商根据消费者的计算要求或实际使用量和分配实际的计算资源。
弹性;可根据需要不停机或短暂停机后迅速垂直或横向扩展
计量或测量服务:按照使用的时间,传输或存储的字节数支付云计算服务,并提供消费者具体的资源消费图表。同时,他也可以根据消费者的不同需求提供定制化的计费模式
云计算是网格计算(网格计算是分布式计算(Distributed Computing)的一种,整合大量异构计算机的闲置资源(如计算资源和磁盘存储等),组成虚拟组织,以解决大规模计算问题。),分布式计算,并行计算,效用计算(效用计算(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 |
Ceilometer |
提供监控和数据采集,计量服务 |
Higher-level service(高级服务) |
||
Orchestration |
Heat |
自动化部署的组件 |
DatabaseService |
Trove |
提供数据库应用服务 |
Mysql:
Openstack所使用的数据库,包括nova,glance,cinder等在内的组件都会建立自己的数据库,保存一些必要的数据。
Keystone:
Openstack的用户认证组件,它的功能主要是建立管理项目的用户和各种服务端口,以及进行用户的身份认证,若要使用openstack的任意的API,第一步就必须通过keystone的验证。
keystone的主要功能是提供认证和编录服务
keystone提供了两种认证方式:token,identify backend)
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认证,用户名密码认证
2. 实现服务管理: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:一个可以通过网络来访问和定位某个Openstack service的地址,通常是一个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. Identity backend(用户名和密码的认证方式),实现方式有:kvs,pam,sql,ldap,etc.
3. Catalog backend(编录服务后端),keystone可以直接连接到memcached中,将token保存下来,事实上keystone没有memcached也可以正常工作,因为keystone的token backend可以基于keystone自己的存储提供。实现方式有kvs,sql,etc
4. Policy kackend(存储策略):存储访问时使用的规则及自定义的其他规则。
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 认证流程:
1. 用户alice登录keystone系统(password或者token的方式),获取一个临时的token和catalog服务目录(v3版本登录时,如果没有指定scope,project或者domain,获取的临时token没有任何权限,不能查询project或者catalog)。
2. alice通过临时token获取自己的所有的project列表。
3. alice选定一个project,然后指定project重新登录,获取一个正式的token,同时获得服务列表的endpoint,用户选定一个endpoint,在HTTP消息头中携带token,然后发送请求(如果用户知道project name或者project id可以直接第3步登录)。
4. 消息到达endpoint之后,由服务端(nova)的keystone中间件(pipeline中的filter:authtoken)向keystone发送一个验证token的请求。(token类型:uuid需要在keystone验证token,pki类型的token本身是包含用户详细信息的加密串,可以在服务端完成验证)
5. keystone验证token成功之后,将token对应用户的详细信息,例如:role,username,userid等,返回给服务端(nova)。
6. 服务端(nova)完成请求,例如:创建虚拟机。
7. 服务端返回请求结果给alice。
glance是openstack项目中负责镜像管理的模块,其功能包括虚拟机镜像的查找、注册和检索等操作。
glance提供restful api可以查询虚拟机镜像的metadata,并且可以获得镜像
通过glance,虚拟机镜像可以被存储到多种存储上,比如简单的文件存储或者对象存储
glance在Openstack中的位置:
Glance基本概念:
image identifiers:就是image URI,格式:
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 block device(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:认证由console proxies(控制台代理)传入的用户认证token
nova-novncproxy:向经由vnc接口连入各instance的请求提供代理服务,支持基于浏览器的
Nova-x***vncroxy守护进程:向经由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中新建云主机的流程
虚拟机启动过程如下:
1. 界面或命令行通过RESTful API向keystone获取认证信息。
2. keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请求。
3. 界面或命令行通过RESTful API向nova-api发送一个boot instance的请求(携带auth-token)。
4. nova-api接受请求后向keystone发送认证请求,查看token是否为有效用户和token。
5. keystone验证token是否有效,如有效则返回有效的认证和对应的角色(注:有些操作需要有角色权限才能操作)。
6. 通过认证后nova-api和数据库通讯。
7. 初始化新建虚拟机的数据库记录。
8. nova-api通过rpc.call向nova-scheduler请求是否有创建虚拟机的资源(Host ID)。
9. nova-scheduler进程侦听消息队列,获取nova-api的请求。
10. nova-scheduler通过查询nova数据库中计算资源的情况,并通过调度算法计算符合虚拟机创建需要的主机。
11. 对于有符合虚拟机创建的主机,nova-scheduler更新数据库中虚拟机对应的物理主机信息。
12. nova-scheduler通过rpc.cast向nova-compute发送对应的创建虚拟机请求的消息。
13. nova-compute会从对应的消息队列中获取创建虚拟机请求的消息。
14. nova-compute通过rpc.call向nova-conductor请求获取虚拟机消息。(Flavor)
15. nova-conductor从消息队队列中拿到nova-compute请求消息。
16. nova-conductor根据消息查询虚拟机对应的信息。
17. nova-conductor从数据库中获得虚拟机对应信息。
18. nova-conductor把虚拟机信息通过消息的方式发送到消息队列中。
19. nova-compute从对应的消息队列中获取虚拟机信息消息。
20. nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求glance-api获取创建虚拟机所需要镜像。
21. glance-api向keystone认证token是否有效,并返回验证结果。
22. token验证通过,nova-compute获得虚拟机镜像信息(URL)。
23. nova-compute通过keystone的RESTfull API拿到认证k的token,并通过HTTP请求neutron-server获取创建虚拟机所需要的网络信息。
24. neutron-server向keystone认证token是否有效,并返回验证结果。
25. token验证通过,nova-compute获得虚拟机网络信息。
26. nova-compute通过keystone的RESTfull API拿到认证的token,并通过HTTP请求cinder-api获取创建虚拟机所需要的持久化存储信息。
27. cinder-api向keystone认证token是否有效,并返回验证结果。
28. token验证通过,nova-compute获得虚拟机持久化存储信息。
29. nova-compute根据instance的信息调用配置的虚拟化驱动来创建虚拟机。
nova通用部署模式,每个服务部署在单个服务器上
高可用的部署模式:
nova常见错误排查:
401认证错误
检查用户名和密码以及tenant是否正确
检查认证配置是否正确
409错误
nova服务是否正常运行
no valid host错误
查看是不是没有可用的资源
网络不通
查DHCP、查路由、查openvswitch
基础概念:
1. 交换机和路由器的区别有哪些:
工作层次不同,交换机工作在L2层,路由器工作在L3层
数据转发依据对象不同,交换机基于MAC转发,路由器基于IP数据包转发
解决的问题不同
交换机解决同网段通信,路由器解决多网段之间通信
2. linux中的路由表,其实就是使用软件实现的路由器
3. 混杂模式(promiscuous mode)
à 接收所有经过设备的数据包
à 一般用于网络抓包
4. DHCP
功能
统一为主机分配IP地址
好处:
降低了配置和部署设备时间
降低了发生配置错误的可能性
可以集中化管理设备的IP地址分配
DHCP过程:
linux中实现DHCP的实现
工具软件:dnsmasq
网络命名空间
独享网络资源
interface
iptables
router
LXC
网络隔离
网络overlay
下图为使用了网络命名空间和未使用网络命名空间的示意图:
5. 叠加网络:
一个数据包(或帧)封装在另一个数据包内,被封装的包转发到隧道端点后在被解封装
叠加网络就是使用这种所谓“包内之包”的技术安全的将一个网络隐藏在另一个网络中,将网络迁移到另一个端点的技术
叠加网络的实现方式:
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报文中
à 点对点的隧道通信
VLAN与GRE的封装格式比较
GRE用在SDN(软件定义网络)中的好处:
à 不用变更底层网络架构创建L2,L3通信
à 实现不同host之间网络guest互通
à 方便guest迁移
à 支持网络数量扩大
什么是隧道技术?
隧道技术(Tunneling)是一种通过使用互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。隧道协议将其它协议的数据帧或包重新封装然后通过隧道发送。新的帧头提供路由信息,以便通过互联网传递被封装的负载数据。
这里所说的隧道类似于点到点的连接,这种方式能够使来自许多信息源的网络业务在同一个基础设施中通过不同的隧道进行传输。隧道技术使用点对点通信协议代替了交换连接,通过路由网络来连接数据地址。隧道技术允许授权移动用户或已授权的用户在任何时间、任何地点访问企业网络。
通过隧道的建立,可实现:将数据流强制送到特定的地址,隐藏私有的网络地址在IP网上传递非IP数据包,提供数据安全支持
隧道技术好处
隧道协议有很多好处,例如在拨号网络中,用户大都接受ISP分配的动态IP地址,而企业网一般均采用防火墙、NAT等安全措施来保护自己的网络,企业员工通过ISP拨号上网时就不能穿过防火墙访问企业内部网资源。采用隧道协议后,企业拨号用户就可以得到企业内部网IP地址,通过对PPP帧进行封装,用户数据包可以穿过防火墙到达企业内部网。
隧道的应用
***具体实现是采用隧道技术,将企业网的数据封装在隧道中进行传输。隧道协议可分为第二层隧道协议PPTP、L2F、L2TP和第三层隧道协议GRE、IPsec。它们的本质区别在于用户的数据包是被封装在哪种数据包中在隧道中传输的
VXLAN技术
VXLAN全称Virtual extensible LAN,是一种覆盖网络技术或隧道技术。VXLAN将虚拟机发出的数据包封装在UDP中,并使用物理网络的IP/MAC作为outer-header进行封装,然后在物理IP网上传输,到达目的地后由隧道终结点解封并将数据发送给目标虚拟机。
à IP中封装mac
à L3上封装L2
à L2 over UDP
neutron:网络服务,负责接收对网络的调用请求
网络管理和配置是云计算中一项非常重要的功能。nova自带的nova-network实现了一些基本的网络模型,允许虚拟机之间的相互通信及虚拟机对internet的访问。归纳的来讲nova network的主要功能有:
网络模型:nova network实现了三种网络模型,允许管理员根据自己的需要进行组网,让虚拟机之间可以相互通信。这三种模式分别是:flat、flatdhcp、vlan,后面会对这三种模型进行更加详细的介绍。
IP地址管理:nova network需要管理虚拟机使用的IP地址,这些地址包含两类,一类是fixed ip,在虚拟机的整个生命周期中该IP地址都不会发生变化;另一类是floating ip,是动态的分配给虚拟机的,随时都可以收回。
dhcp功能:在flatdhcp和vlan模式下,虚拟机是通过DHCP来获取其fixed ip的;nova network会启动dnsmasq作为虚拟机的DHCP服务器,该虚拟机分配ip。
安全防护:出于安全的考虑,nova中的虚拟机可以防止IP/MAC洪泛,不能随便修改虚拟机的MAC地址,修改后虚拟机就不能上网了,这项功能主要是通过ebtables/iptables实现的。
openstack早期版本的网络方案:
FLAT
FLATDHCP
VLAN
先看一下FLAT网络部署模式:
flat:平面的,意味着在同一个openstack内部所创建的所有虚拟机实例,无论它们是不是在同一个物理节点上,这些所有的虚拟机实例都是通过同一个桥接网络接口连出来的,而且都在同一个网段内,因此彼此之间没有任何在网络上隔离。这种网络简单,不需要dhcp服务,但需要通过文件注入。
注:基于config drive方式,将配置的网络信息注入到openstack/content/0000文件中,然后虚机启动后,由cloudinit读取此文件数据,由cloud-init中的基础组件进行虚机网络设置。
FLAT网络的特点:
在openstack的网络平台只有一个子网,FLAT模式需要指定一个子网,规定虚拟机使用的IP地址范围。
创建实例时,从有效的IP地址池获取一个IP地址,为虚拟机实例分配,然后在虚拟机启动时候通过外部注入的方式去修改IP相关的配置文件,虚拟机启动后就会拥有IP地址
FLAT模式需要在安装openstack时需要手工配置好网桥(br100),所有的系统实例都是和同一个网桥连接,网桥与连接到网桥的实例组成一个虚拟网络。
网络控制器(nova-network节点)对虚拟机实例进行NAT转换,实现与外部的通信
FLATDHCP模式:
flatdhcp:不需要文件注入,与Flat模式类似,只是少了dhcp的部分而已。
与FLAT模式一样,从IP池取出IP分配给虚拟机实例,所有的实例都在一个子网中。
IP地址的分配不是通过外部注入的方式让虚拟机获取IP地址,而是运行dhcp server的方式监听网桥上的dhcp discover的包的方式为虚拟机分配IP地址,这样做带来了一个非常好的灵活性---无论是哪种类型的操作系统,都可以很轻松的分配IP地址了。其实就是在nova-network服务的节点上运行dnsmasq,作为DHCP服务器监听这个网桥。
在FLATDHCP模式中nova会自动创建网桥,维护已经分配的floating ip,并启动dnsmasq来配置虚拟机的fixed ip,创建虚拟机时,nova会给虚拟机分配一个fixed ip,并将MAC/IP的对应关系写入dnsmasq的配置文件中,虚拟机启动时通过DHCP获取其fixed ip,因此就不需要将网络配置信息注入到虚拟机中了
下图是双网卡多节点OpenStack网络流
dhcp时:
1)网络控制器(运行nova-network服务的节点)一直运行dusmasq作为DHCP服务器监听网桥(br100);
2)实例做一次dhcp discover操作,发送请求;
3)网络控制器把从一个指定的子网中获得的IP地址响应给虚拟机实例。
实例访问外网时:
1)实例经过所在主机的flat_interface(这是一个flat网络),连接到nova-network所在的主机(控制节点);
2)网络控制器对外出网络流进行转发。
外网访问实例时:
1)网络控制器对floating ip进行nat;
2)通过flat网络将流入数据路由给对应的实例。
VLAN模式:
vlan模式比上面两种模式复杂,每个project都会分配一个vlan id,每个project也可以有自己的独立的ip地址段,属于不同project的虚拟机连接到不同的网桥上,因此不同的project之间是隔离的,不会相互影响。为了访问一个project的所有虚拟机需要创建一个***虚拟机,以此虚拟机作为跳板去访问该project的其他虚拟机。与flatdhcp类似,vlan模式下,也会为每个project启动一个dnsmasq来配置虚拟机的fixed ip。
VLAN的模式在数据中心中:
为每个用户分配了一个vlan,每个用户创建的instance在同一vlan里
每个用户分配一个网段,nova-network上的DHCP服务器为所有的vlan所启动,为虚拟机分配私有IP地址
nova-network为所有的instance做NAT转换
解决了二层隔离的问题,但是VLAN是4096的限制,导致单个集群只能最多4096个租户使用,这种场景只适合企业私有云环境,但是不适合公有云环境
公有云环境下对网络的需求:
高密度
多租户
大规模部署
虚拟机的可移植性
资源的管理的自动化
企业级客户的期望:
用户可自定义网络
丰富的多层拓扑结构
QoS保证(QoS(Quality of Service,服务质量)指一个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力, 是网络的一种安全机制, 是用来解决网络延迟和阻塞等问题的一种技术)
防火墙,***,IDS,LBAAS等安全服务
监控和审计
为了满足以上要求重新开发了新的项目:neutron,这个项目早期叫quantum
Neutron网络模型:
将上面的图与物理环境做对比:
假如公司有50台机器,有一个交换机设备,50台机器连接到交换机的端口上,我们需要将50台机器连接到交换机的每一个端口上,此时这个交换机上的50台机器就组成了一个网络,我们在openstack中可以把它称之为租户网络,一般情况下,公司都会分成几个部门:我们希望不同部门之间的网络是隔离的,此时就要将网络划分成多个租户网路,假设有两个部门:研发部和生产部,我们就可以划分成租户网络A租户网络B,假设研发部门中有很多开发团队,我们又希望不同的开发团队的网络也是隔离的,假如说一个研发部门中有两个团队,每个团队我就给一个子网A和B。部门及团队的用户如果要访问互联网,交换机还需要去连一个路由器,或者交换机如果带有路由的功能也可以访问公网。在openstack中,所有的网路设备和功能都被虚拟化了,用户本来用的是物理机,现在用的是虚拟机,对虚拟机的管理也沿用了对物理机的那种管理方式,把不同的虚拟机放在不同的子网中,把不同的用户放在不同的租户网络中,这些虚拟机访问公网也需要一个网关,这就是openstack的一个网络拓扑,与我们传统的通过网络设备的配置来划分的网路拓扑的一个对应关系。
neutron服务
neutron是一个分层架构,所有的请求都先到neutron server上,neutron server有多个API,如Base API包含刚才提到的network,subnet,port。还有一些扩展的API用来提供neutron的高级功能:安全组,虚拟路由器,防火墙,负载均衡器,***等服务。通过调用这些API来访问neutron提供的功能。用户调用这些接口之后,内部会通过RPC机制调用agent层的一些服务,这些agent有二层、三层的,agent相当于一个中间代理层,agent再会调用设备层相应的驱动来完成用户API所请求的功能。
Openstack的networking service代码名称为neutron,它通过软件的方式提供了定义及接入网络的功能。Neutron为使用者提供了整合多个不同的网络技术来最大化发挥网络功能的机制,并提供了通过三层转发及NAT配置和管理网络功能的API以实现负载均衡,边缘防火墙及ipsec ***等。
Networking API
Networking API通过软件方式定义了虚拟网络(network),子网(subnet),port(端口)等抽象层,用来描述网络资源。
网络(network)
Neutron网络目的是划分虚拟网络,在多租户环境下提供给每个租户独立的网络环境。Neutron中“网络”是一个可以被用户创建的对象,如果要和物理环境下的概念映射的话,这个对象相当于一个巨大的交换机,可以拥有无限多个动态可创建和销毁的虚拟端口。
子网(subnet)
子网是由一组IP地址组成的地址池。不同子网间的通信需要路由器的支持,Neutron中子网隶属于网络。
端口(port)
一个端口代表了在逻辑网络交换机上的虚拟交互端口,虚拟机的虚拟接口(可以理解成网卡)连接到这些端口上。当给虚拟机接口分配IP地址,需要将端口关联到子网中,从子网的地址池取出IP地址。
路由器(router)
和物理环境下的路由器类似,Neutron中的路由器也是一个路由选择和转发部件。只不过在Neutron中,它是可以创建和销毁的软部件。
DHCP
为租户网络提供DHCP服务,即IP地址动态分配,另外还会提供metadata请求服务。
DHCP agent
负责处理dhcp请求,为网络分配IP
DHCP agent scheduler
DHCP agent与network的调度,即某个网络的DHCP请求要发向那个DHCP agent,如采用轮询调度算法。
使用neutron完全可以定义出功能丰富的网络拓扑,并且支持每个项目在其内部可创建多个private network并允许其配置使用任何可用的地址,多个项目使用相同的私有地址也不会出现地址冲突的现象,可以利用这样的网络配置,可以开发多层的web应用,并允许应用到迁移到云中,而不改变IP地址。
neutron常见的部署模式有:
Single FLAT Network
Multi FLAT Network
Provider Router with private network
Per-tenant Routers with private network(最常用模式)
1. Single FLAT Network
所有虚拟机放在同一个网络中,不支持floating ip
类似FlatManager
FlatDHCPManager
不支持floating ip
注:openstack使用“floating ip”指定一个公网ip到一个运行着的虚拟机实例上面,openstack使用NAT分配floating ip到虚拟机实例上
最常见的扁平网络模式图:
上面的图就是一个简单的共享网络,所有的虚拟机租户公用一个大网络,可以理解为FLAT/FLATDHCP模式。该模式的特性就是简单便捷,网络管理方便。
2. Mutiple FLAT network(多个扁平网络模式)
类似FlatManager
FlatDHCPManager
不支持floating ip
可以创建多个网络,但还是不支持floating ip,一个租户/项目可以连接不同的网络,在部署虚拟机时候选择具体网络,一个虚拟机可以同时连接两个网络,通过两个网卡(Virtual interface)连接到不同的网络(虚拟交换机)的端口port中。
多个扁平网络的场景应用比较少见,但一个虚拟机属于多个网络的情况非常普遍。从日常普通企业应用来说,扁平共享模式是基本够用。在扁平共享模式中,网络都是共享的,每个租户都可以使用。从安全性角度来说,所有虚拟机互联互通,虽然虚拟机有防火墙机制,但如果防火墙设定漏洞较大,结果还是会存在一定的隐患,那么有没有类似的nova-network中的VLAN模式呢?答案是有的,下面的租户私有网络与VLAN类似,但不是VLAN.
3. provider router with private network(租户私有网络单个路由器) ,支持floating IP
neutron允许每个租户拥有多个自己的私有网络network(非共享模式),私有网络通过路由器router连接至外部网络,如下图所示:
所有的租户共享一个虚拟路由器,此时租户还是不能定义自己的网络
这种网络环境下,基本可以理解为类似VLAN,但不是VLAN,不同租户拥有1个或者多个私有网络networks,网络networks通过连接到单个路由器与外部网络互通,私有网络的网关终结在路由器中。
如果虚拟机需要绑定floating ip,那么就要通过路由器将外网的floating ip与私网ip地址绑定,在数据模型上就是虚拟机连接到路由器router上的端口port,该port拥有floating ip。
4. Per-tenant Routers with private network(多路由器私网模式)
在上面的单个路由器模式下,不同网络的子网是不能重叠的(overlapping)的,也就是说不能存在两个10.0.0.0/24网段,在实际的生产环境中也会有该情况发生。假如你管理着跨几个城市的统一云管理平台,就经常出现不同数据中的私网IP地址段都相同的情况,最常见的就是私有网络都是192.168.1.0/24,这种情况下如果采用nova-network是没有办法实现的,而neutron能够支持,在neutron模型上,network和真正的网络subnet分离,从数据模型上就支持了不同的network,拥有相同子网的subnet,如下图所示:
每个租户可以自己定义自己的虚拟路由器和私有网络,为虚拟机绑定floating IP,目前此种部署模式是最常用且先进的。
多路由器私网模式,每个租户/项目拥有自己的路由器,将其多个私有网络连接起来,在图中,10.0.0.0/24在租户tenantA和tenantC中都出现了。这样的好处就是租户/项目的网络可以自行构建,无需担心网络冲突等问题,管理模式更灵活。
部署nova network时至少需要两块网卡,一块作为public network,主要承载公网流量和openstack各个组建之间的流量,要能够访问公网,ip地址可以为内网地址也可以为公网地址;另一块作为internal network,承载虚拟机之间相互通信的流量,不需要为其分配ip地址,只需要保证它们物理上可以互联即可。
nova network有两种常见的部署方式,第一种方式是单个nova-network节点,充当所有虚拟机的网关,并维护dhcp服务器。这种方式最大的问题就是单点故障,一旦nova-network节点出问题了,就会影响到所有的虚拟机,需要实施HA方案。另一种方式就是multihost,即在每个计算节点上部署nova-network,每个计算节点上的虚拟机通过本机的nova-network就可以获取ip地址、metadata及访问公网。这样做的优势就是一旦某个节点出现问题,也不会影响到其他节点,而且有很好的扩展性,也是我们目前部署最为广泛一种模式
multihost 模式:
在multihost模式下,首先需要将multi_host设置为True,然后在每个计算节点上都安装好nova-network nova-api-metadata nova-compute。
从下图中可以看到,网桥br100在每个计算节点上都有,通过网桥br100实现子网10.0.0.0/8的互联,虚拟机之间的互访通过网桥br100与虚拟机数据网交换机(private switch)实现连接。如果访问外网,则需通过网络节点上设置的网关,最后通过NAT 映射访问公网。
nova network的主要配置选项有:
network_manager:该选项决定了网络的模式,有三种可选的:nova.network.manager.FlatManager
nova.network.manager.VlanManager
nova.network.manager.FlatDHCPManager
分别对应上面所提到的flat模式、flatdhcp模式和vlan模式
fixed_range:所有虚拟机fixed ip所在的网段,通过nova-manage创建网络时,创建的网络应该是该网段的子网。
floating_range:所有可以的floating ip所在的网段
force_dhcp_release:是否在删除虚拟机时立即释放其所占用的ip地址。若为True,则会立即释放,否则需要经过一段时间才释放。默认应该设置为True。
my_ip:nova-network所在的ip地址,不显式设置时该ip是宿主机上一个能访问公网的ip地址。配置时可显式的设置为本机的公网ip。
multi_host:是否启用multihost模式,如果启用,则在每个计算节点上至少要启动nova-api-metadata、nova-network、nova-compute三个服务。默认值为false。启用multihost时,需要将其设置为True。
public_interface:公网的物理接口。nova network会将floating ip配置在该接口上,另外就是在做SNAT时会将其作为参数加入到iptables规则中。
flat_network_bridge:在flat/flatdhcp模式下,使用那个网桥来连接虚拟机,实现虚拟机之间的通信。
flat_interface:虚拟机之间通信的物理接口。在flatdhcp模式下,nova network会将该接口加入到flat_network_bridge中,实现跨宿主机的虚拟机之间的通信。默认为none。
vlan_interface:虚拟机之间通信的物理接口。在vlan模式下,每个project会有一个vlan,不同的vlan和不同的网桥关联,网桥再通过vlan_interface实现跨宿主机的通信
vlan_start:在vlan模式下,最小的vlan id。
1.
2.
2.1.
2.2.
2.3.
2.4.
存储是虚拟机不可缺少的关键设备,openstack参考了亚马逊的EBS,为虚拟机提供持久化的块设备存储。最常见的示例是为虚拟机增加一个新的硬盘,这个硬盘就是块设备,如果虚拟机是linux操作系统,那么会将硬盘识别为sdb,sdc;如果是windows,则会识别为新的硬盘,此时需要格式化:
在学习openstack弹性云存储之前,先分析常见的存储概念,一般来说,从网络结构上划分,可以将存储划分为直连式存储(DAS),网络接入存储(NAS)和存储区域网络(SAN)。
直连式存储(dirct attached storage)DAS:我们常见的物理机包含硬盘,通过主机的服务总线连接提供存储服务。DAS这种直连方式能够解决单台服务器的存储空间扩展,高性能传输需求,以块设备的方式提供存储服务,例如我们常看到的/dev/sda,/dev/sdb
网络接入存储(network attached storage )NAS:是独立于物理主机,单独为网络数据存储而开发的一种文件服务器。NAS服务器集中连接了所有的网络数据存储设备(如各种磁盘阵列,磁带,光盘机等),存储容量可以较好的得到扩展,同时由于这种网络存储方式是NAS服务器独立承担的,所以对原来的网络服务器性能基本上没什么影响,可以确保整个网络性能不受影响。NAS提供了一个简单,高相价比,高可用性,高扩展性和低成本的网络存储解决方案。NAS与DAS最大的区别就是NAS采用了文件系统方式,而DAS采用的是块设备,一般需要格式化成EXT3或者NTF等文件系统后再使用。NAS存储一般采用NFS协议的方式,实现不同主机之间文件共享。
存储区域网络(storage area network )SAN:不是把所有的存储设备集中安装在一个专门的NAS服务器中,而是将存储设备通过交换机连接起来,形成存储网络,根据网络连接的协议不同又分为基于以太网TCP/IP的ISCSI协议的IP-SAN,基于Fibre Channel技术的FC-SAN。两者不同的本质不是连接介质的不同,而是采用的网络传输协议不同。IP-SAN也可以采用光纤连接。在IP-SAN中,千兆-万兆以太网交换机代替了昂贵且只有FC-SAN专用的光纤交换机;客户端的initiator或者iscsi卡代替了价格较高的主机HBA卡,具有ISCSI接口的高性价比的存储设备代替了光纤磁盘阵列。
就大规模的生产环境而言,一般都采用SAN。对于Nova而言,从创建之初就明确了“基于标准化的硬件设施”实现云计算服务。Nova采用了iscsi协议的存储方式,基于标准化的物理主机存储节点实现存储扩容。而Cinder就是Nova-Volume需求的扩展,是从Nova中分离出来的一个集中式的块存储。
如图所示:计算节点和存储节点是分离的,存储节点物理机上的存储设备通过存储网络为块存储设备提供提供服务
Nova-Volume的物理部署
那我们先来看一下早期Nova-Volume的存储设计的特点:
计算节点物理机提供计算能力,重点是提供CPU,内存,在配置上,它对存储要求不高,仅需单个硬盘或固态用于安装Hypervisor。
存储节点物理服务器采用低频CPU,内存,多硬盘的机架式服务器,比如可挂载多个硬盘的4U节点服务器。
无需采购昂贵的磁盘阵列及搭配FC交换机,通过普通机架服务器即可实现存储服务,并具备高可扩展性。
nova-volume存储适配有多种方式,有基于ISCSI的IP-SAN方式,集群文件系统Ceph方式。
在Folsom版本后引入了Cinder项目,目前Cinder是openstack中的独立的项目,实现原理和nova-volume类似,不同的是Cinder实现起来更复杂,但支持的存储适配器更多。
Cinder与openstack其他模块的设计理念一致,一切皆API,从实现角度来说与Nova类似,包括API,调度(scheduler)和存储适配(Cinder-Volume)
从下面的这张图中可以看出来,nova-compute虚拟机管理开通云硬盘时,可以使用原有的nova-volume自带的api,访问nova-volume提供的云硬盘管理服务。在F版之后提供了Cinder的api,访问更多Cinder提供的弹性云存储能力。
Cinder包括API,Scheduler和存储适配(Cinder-Volume) 3个服务,其中Cinder-Volume可以部署到多个节点上。
调度器cinder-scheduler与nova-scheduler类似,根据服务寻找合适的存储服务器cinder-volume,发送消息至cinder-volume节点,由cinder-volume提供弹性云存储服务。
cinder-volume是存储适配,为什么说是适配,因为在实际生产环境中,有很多的存储服务厂商,包括IBM,HP,NetApp;有各种存储访问协议,如ISCSI,NFS等。那么如何在生产环境中使用这些存储厂商提供的存储设备?这就需要进行适配。
每个Cinder-Volume可以对应一个或者是一类存储设备,比如多个NFS的存储可以用一个Cinder-Volume来管理,如下图所示:
根据目前看来,openstack在Folsom版之后的版本提供的存储适配Driver已经能支持主流的厂商,且基本够用。
所有的存储设备中使用的连接协议基本都是ISCSI和NFS两种,从计算节点使用的角度来讲,他们都差不多,但是整体过程有差异:
在存储设备上划分存储单元,创建存储,这一点不同厂家实现的机制都不同,接口也没有标准化。F版后,很多厂家增加了适配驱动支持。
挂载至计算节点上并让虚拟机可以识别,在这一点上两者大同小异,因为客户端(计算节点)都是基于ISCSI或者是NFS协议连接的。
ISCSI适配:
下面以剖析一下比较通用的机架式服务器ISCSI适配和NFS适配:
ISCSI适配:
nova-volume和cinder支持将其所在的机架式服务器上的硬盘作为存储资源,通过ISCSI的方式提供给虚拟机使用。该方案的特点是性价比高,机架式服务器上的硬盘资源成本相对于专业的磁盘阵列来说很有优势。例如R510上满配上硬盘16TB只需5万元费用,相比磁盘阵列几十万的费用而言价格相对低廉,且性能方面也不差,在应用系统对性能和稳定性不是很苛刻的情况下,非常实用。
ISCSI是(internet smal computer system interface)的缩写,它是一种基于因特网及SCSI-3协议下的存储技术,有IETF提出,并于2003年2月11日成为正式的标准。
ISCSI的目的是用IP协议将存储设备连接在一起,通过在IP网络上传送SCSI命令和数据,ISCSI推动了数据在网络之间的传递,同时也促进了数据的远距离管理。由于其出色的数据传输能力,ISCSI被认为是促进存储区域网(SAN)市场快速发展的关键因素之一。因为IP网络的广泛应用,ISCSI能够在LAN\WAN甚至在internet上进行数据传送,使得数据的存储不再受地域的限制。ISCSI技术的核心是TCP/IP网络上传输SCSI协议,即使用TCP/IP报文和ISCSI报文封装SCSI报文,使得SCSI命令和数据可以在普通以太网络上进行传输。
目前ISCSI的后端存储架构一般分为三种:
控制器架构:它的所有控制、转换节点都是由硬件芯片或嵌入式设备组成的,这些组成部分由存储厂商更具SCSI协议进行专门设计和实现。由于各个芯片工作的单一性,使得这种架构的整体数据处理性能很高,而且运行更加稳定。
PC架构。它由一台性能高效、稳定的普通计算机(x86服务器),通过ISCSI Target等软件实现ISCSI功能。
PC+TOE架构:这种架构是在PC架构上加入TCP减负引擎网卡,把原本由CPU包装、拆解ISCSI数据到TCP协议包的操作,转由网卡中的专用芯片来完成,从而减轻CPU的压力,提高整体数据处理性能,这个方式需要专门的网卡支持。
那么openstack如何提供基于机架式服务器方式的软件ISCSI服务?
存储节点部署上cinder-volume后,作为存储target提供块存储服务。通过物理卷PV,卷组VG,逻辑卷LV的卷管理方式分配存储空间,基于逻辑卷LV创建逻辑单元(LUN).
计算节点nova-compute作为存储客户端Initiator,查找存储节点上的逻辑存储单元LUN,并挂载至本机,识别为块设备,并分派块设备给虚拟机。
存储具体实现机制如图:
nova存储实现机制包括以下几个关键环节:
nova-api调用nova-compute主机接口run_instance。
nova-compute调用存储接口volume-api的create方法,创建存储。
volume-api存储接口将存储信息通过调度方式发送至调度引擎scheduler。
调度引擎scheduler根据一定的算法,选择具体一个存储节点,发指令至该节点cinder-volume
cinder-volume接收到创建云硬盘(create_volume)指令值,创建逻辑卷LV,并发布逻辑单元(LUN)
nova-compute接收到云硬盘创建成功的反馈后,调用其虚拟化实现,如Libvirt Driver的SCSI实现,实现ISCSI initiator连接至对应的存储逻辑单元LUN,将该块设备分配给虚拟机。
NFS适配:
NFS是Network File System的简写,即网络文件系统。NAS网络连接式存储都是采用NFS协议对外提供服务的,与ISCSI类的直接块存储不同的是:NFS是文件系统,可以理解为文件夹,NAS最大的特性就是偏重文件共享,客户终端机连接上NAS服务器后,NAS文件和目录在所有客户端上可见,并且可以访问,如图所示:
NAS存储与ISCSI的SAN存储相比,具有简单灵活,价格适中等特性,在中小企业应用较多。
Cinder对NAS提供标准的NFS协议支持。
Cinder-volume连接多个NFS服务器,在计算节点上挂载对应的NFS文件目录,例如NAS1服务器上的NAS1:/data/12342342目录挂载到具体计算节点上,计算节点就能够识别该文件系统中所有的文件。
创建云硬盘时,其实就是通过命令在NFS共享文件夹NAS1:/data/12342342/创建一个文件,如10GB文件,通过虚拟化技术添加到虚拟机中,虚拟机识别为一个块设备,这样块设备存储的创建和挂在基本完成。
谢谢观看,真心的希望能帮到您!