Nova理论

目录

一.Nova计算服务

二.Nova组件介绍

逻辑架构图

1.Nova-api

2.Nova-scheduler(调度器)

3.nova-compute

4.nova-conductor

5.Hypervisor

6.DB

7.Network

三.Nova调度器

1.调度器类型

2.过滤器调度器调度过程

3.过滤器

4.Nova 的 Cell 架构

四.工作流程

工作流程图

 工作过程



一.Nova计算服务

  • 计算服务是openstack最核心的服务之一,负责维护和管理云环境的计算资源,它在openstack项目中代号是nova。
  • Nova自身并没有提供任何虚拟化能力,它提供计算服务,使用不同的虚拟化驱动来与底层支持的Hypervisor(虚拟机管理器)进行交互。所有的计算实例虚拟服务器)由Nova进行生命周期的调度管理(启动、挂起、停止、删除等) 全局来看,Nova提供了虚拟化的资源/技术服务层面,nova本身不具备虚拟化能力,computer与虚拟化技术交互/调用资源
  • Nova需要keystone、glance、neutron、cinder和swift等其他服务的支持,能与这些服务集成,实现如加密磁盘、裸金属计算实例等。Nova会和其他组件集成,共同提供/完成一项需求/请求
     

二.Nova组件介绍

逻辑架构图

1.Nova-api

  • API是客户访问nova的http接口,它由nova-api服务实现,nova-api服务接收和响应来自最终用户的计算api请求。作为openstack对外服务的最主要接口, nova-api提供了一个集中的可以查询所有api的端点。
  • 所有对nova的请求都首先由nova-api处理。API提供REST标准调用服务,便于与第三方系统集成。
  • 最终用户不会直接改送RESTful API请求,而是通过openstack命令行、dashbord和其他需要跟nova交换的组件来使用这些API。
     
  • API:用于接收HTTP请求、转换命令、通过消息队列或HTTP与其他组件通信的nova组件。
     

2.Nova-scheduler(调度器)

  • 负责选择虚拟机的宿主机,决定虚拟机创建在哪个主机(计算节点)上,创建 Instance 时,用户会提出资源需求,例如 CPU、内存、磁盘各需要多少。OpenStack 将这些需求定义在实列类型中,用户只需要指定用哪个实列类型就可以了
  • 分两步:先过滤(过滤有条件的主机,比如cpu 等资源不足的被过滤掉),再计算权重(比如A主机有2台虚拟机,B主机有4台,那么就在A上创建,当然有很多算法,也可以自定义计算权重的算法)

3.nova-compute

  • nova-compute 是管理虚机的核心服务,在计算节点上运行。通过调用Hypervisor API实现节点上的 instance的生命周期管理。 OpenStack 对 instance 的操作,最后都是交给 nova-compute 来完成的。
  • nova-compute 与 Hypervisor 一起实现 OpenStack 对 instance 生命周期的管理。
  • 通过Driver架构支持多种Hypervisor
  • Hypervisor是计算节点上跑的虚拟化管理程序,虚机管理最底层的程序。 不同虚拟化技术提供自己的 Hypervisor。 常用的 Hypervisor 有 KVM,Xen, VMWare 等。nova-compute 为这些 Hypervisor 定义了统一的接口,Hypervisor 只需要实现这些接口,就可以 Driver 的形式即插即用到 OpenStack 系统中

4.nova-conductor

  • 负责数据库的访问权限控制,用于计算节点访问数据库的中间件(为了安全nova其他服务访问数据库统一通过此服务访问),避免nova-compute直接访问数据库
  • nova-compute 经常需要更新数据库,比如更新虚机的状态。 出于安全性和伸缩性的考虑,nova-compute 并不会直接访问数据库,而是将这个任务委托给 nova-conductor。

5.Hypervisor

计算节点上跑的虚拟化管理程序,虚机管理最底层的程序。不同虚拟化技术提供自己的 Hypervisor。 常用的 Hypervisor 有 KVM,Xen,VMWare 等。

6.DB

用于数据存储的sqI数据库。

7.Network

管理lP转发、网桥或虚拟局域网的nova网络组件。

三.Nova调度器

1.调度器类型

调度器类型调度规则
随机调度器(chance scheduler)从所有正常运行nova-compute服务的节点中随机选择。
过滤器调度器(filter scheduler)根据指定的过滤条件以及权重选择最佳的计算节点。Filter又称为筛选器
缓存调度器(caching scheduler)可看作随机调度器的一种特殊类型,在随机调度的基础上将主机资源信息缓存在本地内存中,然后通过后台的定时任务定时从数据库中获取最新的主机资源信息。

2.过滤器调度器调度过程

