OpenStack之Nova架构分析

时间:2024-03-24 09:21:13

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

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

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

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

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

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

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

最简单的基础架构:

OpenStack之Nova架构分析

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

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

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的完整架构图:

OpenStack之Nova架构分析



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