本节开始,我们将详细讲解 Nova 的各个子服务。
 
前面架构概览一节知道 Nova 有若干 nova-* 的子服务,下面我们将依次学习最重要的几个,今天先讨论 nova-api 和 nova-conductor
 
nova-api
 
nova-api 是整个Nova 组件的门户,所有对Nova 的请求都首先由 nova-api 处理。nova-api 向外界暴露若干 HTTP REST API 接口在 keystone 中我们可以查询  nova-api 的Endpoints 。
 
stack@DevStack-Controller:~$ openstack endpoint list
+----------------------------------+-----------+--------------+----------------+---------+-----------+--------------------------------------------+
| ID                               | Region    | Service Name | Service Type   | Enabled | Interface | URL                                        |
+----------------------------------+-----------+--------------+----------------+---------+-----------+--------------------------------------------+
| 049dd4418f404aa2aeec29e40304efbe | RegionOne | placement    | placement      | True    | admin     | http://10.12.31.241/placement              |
| 056967662ca84ce4b7dab7e359589fdc | RegionOne | nova_legacy  | compute_legacy | True    | internal  | http://10.12.31.241:8774/v2/$(project_id)s |
| 0b9fcb6aebc646329c2bded5cb36c7dc | RegionOne | cinderv3     | volumev3       | True    | admin     | http://10.12.31.241:8776/v3/$(project_id)s |
| 2da3118ef0d34484a7713fd9ef56d5dd | RegionOne | keystone     | identity       | True    | public    | http://10.12.31.241/identity               |
| 2ff4467621f940d1976b4e16e17b4b04 | RegionOne | cinder       | volume         | True    | public    | http://10.12.31.241:8776/v1/$(project_id)s |
| 341516faf7e54e249cae4ec9c1d1c88d | RegionOne | neutron      | network        | True    | internal  | http://10.12.31.241:9696/                  |
| 391357dbc3524dad95449782a77b5337 | RegionOne | nova_legacy  | compute_legacy | True    | admin     | http://10.12.31.241:8774/v2/$(project_id)s |
| 54843389b1c649c88ca49fdee7719682 | RegionOne | keystone     | identity       | True    | admin     | http://10.12.31.241/identity_admin         |
| 58c5fe6431164f4d98c9250be679a657 | RegionOne | glance       | image          | True    | admin     | http://10.12.31.241:9292                   |
| 684ec2e22ad04efe9e1e8b540bae8f50 | RegionOne | placement    | placement      | True    | public    | http://10.12.31.241/placement              |
| 75f31134111c4b92b0fcc910f68a6edc | RegionOne | glance       | image          | True    | public    | http://10.12.31.241:9292                   |
| 7a2f035863b64b39ac2901cb88514bbb | RegionOne | cinderv2     | volumev2       | True    | internal  | http://10.12.31.241:8776/v2/$(project_id)s |
| 8525b0bef2b54eb38d5a0037c12f17c8 | RegionOne | cinderv3     | volumev3       | True    | internal  | http://10.12.31.241:8776/v3/$(project_id)s |
| 8724dd7cd92840d2963ae134c2eecf74 | RegionOne | keystone     | identity       | True    | internal  | http://10.12.31.241/identity               |
| 8ffdbac8f8b04932b40e747b70088a69 | RegionOne | nova_legacy  | compute_legacy | True    | public    | http://10.12.31.241:8774/v2/$(project_id)s |
| a85081f7ce584514b32fa316dfcfd2aa | RegionOne | cinderv2     | volumev2       | True    | public    | http://10.12.31.241:8776/v2/$(project_id)s |
| c96779b3470e40fb863b9700991b2aca | RegionOne | nova         | compute        | True    | public    | http://10.12.31.241:8774/v2.1              |
| ce9d8d864d6e42d3bf546701d0f58b45 | RegionOne | cinder       | volume         | True    | internal  | http://10.12.31.241:8776/v1/$(project_id)s |
| d06366d0bd2e47079a0cbf6bd5442190 | RegionOne | neutron      | network        | True    | admin     | http://10.12.31.241:9696/                  |
| d3c30e081aa04b1885f474691b63b4fd | RegionOne | cinderv2     | volumev2       | True    | admin     | http://10.12.31.241:8776/v2/$(project_id)s |
| d7e5984fb8ec4d719db22f17e2b586c2 | RegionOne | glance       | image          | True    | internal  | http://10.12.31.241:9292                   |
| dabe6791b50d492f8c916fe6fd513723 | RegionOne | neutron      | network        | True    | public    | http://10.12.31.241:9696/                  |
| de07de6e84d3425fb4d23dce70827c49 | RegionOne | cinderv3     | volumev3       | True    | public    | http://10.12.31.241:8776/v3/$(project_id)s |
| e2d270b641374843af533f33626f783f | RegionOne | placement    | placement      | True    | internal  | http://10.12.31.241/placement              |
| ed2772c4265048f1bf03ff55637eeb15 | RegionOne | cinder       | volume         | True    | admin     | http://10.12.31.241:8776/v1/$(project_id)s |
| fa7b4db6d8dd43df8c0639bedade9e45 | RegionOne | nova         | compute        | True    | admin     | http://10.12.31.241:8774/v2.1              |
| fc88f5f0bc184a57abff510c0c941db0 | RegionOne | nova         | compute        | True    | internal  | http://10.12.31.241:8774/v2.1              |
+----------------------------------+-----------+--------------+----------------+---------+-----------+--------------------------------------------+
 
