cells的功能允许用户以更分散的方式去扩展OpenStack计算云而无需使用复杂的技术,比如数据库和消息队列的集群。它的目的是支持非常大规模的部署。
当启用了此功能,在OpenStack计算云中的主机被划分为组称为cells。cells可以被配置成树形结构。顶层的cell的主机应该运行nova-api服务,但是没有nova-compute服务。每一个childcell在常规的计算云中应该运行除了nova-api之外的所有nova-*类型的服务。可以认为,作为正常的计算部署的cells,每一个cell都有他自己的数据库服务器和消息队列的代理。
nova-cells服务负责cells之间的沟通和为一个新的实例选择一个cell。所有的cell都需要这个服务。cells之间的通信是可插拔的,唯一的选择就是通过RPC进行通信实现。
cells的调度是独立于主机调度的。nova-cells首先要找到一个cell(目前的选择是随机的,在未来的版本当中将会添加过滤/称重功能和可以基于广播的容量/能力的决策)。一旦一个cell被选中并且一个新的生成请求被送达到nova-cells服务,他会被发送到那个cell的主机调度中并且生成过程作为没有的cells。
nova-cells的配置方法见https://wiki.openstack.org/wiki/Blueprint-nova-compute-cells
cell特征
1.目的是支持更大规模的部署;
2.cell的结构是树的形式;
3.top-level级别的cell(API cell)中的主机运行nova-api服务,可以没有nova-compute服务,不感知底层物理主机以及虚拟化;
4.子cell无nova-api服务;
5.每一个子cell应该运行常规OpenStack云计算中所有nova-*类型的服务,除了nova-api服务;
6.树中的每个cell中都有自己的数据库服务和消息队列服务;
7.从设计上来讲cell之间的通信是可插拔的,也就是未来会支持多种消息通信框架,目前cell之间的通信只是通过RPC服务来实现的;
8.采用cell服务实现了cell的调度和主机节点的调度是相互分离的;
9.在建立新的实例时,nova-cells服务选择cell,目前实现的是随机选择,将来会添加过滤/权重功能,还可以基于广播获取的capacity/capabilities等参数;
10.在默认的情况下cell功能是禁用的;
cells架构
在API cell节点要部署nova-api对外提供统一服务,nova-cell负责与子cell之间通信;子cell节点统一要部署nova-cell,如果子cell直接接入虚拟化层,则还要部署nova-scheduler,nova-compute。
上图是三个cell级联的情况,其中API Cell收到请求后,通过nova-cell提供的调度算法,通过消息队列将消息转发到Child Cell节点,在Child Cell节点做与API Cell同样的工作,选择一个Grandchild Cell并继续转发,在Grandchild节点上做真正的主机调度工作,选择主机创建虚拟机。
参考文档
https://wiki.openstack.org/wiki/Blueprint-nova-compute-cells
http://blog.csdn.net/lynn_kong/article/details/8564558
http://m.blog.csdn.net/blog/ustc_dylan/17758393
http://m.blog.csdn.net/blog/gaoxingnengjisuan/13631401
http://m.blog.csdn.net/blog/gaoxingnengjisuan/14216977
nova-cells源码解析1 http://blog.csdn.net/gaoxingnengjisuan/article/details/14216977
nova-cells源码解析2 http://blog.csdn.net/gaoxingnengjisuan/article/details/14484033
nova分析(4)—— nova-cells,布布扣,bubuko.com