可选的配置数据库

https://blueprints.launchpad.net/nova/+spec/optional-placement-database

自其诞生以来,一直有一个长期目标,即将 placement 服务提取到它自己的仓库中,从而可以将其打包和作为独立服务运行。为了实现这一目标,已经进行了一段时间的工作,但一个限制因素是管理 placement 数据库连接和 placement 数据。目前,placement 数据存储在与 nova API 相同的数据库中。

Rocky PTG 及其他讨论表明,为部署者提供管理 placement 数据的方式选择将有助于迁移。本规范建议将 placement 数据库连接的配置分离到它自己的设置中,当未定义时,该设置将回退到 nova api 数据库设置。这提供了多种管理选项,并以一种有用的方式清理了代码,以便最终迁移(详情如下)。

问题描述

我们希望让部署者能够以他们喜欢的方式管理他们的 placement 数据。虽然这其中有很多因素,但现在使这样做变得更加复杂的一件事是,placement 数据库的连接使用 [api_database]/connection 配置设置进行配置,因此隔离 placement 数据库配置并不容易。 有很多方法可以解决这个问题(参见 替代方案 下文),但使用不同的配置选项是明确的,并且可以很好地转化为未来,届时可以使用相同的配置设置(限制更改文件名,而不是配置设置的名称)。

同时,我们希望让 placement 的开发人员能够开始限制其他 nova 代码导入到专门用于 placement 的代码中的程度。使用单独的配置设置可以轻松隔离建立数据库会话(参见 正在进行中的隔离工作)。

同样,我们希望为打包者提供基础,以便进行迁移,其中数据管理具有明确可识别的入口点。

用例

作为部署者,我希望配置我的新 placement 服务以将其数据保存到它自己的数据库,因为我知道将来我可以使用它独立运行。

作为不同的部署者,我希望配置我的 placement 服务以继续使用 nova api 数据库,因为我不关心拥有单独的数据库。

作为打包者,我希望允许我的用户通过使用“正常”的设置配置方法来对 placement 数据库的位置进行精细控制。

作为开发人员,我希望通过限制 placement 和 nova 代码之间的重叠来为 placement 的提取做准备。

提议的变更

这里提出了两个主要更改。

Placement 数据库连接

其中一个是添加一个配置组,placement_database,其操作方式(以及选项)与现有的 api_database 组相同。 如果设置了 [placement_database]/connection,则其值将用于到所述数据库的独立连接。 如果未设置,则将使用 [api_database]/connection 中的连接字符串,但它被标识为单独的 SQLAlchemy 会话。

这样做的好处是,在 placement 提取后,它可以重复使用。 相同的配置组和名称可以在未来继续使用。

有一个 数据库连接正在进行中的工作

隔离的 placement 数据库配置

一旦存在一个单独的 SQLAlchemy 会话用于连接到托管 placement 数据的任何主机,就可以独立于主 nova 代码管理该会话。 这对于将 placement 代码集中到自身,简化最终提取并支持 placement 代码的持续清理非常有用。 有一个 隔离工作正在进行中

备选方案

这里的首要替代方案是除了记录部署者可以使用自己的配置文件运行 placement 服务之外,什么都不做;一个将 API 数据库连接设置为部署者希望用于 placement 的任何数据库的配置文件。 这绝对是一个可行的解决方案,但它并没有为更清晰的配置奠定基础,也没有上述数据库配置的隔离。

数据模型影响

此更改不涉及更改数据模型本身。 迁移和数据库模式继续以相同的方式管理。 如果同时存在 API 和 placement 数据库,它们将创建相同的表并运行相同的迁移(在不同的数据库中)。 未来的工作将解决 placement 中的迁移和模式管理。

REST API 影响

无。

安全影响

如果使用新的数据库,那么部署需要调整任何安全措施以意识到它。

通知影响

无。

其他最终用户影响

placement 中的数据库管理对于 placement 的最终用户来说应该是不可见的。

性能影响

使用单独的数据库增加了管理扩展性和性能的选项。 假设将 placement 和 nova API 活动分离到不同的数据库服务器可能很有用。

其他部署者影响

除了已经提到的配置选项外,部署者还需要了解他们可以管理和迁移 placement 数据的一些不同方式。 目前的计划是根据尚未完成的实验来记录这些内容。 这些更改将使其中一些实验成为可能。

本规范明确不提供有关部署者如何从 placement-within-nova 部署升级到 placement-not-in-nova 部署的明确指导。 它正在为该部署奠定基础。

开发人员影响

除了意识到它之外,开发人员在 placement 上工作的方式不会发生功能性变化。

升级影响

本规范明确不涉及与升级到 placement 未提取到已提取的系统相关的担忧。 这项工作是该部署的前提。

如果在 Rocky 中合并此配置更改,但 placement 在 *S* 周期中未提取,那么将不会出现升级问题。 现有的配置将继续工作。

实现

负责人

主要负责人

cdent

其他贡献者

志愿者

工作项

这项工作已在 数据库连接正在进行中的工作隔离工作正在进行中 中开始。

  • 创建 [placement_database] 配置组。

  • 记录该组。

  • 更新测试夹具以反映新的 placement 数据库会话。

  • 更新单元和功能测试以使用新的会话。

  • 更新 placement 数据库上下文管理器以使用新的会话。

  • 隔离 placement 中的会话配置。

  • 更新讨论 placement 数据库的贡献者和用户文档。

依赖项

无。

测试

现有的功能测试将继续执行数据库的使用。 如果我们选择这样做,我们可以添加或调整现有的 gate 作业以设置和使用不同的 placement 数据库连接。

文档影响

这项工作的中期目标是使进行实验变得容易,这些实验将有助于创建清晰的文档,以用于在 placement 提取时进行迁移策略。

参考资料

历史

修订版

发布名称

描述

Rocky

引入