客户端可以将请求发送到Endpoints 指定的地址,向 nova-api 请求操作。当然,作为最终用户我们不会直接发送 REST API 请求。OpenStack CLI ,Dashboard 和其他需要跟 Nova 交换的组件会使用这些API。
 
Nova-api 对接收到 HTTP API 请求会做如下处理:
 
    1、检查客户端传入的参数是否合法有效
    2、调用Nova 其他子服务处理客户端的HTTP请求
    3、格式化Nova其他子服务返回的结果并返回给客户端
 
nova-api 接收哪些请求?
 
简单的说,只要是跟虚拟机生命周期相关的操作,nova-api 都可以响应。大部分操作都可以在Dashboard上找到。
 
比如在 Project -> Compute -> Instance 中,我们可以对 instance 进行如下操作,这些操作就是 nova-api 可以执行的操作
 
 
OpenStack 用术语 Instance 来表示虚拟机,后面我们将统一用这一术语
 
nova-conductor
 
nova-compute 需要获取和更新数据库中instance 的信息。但nova-compute 并不会直接访问数据库,而是通过 nova-conductor实现数据的访问
 
 
这样做有两个显著的好处:
 
    1、更高的系统安全性
    2、更好的系统伸缩性
 
更高的安全性,在OpenStack 的早期版本中,nova-compute 可以直接访问数据库,但这样存在非常大的安全隐患。因为 nova-compute 这个服务是部署在计算节点上的,为了能够访问控制节点上的数据库,就必须在计算节点的 /etc/nova/nova.conf 中配置访问数据库的连接信息(地址、协议、用户名、密码等)
 
试想一下任意一个计算节点被黑客入侵,都会导致部署在控制节点的数据库面临极大风险。为了解决这个问题,从G 版本开始, Nova引入了 一个新服务 nova-conductor ,将 nova-compute 访问数据库的全部操作房啊到 nova-conductor 中,而且 nova-conductor 是部署在控制节点上的。这样就避免了nova-compute 直接访问数据库,增加了系统的安全性。
 
更好的伸缩性  nova-conductor 将 nova-com 与数据库解耦之后还带来另一个好处:提高了 nova 的伸缩性。nova-compute 与 nova-conductor 是通过消息中间件交互的。
 
这种松散的架构允许配置多个 nova-conductor 实例。在一个大规模的 OpenStack 部署环境里,管理员可以通过增加 nova-conductor 的数量来应对日益增长的计算节点对数据库的访问。
 

O026、Nova组件详解的更多相关文章

  1. Nova 组件详解 - 每天5分钟玩转 OpenStack(26)

    本节开始,我们将详细讲解 Nova 的各个子服务. 前面架构概览一节知道 Nova 有若干 nova-* 的子服务,下面我们将依次学习最重要的几个.今天先讨论 nova-api 和 nova-cond ...

  2. Nova 组件详解

    本节开始,我们将详细讲解 Nova 的各个子服务. 前面架构概览一节知道 Nova 有若干 nova-* 的子服务,下面我们将依次学习最重要的几个.今天先讨论 nova-api 和 nova-cond ...

  3. OpenStack 的Nova组件详解

    Open Stack Compute Infrastructure (Nova) Nova是OpenStack云中的计算组织控制器.支持OpenStack云中实例(instances)生命周期的所有活 ...

  4. OpenStack各组件详解和通信流程

    一.openstack由来 openstack最早由美国国家航空航天局NASA研发的Nova和Rackspace研发的swift组成.后来以apache许可证授权,旨在为公共及私有云平台建设.open ...

  5. OpenStack的Swift组件详解

    一:简介     一.背景 1. Swift 最初是由 Rackspace 公司开发的高可用分布式对象存储服务(Object  Storage Service),并于 2010 年贡献给 OpenSt ...

  6. OpenStack的Trove组件详解

    一:简介     一.背景 1. 对于公有云计算平台来说,只有计算.网络与存储这三大服务往往是不太够的,在目前互联网应用百花齐放的背景下,几乎所有应用都使用到数据库,而数据库承载的往往是应用最核心的数 ...

  7. Android中Intent组件详解

    Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件.Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的(Goal)或期望(Expectation),叙 ...

  8. Android笔记——四大组件详解与总结

     android四大组件分别为activity.service.content provider.broadcast receiver. ------------------------------- ...

  9. vue.js基础知识篇(6):组件详解

    第11章:组件详解 组件是Vue.js最推崇也最强大的功能之一,核心目标是可重用性. 我们把组件代码按照template.style.script的拆分方式,放置到对应的.vue文件中. 1.注册 V ...

随机推荐

  1. Flume-事务与传输流程

    一.Flume 事务 流程图 Put 事务流程 doPut:将批数据先写入临时缓冲区 putList doCommit:检查 channel 内存队列是否足够合并 doRollback:channel ...

  2. 【log4j】log4j.properties 文件示例

    # 下面的文件内容是写程序长期要用的,放在这里留个底#Output information(higher than INFO) to stdout and file.info/debug/error ...

  3. 【Webscraper】不懂编程也能爬虫

    一.配置环境 在浏览器中安装web scraper插件. 所有安装包下载链接: https://pan.baidu.com/s/1CfAWf0wMO6WqicoUgdYgkg 提取码: nn2e 安装 ...

  4. <JavaScript>如何阅读《JavaScript高级程序设计》(一)

    题外话 最近在看<JavaScript高级程序设计>这本书,面对着700多页的厚书籍,心里有点压力,所以我决定梳理一下..探究一下到底怎么读这本书.本书的内容好像只有到ES5...所以只能 ...

  5. Android MineType

    概述 多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符.二进制格式附件等 ...

  6. 一百零一:CMS系统之自定义restful风格json返回格式和内容

    鉴于flask-restful用起来太麻烦,这里自定义json统一返回格式和内容 from flask import jsonify class HttpCode: """ ...

  7. 错误 MSB6006 CL.exe 已退出,代码为2

    环境 WIN10 + VS2019 社区版 按照其他网友的方法说 解决方法: 1 一个类内部的定义返回类型为double的方法种没有写return语句. 2 变量没有初始化也会导致这种情况. 但是设置 ...

  8. java中图片地址base64编码的相互转换

    public class Base64Url { /** * 将base64编码字符串转换为图片 * @param imgStr: base64编码字符串 * @param path: 图片路径-具体 ...

  9. Centos 7.2 安装与配置JDK8

    系统环境:centos7安装方式:rpm安装软件:jdk-8u25-linux-x64.rpm下载地址:http://www.oracle.com/technetwork/java/javase/do ...

  10. 【CSS】聊一聊css的选择器

    对于css来说,他的基本语法就是 选择器 {           K:V;           K:V;           K:V       } 所以css的学习就分为两个部分: * 1  选择器 ...