主要分二个阶段

  • 通过指定的过滤器选择满足条件的计算节点,比如内存使用率小于50%,可以使用多个过滤器依次进行过滤。
  • 对过滤之后的主机列表进行权重计算并排序,选择最优的计算节点来创建虚拟机实例。

3.过滤器

当过滤调度器需要执行调度操作时,会让过滤器对计算节点进行判断,返回True或False。
letc/nova/nova.conf配置文件中
scheduler_available_filters选项用于配置可用过滤器,默认是所有nova自带的过滤器都可以用于过滤作用
Scheduler_available_filters = nova.scheduler.filters.all_filters
另外还有一个选项scheduler_default_filters用于指定nova-scheduler服务真正使用的过滤器。
过滤调度器将按照列表中的顺序依次过滤。

  • RetryFilter(再审过滤器)

主要作用是过滤掉之前已经调度过的节点。如A、B、C都通过了过滤,A权重最大被选中执行操作,由于某种原因,操作在A上失败了。Nova-filter将重新执行过滤操作,那么此时A就被会RetryFilter直接排除,以免再次失败

  • AvailabilityZoneFilter (可用区域过滤器)。

为提高容灾性并提供隔离服务,可以将计算节点划分到不同的可用区域中。Openstack默认有一个命名为nova的可用区域,所有的计算节点初始是放在nova区域中的。用户可以根据需要创建自己的一个可用区域。创建实例时,需要指定将实例部署在哪个可用区域中。Nova-scheduler执行过滤操作时,会使用AvailabilityZoneFilter不属于指定可用区域计算节点过滤掉

  • RamFilter(内存过滤器)

根据可用内存来调度虚拟机创建,将不能满足实例类型内存需求的计算节点过滤掉,但为了提高系统资源利用率,Openstack在计算节点的可用内存时允许超过实际内存大小,超过的程度是通过nova.conf配置文件中
ram_allocation_ratio参数来控制的,默认值是1.5。
vi letc/nova/nova.conf
Ram_allocation_ratio=1.5

  • DiskFilter(硬盘调度器)

根据磁盘空间来调度虚拟机创建,将不能满足类型磁盘需求的计算节点过滤掉。磁盘同样允许超量,超量值可修改nova.conf中disk_allocation_ratio参数控制,默认值是1.0
vi /etc/nova/nova.confdisk_allocation_ratio=1.0

  • CoreFilter(核心过滤器)

根据可用CPU核心来调度虚拟机创建,将不能满足实例类型vCPU需求的计算节点过滤掉。vCPU也允许超量,超量值是通过修改nova.conf中
cpu_allocation_ratio参数控制,默认值是16。
vi /etc/nova/nova.conf
cpu_allocation_ratio=16.0

  • ComputeFilter(计算过滤器)

保证只有nova-compute服务正常工作的计算节点才能被nova-scheduler调度,它是必选的过滤器。

  • lmagePropertiesFilter(镜像属性过滤器)

根据所选镜像的属性来筛选匹配的计算节点。通过元数据来指定其属性。如希望镜像只运行在KVM的Hypervisor上,可以通过Hypervisor Type属性来指定。

  • ComputeCapablilitiesFilter(计算能力过滤器)

根据计算节点的特性来过滤,如x86_64和ARM架构的不同节点,要将实例分别进行过滤

  • lmagePropertiesFilter(镜像属性过滤器)

根据所选镜像的属性来筛选匹配的计算节点。通过元数据来指定其属性。如希望镜像只运行在KVM的Hypervisor上,可以通过Hypervisor Type属性来指定。

  • 服务器组反亲和过滤器

出于高可靠性考虑,将实例尽量分散部署到不同节点上

  • 服务器组亲和过滤器

与反亲和性过滤器相反,此过滤器尽量将实例部署到同一个计算节点上
 

权重过滤

权重(weight)
nova-scheduler服务可以使用多个过滤器依次进行过滤,过滤之后的节点再通过计算权重选出能够部署实例的节点。
注意:
所有权重位于novalschedulerlweights目录下。目前默认实现是RAMweighter,根据计算节点空闲的内存量计算权重值,空闲越多,权重越大,实例将被部署到当前空闲内存最多的计算节点上

4.Nova 的 Cell 架构

       

 

原理:在不影响现有的openstack云环境的前提下,解决openstack的扩展性和规模瓶颈。主要是把计算节点分为更多个更小的单元,每一个单元都有自己的数据库和消息队列。

API节点上的数据库

  • nova_api数据库中存放全局信息,这些全局数据表是从nova库迁过来的,如flavor (实例模型)、instance groups(实例组). quota(配额)。
  • nova cell0数据库的模式与nova一样,,主要用途就是当实例调度失败时,实例的信息不属于任何一个Cell,因而存放到nova cell0数据库中。

