OpenStack之Nova架构分析

在云平台的建设中,最重要的就是云平台资源的合理利用和部署的自动化,咱们在搭建云平台的时候会虚拟出多个虚拟机来对外对内提供服务,可是若是将全部的服务器进行物理划分构建出来不少虚拟机让其一直开着会照成一些问题,如:sql

       1. 资源的利用,也就是有的虚拟机比没有在使用,但还在运行docker

       2. 部署的麻烦,也就是说咱们按照计划的划分方法,建立出来计划个数的虚拟机,这样在人力上必定不是最明智数据库

       3. 虚拟机的管理不方便,这么多的虚拟机在提供服务,咱们须要一个系统来统一管理这些虚拟机的启动关闭等安全

因此,咱们就须要一个虚拟机的管理系统,open stack,他能够很好的将虚拟机轻量化,就像k8s调度docker image同样,它能够调度虚拟机image的建立,删除,迁移等,也就是说,咱们不用配置每个虚拟机,它能够将虚拟机像image同样进行复制,建立,而且会记录下来当前该虚拟机的状态,再次启动时,还会恢复到原来虚拟机的状态,同时他还会感知集群负载的状况,保证了集群的负载均衡。服务器

对于open stack来讲它有三大组件:Nova、Quantum、Swift,在三大组件中,Nova主要负责Computer模块,也就是调度管理虚拟机的建立、启动、删除等,Quantum负责虚拟网络,而Swift主要负责云存储。因而可知,Nova是占据主要核心位置的。下面咱们就来讨论一下Nova。网络

Nova主要负责了云中虚拟机的管理,举个例子,对于自来水公司而言,主要提供的资源是水,而水的运输是经过水管,所以,水管的铺设及管理系统是是十分重要的,类比一下:物理资源就至关于水,虚拟机至关于管道,Nova就至关于管道的管理系统。下面咱们慢慢介绍一下Nova的架构:架构

最简单的基础架构:负载均衡


Nova-API:负责接收来自客户端的http请求,好比建立一个虚拟机。异步

Nova-scheduler:负责选择合适的服务器节点,这里的调度策略是先过滤不合适的节点,而后再进行打分操做,选择出来最合适的节点通知该节点上的nova-computer来进行建立虚拟机、迁移等操做。blog

Nova-computer:以一个守护进程的方式运行在计算节点上,专门负责建立虚拟机。


可是这是最简单的架构模型,咱们想,nova-computer在建立虚拟机的时候,须要给虚拟机准备文件系统,那么这就须要用到nova-volume(概念以下)

nova-volume:为虚拟机提供块设备存储,也就是说,它主要负责建立云硬盘、删除云硬盘。大部分功能已被Cinder替代。


在准备好文件系统的时候,咱们还须要给虚拟机分配合适的IP地址等网络设备,保证其有一个稳定的网络通信,那么这就须要用到nova-network(概念以下)

nova-network:为虚拟机提供网络服务,也就是说,它实现了网络资源池的管理,包括:IP池、网桥接口、防火墙、VLAN等的管理。大部分功能已被Quantum替代。


咱们考虑一个同步和异步的问题,若是nova-API在接受到客户端的http请求以后,向nova-scheduler发送消息,那么这就是同步操做,若是总体的操做都是同步的状况,也就是说,在一个请求操做没有完成以前,全部模块都会停在这里不能作其余的工做,这必然会照成工做效率的降低,同时,各个模块之间的关系过于密切,一个模块失效的时候,其余的就没法完成工做,由于消息没法传递下去,因此为了下降各个模块的耦合性同时保证操做的异步性,这里用到了消息队列机制,RabbitMQ(概念以下)

RabbitMQ:消息队列机制的实现,各个nova模块之间的通讯几乎经过该队列实现,为各个模块传递消息。好比,nova-API在接受到http请求的时候,他会将该请求放到RabbitMQ中,nova-scheduler、nova-volume、nova-network等会从RabbitMQ队列中获取相应的任务去执行。


在解决了消息传递的机制以后,咱们会不会以为这个架构中还缺乏一个东西,对,就是一个存储各个模块所须要必要信息的数据库,这里咱们通常使用Mysql、Postgres的等数据库,各个模块均可以经过该数据库来查询本身必要的信息,而且也能够往数据库中记录一些更改等信息。这里就有了一个nova database(概念以下)

nova-database:用于存储各个模块所须要的必要的信息。通常用Mysql便可。

因为这个数据库中存储了各个模块的必要信息,那么里面的数据信息仍是十分重要的,因为nova-computer是存在于每个节点上的,那么若是攻破了一个节点,那么,就能够直接访问该数据库,危险性可想而知,因此,为了防止该状况的出现,nova-conductor的出现很好的解决了这个问题(概念以下)

nova-conductor:介于nova-database和nova-computer之间,其目的在于消除nova-compuer直接访问云数据库。保证了数据库的安全性。


那么,经过上面的介绍,你们的脑子中是否是已经自动的将nova的架构图补全了呢,那么下面就是nova的完整架构图:




以上观点均为我的观点,若有不对的地方还请各位大神指正,谢谢