本节开始,我们将详细讲解 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 的数量来应对日益增长的计算节点对数据库的访问。
 

最新文章

  1. Mysql FROM_UNIXTIME效率 VS PHP date()效率 数据说话!
  2. GPON和820.1p学习及资料(zt)
  3. UiAutomator自动化测试框架介绍
  4. 阅读《LEARNING HARD C#学习笔记》知识点总结与摘要系列文章索引
  5. lampp 在linux ubuntu下自动开机启动
  6. Centos7网络监控
  7. 《剑指Offer》之二维数组中的查找
  8. android虚拟机(ROOT)权限
  9. (转)Unity3D游戏开发 NGUI之渐变加载到100%的Loading场景进度条
  10. 学了C语言,如何利用CURL写一个下载程序?—用nmake编译CURL并安装
  11. MATLAB将批量的图片保存为mat文件
  12. 抄360于Launcher浮动窗口的屏幕显示内存使用情况(改进版)
  13. node-glob的*匹配
  14. DirectX:在graph自动连线中加入自定义filter(graph中遍历filter)
  15. 安卓开发:UI组件-图片控件ImageView(使用Glide)和ScrollView
  16. 【转】Python 之 元类
  17. bzoj2908
  18. HDU-2177 取(2堆)石子游戏 (威佐夫博奕)
  19. 微信小程序中的单位
  20. jenkins 项目发布脚本

热门文章

  1. UTC ISO 8601
  2. LC 718. Maximum Length of Repeated Subarray
  3. javascript 数据分组
  4. 【Taro全实践】修改radio组件的大小
  5. 一个Action中,可以写多个类似的业务控制方法
  6. spring cloud之Eureka
  7. Java注解(Annotation)详解
  8. golang实现生产者消费者模型
  9. Visual Studio工具
  10. clrscr()及gotoxy()函数