当前位置: 首页 > 工具软件 > Nova > 使用案例 >

Nova: 1 Nova基础及其架构

尚俊楠
2023-12-01

目标:
弄清楚nova架构及其主要场景的实现原理

1 引言
nova的作用是管理虚机,提供计算资源抽象。

2 nova架构

        api-------------------------------
        |                |
        |                |
        V                |
        conductor------>scheduler    |
        |                |
        |                |
        V                |
        compute<--------------------------


3 子服务作用及其交互
3.1 api服务
作用: 将长时任务()发送到conductor服务,将短时任务发送给compute服务。

3.2 conductor服务
作用: 对任务进行跟踪和调度。
典型场景: 新建虚机或迁移时,会向scheduler请求符合要求的计算节点,然后将请求发送到最终的计算节点。

3.3 scheduler服务
1)作用: 筛选出最符合要求的计算节点返回给conductor服务。
2)调度器
FilterScheduler:默认的过滤调度器,根据过滤条件以及权重挑选最佳节点。
CachingScheduler: 将主机资源信息还存在本地,通过定时任务从数据库获取最新信息。
......
3)调度器缓存更新
nova-compute服务对主机数据更新到数据库,nova-scheduler从数据库获取主机数据。
选择最佳主机需要在内存中保存先前决策情况,在调度器内存维护缓存实现。
HostState会从数据库和缓存更新主机数据,服务状态等信息。
4)过滤
用指定的Filters过滤不符合条件的主机。
Filter类型:
主机可用资源: 内存/磁盘/CPU等
主机状态: CPU使用率/虚拟机启动数量等
......
RamFilter:根据内存可用情况,选择内存足够多的主机
ComputeFilter:选择所有处于Active状态的主机
......
5)权重
对符合条件的主机计算权重得到最佳的。

3.4 compute服务
1)作用: 负责与Hypervisor通信,实现虚拟机管理。
典型场景: 删除虚机时,api通过消息告诉compute删除指定虚机。
2)Resource Tracker
compute服务需要在数据库更新主机资源使用情况(内存/CPU/磁盘),以便
scheduler服务作为选择主机依据。
使用ComputeNode保存计算节点配置和资源使用情况。
启动compute服务时会为主机创建Resource Tracker对象来监视本主机资源变化,
并更新ComputeNode对应的表compute_nodes。
3)更新ComputeNode途径
Resource Tracker的Claim机制: 创建前测试主机可用资源是否满足需要,满足更新数据库将主机可用资源中减去申请资源;失败则还原
周期性任务: 更新主机资源数据。保证数据库信息准确。

4 nova服务通信机制
nova-conductor, nova-scheduler, nova-compute通信基于消息队列的RPC远程过程调用。
上述服务启动会注册RPC server。

5 nova创建虚机流程
s1: api服务监听到创建虚机请求并转换为消息,校验合法则分配虚机id,在数据库中记录状态,调用conductor服务
s2: conductor服务接受该消息,汇总虚机参数,让scheduler选择最合适的主机
s3: conductor知道目标主机后,要求compute创建虚机。
s4: compute检查主机是否有足够资源,足够则启动虚机并更新数据库虚机状态,将主机资源使用情况
更新到数据库;不符,则发送请求给conductor服务来重试整个调度过程。

6 冷迁移与Resize
6.1)概念
迁移: 将虚机从一个计算节点迁移到另一个节点。
冷迁移: 迁移过程中虚机可能时管及或不可用
热迁移: 保证虚机运行
Resize: 调整虚机计算能力
Resize与冷迁移流程想通,Resize保证新的Flavor大于原来的Flavor,冷迁移则两者想通。

6.2)Resize流程
s1: api将虚机状态修改为RESIZE_PREP,并通过rpc调用conductor
s2: conductor生成request_spec对象,调用scheduler选择合适目标主机
s3: conductor调用目标主机compute,目标主机通过Resource Tracker的Claim
检测主机是否满足条件。
s4: 通过RPC回到源主机,由源主机的compute服务完成迁移。
源主机的compute获取虚机磁盘/网络,使用cp/scp复制待迁移资源到目标主机,修改虚机
状态为RESIZE_MIGRATED,通过RPC到目标主机上完成虚机RESIZE。

7 热迁移
1) 概念
含义: 虚机在工作情况下从一个计算节点迁移到另外节点。
本质: 业务不中断条件下将虚机内存复制到目标主机。迁移最后时刻,虚机短暂挂起,完成最后一次内存复制。
挂起虚机本质: 改变vcpu调度,不可虚机可用物理cpu时间片。

2)热迁移流程
s1: api通过rpc调用conductor发送热迁移消息
s2: conductor向scheduler服务发送rpc请求获知目标主机,并进行
虚机是否活跃,host是否ip等检查
s3: conductor向目标主机发送请求检查是否可以热迁移到目标主机
s4: 目标主机向宿主机发送请求是否可以热迁移宿主机
s5: 宿主机进行热迁移

8 挂起和恢复
Suspend: 会通知虚机,虚机内部进行挂起(例如挂起网卡/磁盘等), Resume:虚机主动恢复 
Pause: 虚机被动,Hypervisor直接从CPU调度挂起虚机,虚机感知不到。Unpause:恢复暂停。


9 重建和驱逐
rebuild:重建,系统重装但是配置不变
evacuate: openstack高可用,节点宕机会将这个节点上运行的虚机转移到另一个节点。

参考:
OpenStack设计与实现(第二版)

 类似资料: