本节开始,我们将详细讲解 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. java 日志文件打印

    java中的日志打印   java中的日志打印: 日志工具类:   log4j.properties解释: 1 1.输出级别的种类 2 ERROR.WARN.INFO.DEBUG 3 ERROR 为严 ...

  2. DB2 SQL 错误(SQLCODE:-964,SQLSTATE:57011)处理方法

    故障现象描述: 执行 SQL 语句时,出现类似如下错误消息. 指令 SQL:insert into t_stat_file_temp SQLSTATE:57011,供应商错误代码:-964 DB2 S ...

  3. LC 802. Find Eventual Safe States

    In a directed graph, we start at some node and every turn, walk along a directed edge of the graph.  ...

  4. Hibernate3运行原理

    Hibernate的运行过程如下: 1.应用程序先调用Configuration类,该类读取Hibernate配置文件及映射文件中的信息,2.并用这些信息生成一个SessionFactory对象,3. ...

  5. 保存图片控件上的图片到本地 出现错误:无法将类型为“System.Windows.Media.Imaging.BitmapFrameDecode”的对象强制转换为类型“System.Windows.Media.Imaging.BitmapImage”。

    保存图片控件上的图片到本地 出现错误:无法将类型为“System.Windows.Media.Imaging.BitmapFrameDecode”的对象强制转换为类型“System.Windows.M ...

  6. nodeslector使用

    问题: node节点挂了一个, 无法切换到另一个node上 解决: .指定了 nodeslector .设置了下面: hostNetwork: true dnsPolicy: ClusterFirst ...

  7. svn本地文件颜色详解

    1.红色感叹号表示这个文件从服务器上下载下来以后,在本地被修改过.这时执行提交操作就可以了.2.黄色感叹号表示这个文件在提交的时候发现存在冲突,也就是说有别人在你提交之前对这个文件的同一个版本进行了修 ...

  8. 不可不知的JavaScript 之 JSON对象和JavaScript对象直接量

    JSON对象和JS对象直接量 在工作当中,我们总是可以听到人说将数据转换为JSON对象,或者说把JSON对象转换为字符串之类的话,下面是关于JSON的具体说明. JSON对象并不是JavaScript ...

  9. Python3 Selenium自动化web测试 ==> 第六节 WebDriver高级应用 -- 操作web页面的滚动条

    学习目的: 掌握页面元素定位以外的其他重要知识点. 正式步骤: 测试Python3代码 # -*- coding:utf-8 -*- from selenium import webdriver fr ...

  10. 11个顶级 JavaScript 日历插件

    参考链接:https://mp.weixin.qq.com/s?__biz=MzI3NzIzMDY0NA==&mid=2247487050&idx=1&sn=e1cf66726 ...