CellsV2 - 将配额表迁移到 API 数据库

https://blueprints.launchpad.net/nova/+spec/cells-quota-api-db

作为 CellsV2 工作的一部分,我们正在拆分当前的 cell 数据库。Nova 中的配额是全局的,应该跨 cell 应用。因此,它们的数据需要驻留在 API 数据库中。

问题描述

项目和用户的配额需要在 cell 边界上强制执行。配额也在 API 中公开。如果配额仍然保留在 cell 数据库中,则需要修改 API 以公开 cell 信息。或者,配额数据必须复制到所有 cell 中,这将使得强制执行全局配额变得困难。

用例

操作员和用户希望强制执行在 cell 之间适用的配额。

提议的变更

我们建议将当前驻留在 cell 数据库中的与配额相关的表迁移到 API 数据库。这些表是

quotas
quota_classes
quota_usages
project_user_quotas
reservations

将在 API 数据库中创建数据库模型。这些将与 cell 数据库中现有的模型密切匹配。可以对这些表进行一些修改,以清理现有的数据模型。

nova 中的 Quotas 对象使用了 quota.py 中的函数。它主要是一个 RPC 接口,用于 quota.py API。为了处理主数据库和 API 数据库同时使用的过渡期,所有数据库访问都将被移动到 Quotas 对象。 quota.py 中的 DbQuotaDriver 将被修改为使用 Quotas 对象进行查询。

将为现有的数据库访问创建包装方法。对 quotasquota_classesproject_user_quotas 表执行任何 get 类型操作的包装方法将被修改为首先从 API 数据库加载。如果未找到该项目,则将在 cell 数据库中搜索它。

将创建迁移函数,以将数据从 cell 迁移到 API 数据库。这些方法将添加到 nova manage online_data_migrations 命令中。

flavors 的迁移已经完成,对于上述表,我们将通常遵循此示例。[3]

未来将不再使用 quota_usagesreservations 表,因为我们将统计资源,而不是将使用量和预留作为单独的实体进行跟踪。

备选方案

在不改变配额性质的情况下,DbQuotaDriver 很有可能需要将其表迁移到 API 数据库。配额的一般替代方案包括 ‘Quotas Reimagined’ [1] 和 ‘Delimiter’ [2] 项目。前者规范可能仍然会使用一些需要迁移的现有表。单独的配额库或服务将创建一个全新的配额数据存储。

数据模型影响

数据模型的影响将很大,因为将在 API 数据库中创建许多新表。由于模型与 cell 数据库基本相同,因此此处不会详细介绍模型。

REST API 影响

无 - Cells 实现不应在 API 中公开。

安全影响

无,将配额数据迁移到 API 数据库可以尽可能地保持实现与当前模型一致。打破配额执行应该不会比现在更困难或更容易。

通知影响

其他最终用户影响

性能影响

更改的性能影响可以忽略不计。但是,对于 CellsV2 针对的大规模部署,DbQuotaDriver 的性能也不会得到改善。

在迁移期间,配额操作和构建请求将受到更大的性能影响。这是因为对 quotaproject_user_quotaquota_classes 表的数据库访问可能需要两个数据库请求。

这种性能影响是短期的,并将持续到数据迁移完成。

其他部署者影响

部署者必须了解升级时的数据迁移。他们必须了解 nova-manage 命令才能将数据迁移到 API 数据库。

开发人员影响

实现

负责人

主要负责人

melwitt

其他贡献者

工作项

  • 创建 API 数据库中的配额表数据库模型和迁移。

  • 创建 API 数据库的数据库访问和包装方法。

  • 修改 DbQuotaDriver 以使用新的数据库访问方法。

  • 创建迁移方法以将数据迁移到 API 数据库,并将此方法添加到 online_data_migrations 中。

依赖项

测试

  • 添加新的数据库模型的单元和功能测试。

  • 添加新的数据库访问包装方法的单元测试。

  • 添加新的数据迁移功能测试。

  • 修改配额驱动程序的单元测试。

  • 增强现有的配额功能测试。

文档影响

操作员文档可能需要修改,以包含有关使用 nova-manage 命令升级和迁移数据的详细信息。

参考资料

历史

修订

发布名称

描述

Newton

已引入但未合并任何更改。

Ocata

重新提出。

Pike

重新提出。已更新,不再使用 quota_usagesreservations