单元主机映射

https://blueprints.launchpad.net/nova/+spec/cells-host-mapping

由于调度器将返回主机而不是单元,我们需要知道该主机位于哪个单元中。 将创建一个新表,用于存储此映射关系。

问题描述

当 Nova 被划分为单元时,计算 API 需要知道与哪个单元通信,以便构建已调度的实例,或进行主机 API 请求。 目前没有主机到单元的映射,因此仅凭主机无法知道如何将信息传递到该主机。

用例

  • 运营商希望将他们的部署划分为单元,以实现扩展、故障域和构建原因。 在划分后,我们需要一个查找表来知道主机位于哪个分区中。

项目优先级

Liberty 的优先级尚未确定。

提议的变更

拟议的更改是在 ‘nova_api’ 数据库中添加一个新表,用于存储主机到单元的映射关系,以及一个用于与其交互的对象。 将数据迁移到此表将由单独的规格文档处理。

以下图表可能有助于可视化它。

                                 api/cell boundary
    scheduler returns a host             |
                |                        |
                v                        |
           nova-api+--------------------------->cell-db/rpc
                +                        |
                +----+                   |
                     |                   |
                     v                   |
host_mapping (joined with) cell_mapping  |

备选方案

我们可以继续使用今天使用的 nova-cells 模型。

数据模型影响

将在 ‘nova_api’ 数据库中添加一个新的 ‘host_mapping’ 表。

表结构如下所示:

CREATE TABLE `host_mapping` (
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `host` varchar(255) NOT NULL,
  `cell_uuid` varchar(36) NOT NULL)

主机将是一个索引列。 其他索引也是可能的,可以在代码审查中讨论。

应该注意的是,这里没有 ‘deleted’ 或 ‘deleted_at’ 列。 如果主机存在,则应该映射它,只有当主机被永久删除时,才不需要保留它在这里。

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

仅此更改本身不会引入性能影响。 当它被后续规格文档使用时,它会在 Nova 中的某些操作中引入另一个数据库查找。

其他部署者影响

这将在 ‘nova_api’ 数据库中引入一个新表。 如上文 “数据模型影响” 部分所述,在清理主机时应考虑它。 如果从部署中删除主机,也可以从 host_mapping 表中删除它们。

开发人员影响

实现

负责人

主要负责人

alaski

其他贡献者

工作项

  • 添加 ‘host_mapping’ 表的数据库迁移。

  • 添加 HostMapping 对象。

依赖项

测试

由于这被设计为 Nova 的内部重构,没有用户可见的更改,因此当前的 Tempest 或功能测试应该足够。在某个时候,我们希望研究如何测试多个 Cell 或潜在地在 API 中公开 Cell 的概念,然后我们将解决测试要求。

文档影响

应该添加关于新表及其用途的文档。

参考资料

https://etherpad.openstack.org/p/kilo-nova-cells