本节开始,我们将详细讲解 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. CentOS7 上搭建 CDH(6.3.0)

    这里以四台节点搭建 IP HostName OS 192.168.8.5 h5(主) CentOS 7.5 192.168.8.6 h6(从) CentOS 7.5 192.168.8.7 h7(从) ...

  2. spring cloud之Eureka

    Region 表示aws的地理位置,一个region有多个awailability zone,各region间完全隔离.这种方式实现最大的容错和稳定性. spring cloud 默认使用的regio ...

  3. IDEA结合GIT的使用

    一.本地安装GIT 下载: https://git-scm.com/downloads 安装 略 配置环境变量 在 “我的电脑 --> 属性 --> 高级系统设置 -- > 环境变量 ...

  4. SVN 服务器 配置

    1.目录结构 2.用户分配 3.目录权限 4.linux下的SVN服务器 5.配置svnserver.conf 注意左边不要有空格 注意文件的权限 chmod -R 777 /opt/svn/blue ...

  5. 【C/C++开发】【Java开发】JNI的替代者—使用JNA访问Java外部功能接口

    JNI的替代者-使用JNA访问Java外部功能接口 1. JNA简单介绍 先说JNI(Java Native Interface)吧,有过不同语言间通信经历的一般都知道,它允许Java代码和其他语言( ...

  6. day34 并行并发、进程开启、僵尸及孤儿进程

    day34 并行并发.进程开启.僵尸及孤儿进程 1.并行与并发 什么是并行? 并行指的是多个进程同时被执行,是真正意义上的同时 什么是并发? 并发指的是多个程序看上去被同时执行,这是因为cpu在多个程 ...

  7. Stream系列(十三) GroupingBy方法使用

    分组 视频讲解 https://www.bilibili.com/video/av78225682/ EmployeeTestCase.java package com.example.demo; i ...

  8. Appendix 2- Lebesgue integration and Reimann integration

    Lebesgue integration and Reimann integration: Reimann: Split up the axis into equal intervals, then ...

  9. SQL Server解惑——为什么你的查询结果超出了查询时间范围

    原文:SQL Server解惑--为什么你的查询结果超出了查询时间范围 废话少说,直接上SQL代码(有兴趣的测试验证一下),下面这个查询语句为什么将2008-11-27的记录查询出来了呢?这个是同事遇 ...

  10. Redis 是怎么实现 “附近的人” 的?

    针对"附近的人"这一位置服务领域的应用场景,常见的可使用PG.MySQL和MongoDB等多种DB的空间索引进行实现. 而Redis另辟蹊径,结合其有序队列zset以及geohas ...