Nova 组件详解

本节开始,咱们将详细讲解 Nova 的各个子服务。mysql

前面架构概览一节知道 Nova 有若干 nova-* 的子服务,下面咱们将依次学习最重要的几个。
今天先讨论 nova-api 和 nova-conductor。 sql

nova-api

Nova-api 是整个 Nova 组件的门户,全部对 Nova 的请求都首先由 nova-api 处理。 Nova-api 向外界暴露若干 HTTP REST API 接口。 在 keystone 中咱们能够查询 nova-api 的 endponits。 数据库

客户端就能够将请求发送到 endponits 指定的地址,向 nova-api 请求操做。 固然,做为最终用户的咱们不会直接发送 Rest AP I请求。 OpenStack CLI,Dashboard 和其余须要跟 Nova 交换的组件会使用这些 API。 api

Nova-api 对接收到的 HTTP API 请求会作以下处理: 1. 检查客户端传人的参数是否合法有效 2. 调用 Nova 其余子服务的处理客户端 HTTP 请求 3. 格式化 Nova 其余子服务返回的结果并返回给客户端 安全

nova-api 接收哪些请求? 简单的说,只要是跟虚拟机生命周期相关的操做,nova-api 均可以响应。 大部分操做均可以在 Dashboard 上找到。 架构

打开Instance管理界面 学习

点击下拉箭头,列表中就是 nova-api 可执行的操做。 中间件

OpenStack 用术语 “Instance” 来表示虚拟机,后面咱们将统一使用这个术语。接口

nova-conductor

nova-compute 须要获取和更新数据库中 instance 的信息。 但 nova-compute 并不会直接访问数据库,而是经过 nova-conductor 实现数据的访问。 生命周期

image177.png

这样作有两个显著好处:

  1. 更高的系统安全性

  2. 更好的系统伸缩性

更高的安全性

在 OpenStack 的早期版本中,nova-compute 能够直接访问数据库,但这样存在很是大的安全隐患。 由于 nova-compute 这个服务是部署在计算节点上的,为了可以访问控制节点上的数据库,就必须在计算节点的 /etc/nova/nova.conf 中配置访问数据库的链接信息,好比

[database] connection = mysql+pymysql://root:secret@controller/nova?charset=utf8

试想任意一个计算节点被黑客入侵,都会致使部署在控制节点上的数据库面临极大风险。

为了解决这个问题,从 G 版本开始,Nova 引入了一个新服务 nova-conductor,将 nova-compute 访问数据库的所有操做都放到 nova-conductor 中,并且 nova-conductor 是部署在控制节点上的。 这样就避免了 nova-compute 直接访问数据库,增长了系统的安全性。

更好的伸缩性

nova-conductor 将 nova-compute 与数据库解耦以后还带来另外一个好处:提升了 nova 的伸缩性。

nova-compute 与 conductor 是经过消息中间件交互的。 这种松散的架构容许配置多个 nova-conductor 实例。 在一个大规模的 OpenStack 部署环境里,管理员能够经过增长 nova-conductor 的数量来应对日益增加的计算节点对数据库的访问。

下一节咱们讨论计算节点调度服务 nova-scheduler.


相关文章
相关标签/搜索