OpenStack Nova 架构
Nova 是 OpenStack 最核心的服务之一,负责虚拟机(VM)实例的全生命周期管理,包括创建、调度、运行、终止等操作。它是 OpenStack 实现计算即服务(IaaS)的核心组件,支持多种虚拟化技术和硬件平台。1 架构图
+----------------+ +----------------+ +----------------+
| 客户端 | |Horizon Dashboard ||其他服务 |
+-------+--------+ +-------+--------+ +-------+--------+
| | |
+--------------------+--------------------+
|
v
+---------------------------------------------------------+
| Nova API |
+---------------------------------------------------------+
| | | |
v v v v
+----------------+----------------+----------------+----------------+
|Nova Scheduler |Nova Conductor| Consoleauth |Proxy |
|(调度器) |(导体服务) | (控制台认证) | (控制台代理) |
+----------------+----------------+----------------+----------------+
| |
| v
| +----------------+
| | 数据库 |
| +----------------+
|
v
+----------------+ +----------------+ +----------------+
| Nova Compute | | Nova Compute | | Nova Compute |
| (计算节点1) | | (计算节点2) | | (计算节点n)|
+----------------+ +----------------+ +----------------+
| | |
v v v
+----------------+ +----------------+ +----------------+
| Hypervisor | | Hypervisor | | Hypervisor |
| (KVM/Xen等) | | (KVM/Xen等) | | (KVM/Xen等) |
+----------------+ +----------------+ +----------------+2 组件
2.1 nova-api
[*]职责:API 端点和请求入口。
[*]功能:
[*]接收和处理所有外部的 RESTful API 请求(例如来自 Horizondashboard、CLI 工具、或其他服务的请求)。
[*]对用户请求进行初步验证和解析。
[*]将合法的请求转换为内部操作,并通过消息队列发送给其他相应的 Nova 服务。
[*]它是最繁忙的服务之一,通常需要部署多个实例以实现负载均衡。
2.2 nova-scheduler
[*]职责:调度器,决定虚拟机在哪个计算节点上启动。
[*]功能:
[*]从消息队列中接收创建虚拟机的请求。
[*]根据请求中的资源需求(如 CPU、内存、磁盘)和系统当前的资源状态,通过一系列过滤器(Filters) 和权重(Weighers) 算法,从所有可用的计算节点中筛选出最合适的一个。
[*]常见的过滤器:RamFilter(内存过滤),CoreFilter(CPU核心过滤),AvailabilityZoneFilter(可用域过滤)。
[*]常见的权重器:优先选择剩余资源最多的节点(RAMWeigher),或优先选择当前负载最低的节点。
2.3 nova-compute
[*]职责:计算节点上的核心工作进程,一个计算节点上运行一个 nova-compute 实例。
[*]功能:
[*]是真正与底层 Hypervisor(如 libvirt/KVM)交互、管理虚拟机生命周期的组件。
[*]接收来自消息队列的操作指令(如运行、终止、重启虚拟机)。
[*]通过 Hypervisor 的 API(如 libvirt)执行具体操作。
[*]定期向系统报告当前节点的资源使用情况和健康状态(Heartbeat)。
2.4 nova-conductor
[*]职责:数据库代理和协调者。
[*]功能:
[*]作为 nova-compute 服务和数据库之间的一个中间层,增强了安全性和可扩展性。
[*]nova-compute 不再直接访问数据库,所有数据库操作都通过 nova-conductor 代理完成。这避免了计算节点被攻破后直接访问数据库的风险。
[*]处理一些需要协调的复杂操作,例如实时迁移。
2.5 nova-consoleauth
[*]职责:控制台令牌认证。
[*]功能:对用户通过 Horizon 或 nova-novncproxy 访问虚拟机控制台的请求进行身份验证和授权。
2.6 nova-novncproxy 和 nova-spicehtml5proxy
[*]职责:控制台代理。
[*]功能:提供基于 Web 的 VNC 或 SPICE 客户端,使用户可以通过浏览器访问虚拟机的图形化控制台。它作为用户和虚拟机 VNC/SPICE 服务之间的代理。
2.7 数据库(SQL Database)
[*]职责:中央信息存储。
[*]功能:存储 Nova 的几乎所有状态信息,包括实例的状态、可用资源、网络信息、项目(Project)配额等。常用的数据库是 MySQL/MariaDB 或 PostgreSQL。
2.8 消息队列(Message Queue, MQ)
[*]职责:服务间通信的中央枢纽。
[*]功能:所有 Nova 服务都通过它进行异步的、解耦的通信。最常用的是 RabbitMQ。
3、Nova 组件间通信机制
Nova 各组件间主要通过两种方式协作:
3.1 基于消息队列 (MQ) 的 RPC 调用
nova-api -> nova-scheduler,nova-scheduler -> nova-compute)。这是一种异步通信模式,能有效解耦组件,提升系统整体的吞吐能力和可扩展性。主要分为:
[*]rpc.call:请求/响应模式,调用者会等待响应(同步)。
[*]rpc.cast:单向通知模式,调用者不等待响应(异步)。
3.2 RESTful API 调用
主要用于 Nova 与其他 OpenStack 服务(如 Keystone、Glance、Neutron、Cinder)的交互。
4、部署架构
在实际部署中,Nova 组件通常分布在两种类型的节点上:
节点类型通常运行的 Nova 组件备注控制节点nova-api, nova-scheduler, nova-conductor, Placement API, Message Queue, Database负责管理、调度和数据库操作。计算节点nova-compute负责运行虚拟机实例。每个计算节点上都会运行一个 nova-compute 服务,管理本节点的 Hypervisor。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! 感谢分享,学习下。
页:
[1]