简单回顾一下OpenStack三大组件的用途:
OpenStack Compute(Nova),为云组织的控制器,它提供一个工具来部署云,包括运行实例、管理网络以及控制用户等等。
OpenStack Object Storage(Swift),是一个可扩展的对象存储系统。
OpenStack Image Service(Glance),是一个虚拟机镜像的存储、查询和检索系统。
对于Nova,我们先来看一张图:
总的来说,nova的各个组件是以数据库和队列为中心进行通信的,下面对其中的几个组件做一个简单的介绍:
Queue,也就是消息队列,它就像是网络上的一个hub,nova各个组件之间的通信几乎都是靠它进行的,当前的Queue是用RabbitMQ实现的,它和database一起为各个守护进程之间传递消息。
database存储云基础架构中的绝大多数状态。这包括了可用的实例类型,在用的实例,可用的网络和项目。当前广泛使用的数据库是sqlite3(仅适合测试和开发工作)、MySQL和PostgreSQL。
nova-compute负责决定创造虚拟机和撤销虚拟机,通过运行一系列系统命令(例如发起一个KVM实例,)并把这些状态更新到nova-database中去,其过程相当复杂,但是基本原理很简单。
nova-schedule负责从queue里取得虚拟机请求并决定把虚拟机分配到哪个服务器上去。schedule的算法可以自己定义,目前有Simple(最少加载主机),chancd(随机主机分配) ,zone(可用区域内的随机节点)等算法。
nova-volume负责记录每一个计算实例,相当于一个计算请求吧,并负责创建,分配或撤销持久层容器(Amazon的,iSCSI,AoE等等)给这些computeinstances。
nova -netwok负责处理队列里的网络任务。
nova-api守护进程是OpenStackCompute的中心。它为所有API查询提供一个入口, 并且同时支持OpenStack API 和 Amazon EC2API。
为了看看nova是如何工作的,我们可以以启动一个实例为例来进行说明,因为启动一个新的instance涉及到很多openstacknova里面的组件共同协作。
其中:
API :处理客户端的请求,并且转发到 Queue和Database中。
Scheduler:选择一个host去执行命令
nova-compute :启动和停止实例,附加和删除卷等操作
nova-network:管理网络资源,分配固定IP。
接下来就是真正的过程了,先从API开始:
API
例如我们输入一个命令:euca-run-instances -k test -t m1.tiny ami-tiny它会执行以下操作:
查看这种类型的instance是否达到最大值
给scheduler发送一个消息(实际上是发送到Queue中)去运行这个实例。
Schedule
调度器接收到了消息队列Queue中API发来的消息,然后根据事先设定好的调度规则,选择好一个host,之后,这个instance会在这个host上创建。
Compute
真正去创建一个instance的操作是由Compute完成的,而这个过程中computer组件与Glance密不可分,如图所示:
接下来,需要了解一下Glance在OpenStack里面所起的作用了。
我觉得看图是最直观的了,所以要弄明白Glance在整个OpenStack项目中的角色,就再来看一张图。
可以看出,通过Glance,Opentack的3个模块被链接成了一个整体,Glance为Nova提供镜像的查找操作,而Swift又为Glance提供实际的存储服务,Swift可以看作是Glacne存储接口的一个具体实现。
以我个人的理解来看,Glance的功能类似虚拟文件系统VFS,Glance提供给用户,或者说是Nova,一个统一的操作接口,而至于具体存储的是在Swift上还是在AmazonS3上,使用者不必关心。
知道了Glance所起到的作用之后,再来看compute调用Glance的那张图,详细会更好理解。
glance-api 主要是用来接受各种api调用请求,并提供相应的操作。
glacne-registry 用来和MySQL数据库进行交互,存储或者获取镜像的元数据,注意,刚才在Swift中提到,Swift在自己的StorageServer中是不保存元数据的,这儿的元数据是指保存在MySQL数据库中的关于镜像的一些信息,这个元数据是属于Glance的。
image store 也就是图中的”Swift ofS3″,是一个存储接口,通过接口,glance可以获取镜像,image不仅仅支持OpenStack自己的Swift格式的镜像,也同时支持AmazonS3等其他的镜像。