Zero-Downtime Database Upgrades

警告

此功能在 Ocata、Pike 和 Queens 版本中为实验性功能。我们鼓励操作员尝试它,但目前不支持在生产环境中使用。

零停机数据库升级 能够实现云控制平面中 Glance 节点的真正滚动升级。在升级的适当阶段,您可以同时部署版本 n(例如,Ocata)和版本 n-1(例如,Newton)的 Glance 节点,将 n-1 版本的节点从轮换中移除,允许它们完成处理,然后永久将其停用,使云中的所有 Glance 节点都处于版本 n

这只是滚动升级工作方式的粗略描述。有关完整详细信息,请参阅 Rolling Upgrades

注意

当我们谈论“数据库升级”时,我们只是指将数据库模式及其数据从 OpenStack 版本 n(例如,Pike)中使用版本更改为 OpenStack 版本 n+1(例如,Queens)中使用版本。我们不是指升级数据库管理软件。

注意

不支持降级数据库。有关更多信息,请参阅 Downgrading an Existing Database

扩展-迁移-收缩周期

可以将数据库升级划分为三个阶段

  1. 扩展:在此阶段,将新列、表、索引添加到数据库中。

  2. 迁移:在此阶段,将数据迁移到新列或表中。

  3. 收缩:在此阶段,将“旧”表或列(不再使用)从数据库中删除。

“遗留” Glance 数据库迁移将这些阶段作为单个整体升级脚本的一部分执行。目前,Glance 项目为周期的三个部分中的每个部分创建一个单独的脚本。我们称这种升级为 E-M-C 数据库迁移。

Zero-Downtime Database Upgrade

E-M-C 策略可以在 Glance 不使用数据库时离线执行。但是,通过一些调整,E-M-C 策略可以在数据库使用时在线应用,从而实现真正的滚动升级。

注意

请不要忘记,零停机数据库升级目前被认为是实验性的,并且不支持在生产环境中使用。

零停机数据库升级是 rolling upgrade strategy 用于升级整个 Glance 安装的一部分。在这种情况下,您希望升级到 Glance 的版本 n(例如,Queens),同时您的版本 n-1 API 节点仍在运行 Pike。为了使之成为可能,在 扩展 阶段,可以向数据库添加数据库触发器,以使“旧”列和“新”列中的数据保持同步。同样,在所有数据迁移完成并且所有 Glance 节点更新到版本 n 代码后,这些触发器将在 收缩 阶段删除。

注意

与 E-M-C 脚本不同,数据库触发器特定于每种数据库技术。这就是 Glance 项目当前仅为 MySQL 提供实验性支持的原因。

新的数据库版本标识符

为了执行零停机升级,数据库的版本标识符变得更加复杂,因为它必须反映升级已达到 E-M-C 周期的哪个阶段。为了使之明确,标识符在其名称中显式包含“expand”或“contract”。

因此,Ocata 周期迁移与它关联的有两个标识符:ocata_expand01ocata_contract01

在升级过程中,数据库最初标记为 ocata_expand01。最终,在完成整个升级过程后,数据库将被标记为 ocata_contract01。因此,操作员将看到一个组合数据库版本,该版本将同时具有扩展和收缩版本,而不是一个数据库版本。只有当扩展和收缩修订都处于最新修订时,数据库才会被认为处于 Ocata 版本。例如,对于成功的 Ocata 零停机升级,数据库将同时标记为 ocata_expand01ocata_contract01

如果一个周期内有多个更改,数据库版本记录将经历以下过程

阶段

数据库标识符

comment

E

bexar_expand01

升级开始

E

bexar_expand02

E

bexar_expand03

M

bexar_expand03

bexar_migrate01 发生

M

bexar_expand03

bexar_migrate02 发生

M

bexar_expand03

bexar_migrate03 发生

C

bexar_expand03, bexar_contract01

C

bexar_expand03, bexar_contract02

C

bexar_expand03, bexar_contract03

升级完成

Database Upgrade

对于离线数据库升级,glance-manage 工具仍然具有 glance-manage db sync 命令。该命令将为您执行扩展、迁移和收缩脚本,就像它们包含在一个脚本中一样。

为了启用零停机数据库升级,glance-manage 工具已被增强,包含以下操作,以便您可以显式管理升级。

警告

对于 MySQL,使用 glance-manage db expandglance-manage db contract 命令需要您授予 glance 用户 SUPER 权限,或者预先在 mysql 中运行 set global log_bin_trust_function_creators=1;

Expanding the Database

glance-manage db expand

这将运行滚动升级过程的扩展阶段。数据库扩展应作为滚动升级过程的第一步,在启动任何新服务之前运行。

Migrating the Data

glance-manage db migrate

这将运行滚动升级过程的数据迁移阶段。数据库迁移应在数据库扩展之后,但在启动任何新服务之前运行。

Contracting the Database

glance-manage db contract

这将运行滚动升级过程的收缩阶段。数据库收缩应作为滚动升级过程的最后一步,在所有旧服务升级到新服务之后运行。