nova是openstack 最核心的服务,负责维护和管理云环境的计算资源。 管理 VM 的生命周期
2、nova架构
nova 的架构比较复杂,包含很多组件。
这些组件以子服务(后台 deamon 进程)的形式运行,可以分为以下几类:
1)nova-api
接收和响应客户的 API 调用。
2)nova-scheduler
管理虚机的核心服务,通过调用 Hypervisor API 实现虚机生命周期管理
3)Hypervisor
计算节点上跑的虚拟化管理程序,虚机管理最底层的程序。
不同虚拟化技术提供自己的 Hypervisor。
常用的 Hypervisor 有 KVM,Xen, VMWare 等
4)nova-conductor
nova-compute 经常需要更新数据库,比如更新虚机的状态。
出于安全性和伸缩性的考虑,nova-compute 并不会直接访问数据库,而是将这个任务委托给 nova-conductor。
5)mysql
Nova 会有一些数据需要存放到数据库中,一般使用 MySQL。数据库安装在控制节点上。
6)消息队列
Nova 包含众多的子服务,这些子服务之间需要相互协调和通信。
为解耦各个子服务,Nova 通过 Message Queue 作为子服务的信息中转站。
3、nova物理部署方案
对于 Nova,这些服务会部署在两类节点上:计算节点和控制节点。
计算节点上安装了 Hypervisor,上面运行虚拟机。
由此可知:
1)只有 nova-compute 需要放在计算节点上。
2)其他子服务则是放在控制节点上的。
4、从虚机创建流程看 nova-* 子服务如何协同工作
1)客户(可以是 OpenStack 最终用户,也可以是其他程序)向 API(nova-api)发送请求:“帮我创建一个虚机”
2)API 对请求做一些必要处理后,向 Messaging(RabbitMQ)发送了一条消息:“让 Scheduler 创建一个虚机”
3)Scheduler(nova-scheduler)从 Messaging 获取到 API 发给它的消息,然后执行调度算法,从若干计算节点中选出节点 A
4)Scheduler 向 Messaging 发送了一条消息:“在计算节点 A 上创建这个虚机”
5)计算节点 A 的 Compute(nova-compute)从 Messaging 中获取到 Scheduler 发给它的消息,然后在本节点的 Hypervisor 上启动虚机。
6)在虚机创建的过程中,Compute 如果需要查询或更新数据库信息,会通过 Messaging 向 Conductor(nova-conductor)发送消息,Conductor 负责数据库访问。
5、子服务详解
1)nova-api
nova-api会对接收到的 HTTP API 请求(跟虚拟机生命周期相关的操作)会做如下处理:
1. 检查客户端传人的参数是否合法有效
2. 调用 Nova 其他子服务的处理客户端 HTTP 请求
3. 格式化 Nova 其他子服务返回的结果并返回给客户端
2)nova-conductor
nova-compute 需要获取和更新数据库中 instance 的信息。
nova-compute 并不会直接访问数据库,而是通过 nova-conductor 实现数据的访问。
这样做有两个显著好处:
更高的系统安全性
更好的系统伸缩性
3)nova-scheduler
nova-scheduler的作用是选择在哪个计算节点上启动instance;
Filter scheduler 是 nova-scheduler 默认的调度器,调度过程分为两步:
通过过滤器(filter)选择满足条件的计算节点(运行 nova-compute)
通过权重计算(weighting)选择在最优(权重值最大)的计算节点上创建 Instance。
RetryFilter:刷掉之前已经调度过的节点
AvailabilityZoneFilter:为提高容灾性和提供隔离服务,可以将计算节点划分到不同的Availability Zone中
RamFilter: 将不能满足 flavor 内存需求的计算节点过滤掉
DiskFilter: 将不能满足 flavor 磁盘需求的计算节点过滤掉
CoreFilter: 将不能满足 flavor vCPU 需求的计算节点过滤掉
ComputeFilter: 保证只有 nova-compute 服务正常工作的计算节点才能够被 nova-scheduler调度。
……
Weight
经过前面一堆 filter 的过滤,nova-scheduler 选出了能够部署 instance 的计算节点。
如果有多个计算节点通过了过滤,那么最终选择哪个节点呢?
Scheduler 会对每个计算权重值, 目前 nova-scheduler 的默认实现是根据计算节点空闲的内存量计算权重值
空闲内存越多,权重越大,instance 将被部署到当前空闲内存最多的计算节点上。
4)nova-compute
nova-compute 在计算节点上运行,负责管理节点上的 instance。
OpenStack 对 instance 的操作,最后都是交给 nova-compute 来完成的。
nova-compute 与 Hypervisor 一起实现 OpenStack 对 instance 生命周期的管理。
nova-compute 的功能可以分为两类:
定时向 OpenStack 报告计算节点的状态;
实现 instance 生命周期的管理(launch、shutdown、reboot、suspend、resume、terminate、resize、migration、snapshot等);
nova-compute 创建 instance 的过程可以分为 4 步:
(1)为 instance 准备资源
分配内存、磁盘空间和 vCPU 网络资源
(2)创建 instance 的镜像文件
首先将该 image 下载到计算节点(没有命中缓存的时候)
然后将其作为 backing file(可能需要格式转化) 创建 instance 的镜像文件。
(3)创建 instance 的 XML 定义文件
(4)创建虚拟网络并启动虚拟机
原文地址:http://blog.51cto.com/10630401/2121675