O02四、Nova组件如何协同工做

 
Nova 物理部署方案
 
前面你们已经看到 Nova 由不少子服务组成,咱们也知道OpenStack 是一个分布式系统,能够部署到若干节点上,那么接下来你们可能就会问:Nova的这些服务在物理上应该如何部署呢?
 
对于Nova,这些服务会部署在两类节点上:计算节点和控制节点
 
计算节点上安装了Hypervisor,上面运行虚拟机,由此可知:
 
    一、只有nova-compute须要放在计算节点上
    二、其余子服务则是放在控制节点上的
 
下面咱们能够看看实验环境的具体部署状况。经过在计算节点和控制节点上运行  ps -efl | grep nova 来查看运行的nova 子服务
 
root@DevStack-Controller:~# ps -e | grep nova    #    控制节点
1818 pts/14   00:20:24 nova-conductor
2717 pts/14   00:09:12 nova-conductor
2718 pts/14   00:09:20 nova-conductor
2801 pts/15   00:03:29 nova-scheduler
3294 pts/16   00:00:57 nova-novncproxy
3955 pts/17   00:03:29 nova-consoleaut
4613 pts/18   00:10:13 nova-compute
28102 pts/8    00:20:41 nova-api
28282 pts/8    00:01:24 nova-api
28283 pts/8    00:01:03 nova-api
28285 pts/8    00:00:09 nova-api
28286 pts/8    00:00:09 nova-api
 
root@DevStack-Compute:~# ps -e | grep nova    #    计算节点
5368 pts/4    00:07:05 nova-compute
 
RabbitMQ 和 MySQL 也是放在控制节点上的。可能信息的同窗已经发现咱们的控制节点上运行了 nova-compute 。这实际上也就意味着DevStack-Controller既是一个计算节点,也是一个控制节点,也能够在上面运行虚机。
 
这也向咱们展现了 OpenStack这种分布式架构部署上的灵活性:能够将全部服务都放在一台物理机上,做为一个 All-in-One的测试环境。也能够将服务部署在多台物理机上,得到更好的性能和高可用。
 
另外,也能够用命令查看 nova-* 子服务都分布在哪些节点上
 
stack@DevStack-Controller:~$ nova service-list
+----+------------------+---------------------+----------+---------+-------+----------------------------+-----------------+
| Id | Binary           | Host                | Zone     | Status  | State | Updated_at                 | Disabled Reason |
+----+------------------+---------------------+----------+---------+-------+----------------------------+-----------------+
| 3  | nova-conductor   | DevStack-Controller | internal | enabled | up    | 2019-05-23T02:01:25.000000 | -               |
| 4  | nova-scheduler   | DevStack-Controller | internal | enabled | up    | 2019-05-23T02:01:35.000000 | -               |
| 5  | nova-consoleauth | DevStack-Controller | internal | enabled | up    | 2019-05-23T02:01:26.000000 | -               |
| 6  | nova-compute     | DevStack-Controller | nova     | enabled | up    | 2019-05-23T02:01:29.000000 | -               |
| 7  | nova-compute     | DevStack-Compute    | nova     | enabled | up    | 2019-05-23T02:01:30.000000 | -               |
+----+------------------+---------------------+----------+---------+-------+----------------------------+-----------------+
 
从虚机建立流程看 nova-* 子服务如何协同工做
 
从学习 Nova 的角度看,虚机建立是一个很是好的场景,涉及的 nova-* 子服务很全,下面是流程图
 
 
    一、客户(也能够是OpenStack最终用户,也就是其余程序)向API(nova-api)发送请求“帮我建立一台虚机”
    二、API对请求作一些必要的处理后,想 Messaging(RabbitMQ)发送一条消息“让Scheduler建立一台虚机”
    三、Scheduler(nova-scheduler)从Messaging 获取到 API发给他的消息,而后执行调度算法,从若干计算节点中选出节点A
    四、Scheduler 向 Messaging 发送了一条消息:“在计算节点A上建立这个虚拟”
    五、计算节点A的Compute(nova-compute)从Messaging 中获取到 Scheduler 发给他的消息,而后在本节点的Hypervisor上启动虚机
    六、在虚机建立的过程当中,Compute 若是须要查询或更新数据库信息,会经过Messaging向 Conductor (nova-conductor)发送消息,Conductor 负责数据库访问
 
以上是建立虚机最核心的步骤,固然省略了不少细节,咱们会在后面的章节详细讨论。这个几个步骤向咱们展现了 nova-*  子服务之间的协做方式,也体现了OpenStack整个系统的分布式设计思想,掌握这种思想对咱们深刻理解OpenStack会很是有帮助。
相关文章
相关标签/搜索