Openstack Cell简要说明
部署模式
API CELL
父cell
,总的api
入口,需要启动的openstack
服务为keystone
、neutron
、glance
(glance-api
、glance-registry
)、cinder
(cinder-api
)、nova
(nova-api
、nova-cells
、nova-console
、nova-consoleauth
、nova-novncproxy
);需要启动的第三方服务为rabbit
(rabbitmq-server
)与mysql
(mariadb
)。
COMPUTE CELL
子cell
,每一个子cell
相当于一个独立的openstack
环境,担负具体的计算功能。在子cell
内可划分为控制节点与计算节点,控制节点上需要启动的openstack
服务为neutron
(neutron-openvswitch-agent
)、cinder
(cinder-scheduler
、cinder-volume
)、nova
(nova-cells
、nova-conductor
、nova-scheduler
、nova-compute
);控制节点上需要启动的第三方服务为rabbit
(rabbitmq-server
)与mysql(mariadb
);计算节点需要启动的openstack
服务为neutron
(neutron-openvswitch-agent
)、nova
(nova-compute
)。(是否在子cell
的控制节点上启用nova-compute
为可选)
Cell的创建与删除
在父Cell上需要添加子Cell的信息
1 | nova-manage cell create --name {子cell名称} --cell_type compute --username {子cell消息服务器用户名} --password {子cell消息服务器密码} --broker_hosts {子cell消息服务器地址,list形式} --hostname {子cell消息服务器地址} --port {子cell 消息服务器端口} --virtual_host {子cell消息服务器虚拟机主机地址} |
在子Cell上需要添加父Cell的信息
1 | nova-manage cell create --name <父cell名称> --cell_type api --username <父cell消息服务器用户名> --password <父cell消息服务器密码> --broker_hosts <父cell消息服务器地址,list形式> --hostname <父cell消息服务器地址> --port <父cell 消息服务器端口> --virtual_host {父cell消息服务器虚拟机主机地址} |
删除Cell
1 | nova-manage cell delete {cell_id} |
请求的执行流程
当指令下发后,首先进入nova-api
,经过对请求地址解析,参数处理之后,会调用到compute
的api
。非cell
模式,compute
的api
为nova.compute.api.py
;cell
模式下,为nova.compute.cells_api.py
。
父Cell到子Cell的过程
nova.compute.cells_api.py
-> nova.cells.rpcapi.py
-> nova.cells.manager.py
-> nova.cells.messaging.py
(以上为父Cell
,主要功能为调度) -> nova.cells.messaging.py
(子Cell
,由此进入到具体的执行操作)
另一种调用的方式
nova.compute.cells_api.py
(父Cell
,调用其中的_cast_to_cells
或_call_to_cells
等方法,直接调用子Cell
上nova.compute.api.py
中的对应函数) -> nova.compute.api.py
(子Cell
)
相当于非Cell
模式中的功能相简便移植到Cell
模式中,只需要在nova.compute.cells_api.py
中增加一个类似跳板的同名函数,并使用_cast_to_cells
或_call_to_cells
等方法将请求转到子Cell
的nova.compute.api.py
中的同名函数。
数据库与消息服务器
Cell
模式下,有些函数访问的是自身的数据库且不向其他Cell
的数据库同步数据;有些函数访问父Cell
的数控库且会向其他Cell
的数据库同步数据。原生的cell
并不健全,如aggregate
仅在父Cell
上更新,并不同步数据到子Cell
,而子Cell
只从自己的数据库上查询,导致环境无法创建az
。如遇到非Cell
模式下可正常运行的功能在Cell
模式下失效,可以查看是否存在数据读取的问题。
消息服务器的存活是Cell
非常关心的一件事,在多个子Cell
的环境中,其中一个子Cell
的消息服务器挂了之后,会导致父Cell
异常,需要尽快在父Cell
的配置中删除异常的子Cell
。