控制台接口

  • 首先用户(可以是OpenStack最终用户,也可以是其他程序)执行Nova Client提供的用于创建虚拟机的命令。
  • nova-api服务监听到来自于Nova Client的HTTP请求,并将这些请求转换为AMQP消息之后加入消息队列。
  • 通过消息队列调用nova-conductor服务。
  • nova-conductor服务从消息队列中接收到虚拟机实例化请求消息后,进行一些准备工作。nova-conductor服务通过消息队列告诉nova-scheduler服务去选择一个合适的计算节点来创建虚拟机,此时nova-scheduler会读取数据库的内容。
  • nova-conductor服务从nova-scheduler服务得到了合适的将计算节点的信息后,在通过消息队列来通知nova-compute服务实现虚拟机的创建。

虚拟机实例化流程
用户可以通过多种方式访问虚拟机的控制台

  • Nova-novncproxy守护进程:通过vnc连接访问正在运行的实例提供一个代理,支持浏览器novnc客户端。
  • Nova-spicehtml5proxy守护进程:通过spice连接访问正在运行的实例提供一个代理,支持基于html5浏览器的客户端。
  • Nova-xvpvncproxy守护进程:通过vnc连接访问正在运行的实例提供一个代理,支持openstack专用的java客户端。
  • Nova-consoleauth守护进程:负责对访问虚拟机控制台提供用
  • 户令牌认证。这个服务必须与控制台代理程序共同使用。

原生nova架构
每个组件都会精细化的控制/执行具体的工作
1、nova-api会把任务发送给conductor子功能模块
2、conductor 协调,会去做具体的协调工作,比如让scheduler去决定实例存放的位置、让具体的计算节点上的compute去创建虚拟机
3、scheduler :通过获取DB数据库中的节点资源信息等资源,去做过滤,筛选出最合适的计算节点来创建虚拟机
4、compute:控制实例生命周期(通过使用不同虚拟化驱动和vMM进行交互/调用资源)5、DB数据库:存放nova组件的各种资源、存放后端节点的资源信息,共给scheduler6、MQ:消息队列,作为组件之间交互的载体,每个组件都会去做具体的交互、操作。

单cell (扩大的DB数据库的规模)


特性:主要对原生架构中的DB数据库扩大了规模/精细化的划分DB-—->API数据库、cell0数据库、cell数据库
与原生架构不同的点:
1、这个时候,conductor 工作反而会更多了一点,因为除了需要自己去控制scheduler和compute之外,还需要将这些过程/结果信息,写入到cell数据库中
2、nova-api在获取一个请求的结果的时候,可以直接从APr数据库和CELL数据库中获取

多cell (扩大了DB数据库、消息队列、conductor)


cell的特性是每个cell单元都会有自己的数据库、消息队列和conductor

1、DB数据库做了更精细化的分层
由API数据库作为总的资源统计
由各CELL单元统计对应处理的请求的数据(存放在cell单元本地数据库中)
2、消息队列(打大规模)分层
nova组件内部子服务之间通讯会由API-rabbitmq进行承载(cell外部)每个cell单元中,获取任务会由一个cell-rabbitmq进行承载(cell内部)
3、conductor
原生架构中,conductor负责具体任务的调度加入cell之后,conductor进行了分层
父conductor角色:控制任务具体分配给哪个cell进行处理conductor :进行具体的处理和协调
 

四.工作流程

工作流程图

 工作过程

  • nova-api 接受请求,一个tcp REST请求.
  • nova-api 发送一个创建虚拟机的请求到消息队列,并会存数据库,带uuid.
  • nova-scheduler 接受这个消息,并进行过滤,根据请求的虚拟资源,即flavor的信息.
  • scheduler会找到一个可用的主机(装有nova-compute的物理主机),如果没有找到就虚拟机的状态设置成ERROR,如果有可用主机,就发消息到nova-network,就进入下一步,配置网络,注:此过程虚拟机处于scheduling任务状态。
  • nova-network 接收到消息就从fixed IP表(数据库)里拿出一个可用IP,并设置dnsmsq(DHCP server),确保拿出的IP可以与对应的MAC地址(生成的)对应,确保虚拟机可以被赋予对应的IP设置IPTABLE.
  • 对fixed IP 进行地址转换,使虚拟机可以访问外网,设置好network之后,会发消息到消息队列,使要在其上创建虚拟机的物理计算节点就收到创建虚拟机的消息;
  • 计算节点接收到消息后,就开始创建虚拟机,首先会download镜像从glance上,然后会根据之前生成的uuid,MAC,镜像位置,
  • 创建一个启动虚拟机的xml文件,然后会调用libvirt接口,根据xml配置创建虚拟机,
  • 虚拟机创建完成之后,会把虚拟机状态改成ACTIVE
  • 至此,一台虚拟机发布完

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Moon-01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值