nova-cells官方的英文文档,为了以后好查阅写成中文(英语能力不好)
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。
Cell的配置选项
cells的功能在默认情况下是禁用的。所有的cell相关的配置选项在nova.conf中的[cells]中。目前支持下列选项:
enable
设置为True开启cell功能,默认情况下是关闭的。
name
当前cell的名称。对于每一个cell必须是唯一的。
capabilities
列出任意的key=value对当前的cell定义功能。这些被发送到parent cells上,但是直到在filter/weight体系中添加之前,不被用于调度中。
call_timeout
cells之间呼叫答复最长需要多久时间。
配置API cell(最高级别的)
compute api class必须在API cell中被改变,这样请求就可以代理通过nova-cells正确的到达cell。在API cell中的nova.conf中添加以下内容:
[DEFAULT]
compute_api_class=nova.compute.cells_api.ComputeCellsAPI
...
[cells]
enable=True
name=api
配置child cells
在child cells中对nova.conf添加如下内容,在每一个cells中更换name后的cell1。
[DEFAULT]
# Disable quota checking in childcells. Let API cell do it exclusively.
quota_driver=nova.quota.NoopQuotaDriver
[cells]
enable=True
name=cell1
配置每一个cell中的数据库
在服务上线之前,需要通过cell的相关信息配置每一个cell的数据库。特别是,API cell需要知道他的直系children,并且这些child cells需要知道他们的直系代理。所需的信息是RabbitMQ服务器为特定的cell的凭证。
使用nova-manage cell create命令为每一个cell添加信息到数据库中:
$ nova-manage cell create -h
Options:
-h, --help 显示帮助信息
--name=
--cell_type=
cell的类型,是parent还是child
--username=
这个cell的消息代理的名称
--password=
这个cell的消息代理的密码
--hostname=
这个cell的消息代理的地址
--port=
这个cell的消息代理的端口号
--virtual_host=
这个cell的消息代理的虚拟主机
--woffset=
--wscale=
一个例子,假设我们有一个名为api的API cell和一个名为cell1的child cell。在api cell中,RabbitMQ服务的信息如下:
rabbit_host=192.168.100.6
rabbit_port=5672
rabbit_username=api_user
rabbit_password=api_passwd
rabbit_virtual_host=api_vhost
在名为cell1的child cell中,RabbltMQ服务的信息如下:
rabbit_host=192.168.100.7
rabbit_port=5673
rabbit_username=cell1_user
rabbit_password=cell1_passwd
rabbit_virtual_host=cell1_vhost
我们需要在API cell的机器上作为root用户执行命令:
# nova-manage cell create --name=cell1--cell_type=child --username=cell1_user --password=cell1_passwd --hostname=192.168.100.6--port=5673 --virtual_host=cell1_vhost --woffset=1.0 --wscale=1.0
为所有的child cells重复之上的所有操作。
在child cell中,我们需要作为root用户执行以下命令:
# nova-manage cell create --name=api--cell_type=parent --username=api1_user --password=api1_passwd --hostname=192.168.100.6--port=5672 --virtual_host=api_vhost --woffset=1.0 --wscale=1.0
目前遇到的问题:
我是在G版本中控制节点作为api,计算节点作为child,按照上述配置计算节点上的nova-compute无法启动,文档中说在child上需要运行除了nova-api之外的所有nova服务?无法启动是否因为有相关的组件没有在计算节点上运行?
RabbitMQ的相关信息是在nova.conf中配置的,如果按照文档所说,两台机器的rabitMQ的信息是不同的,可在OpenStack中控制节点和计算节点的nova.conf中的rabbit_host是相同的,需要指向控制节点,那如果按照cells的文档搭建,是否需要两台机器的RabbitMQ都配置?
希望大家指教。