O02六、Nova组件详解

 
本节开始,咱们将详细讲解 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 请求会作以下处理:
 
    一、检查客户端传入的参数是否合法有效
    二、调用Nova 其余子服务处理客户端的HTTP请求
    三、格式化Nova其余子服务返回的结果并返回给客户端
 
nova-api 接收哪些请求?
 
简单的说,只要是跟虚拟机生命周期相关的操做,nova-api 均可以响应。大部分操做均可以在Dashboard上找到。
 
好比在 Project -> Compute -> Instance 中,咱们能够对 instance 进行以下操做,这些操做就是 nova-api 能够执行的操做
 
 
OpenStack 用术语 Instance 来表示虚拟机,后面咱们将统一用这一术语
 
nova-conductor
 
nova-compute 须要获取和更新数据库中instance 的信息。但nova-compute 并不会直接访问数据库,而是经过 nova-conductor实现数据的访问
 
 
这样作有两个显著的好处:
 
    一、更高的系统安全性
    二、更好的系统伸缩性
 
更高的安全性,在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 的数量来应对日益增加的计算节点对数据库的访问。
相关文章
相关标签/搜索