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。
扩展-迁移-收缩周期¶
可以将数据库升级划分为三个阶段
扩展:在此阶段,将新列、表、索引添加到数据库中。
迁移:在此阶段,将数据迁移到新列或表中。
收缩:在此阶段,将“旧”表或列(不再使用)从数据库中删除。
“遗留” 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_expand01 和 ocata_contract01。
在升级过程中,数据库最初标记为 ocata_expand01。最终,在完成整个升级过程后,数据库将被标记为 ocata_contract01。因此,操作员将看到一个组合数据库版本,该版本将同时具有扩展和收缩版本,而不是一个数据库版本。只有当扩展和收缩修订都处于最新修订时,数据库才会被认为处于 Ocata 版本。例如,对于成功的 Ocata 零停机升级,数据库将同时标记为 ocata_expand01、ocata_contract01。
如果一个周期内有多个更改,数据库版本记录将经历以下过程
阶段 |
数据库标识符 |
comment |
|---|---|---|
E |
|
升级开始 |
E |
|
|
E |
|
|
M |
|
bexar_migrate01 发生 |
M |
|
bexar_migrate02 发生 |
M |
|
bexar_migrate03 发生 |
C |
|
|
C |
|
|
C |
|
升级完成 |
Database Upgrade¶
对于离线数据库升级,glance-manage 工具仍然具有 glance-manage db sync 命令。该命令将为您执行扩展、迁移和收缩脚本,就像它们包含在一个脚本中一样。
为了启用零停机数据库升级,glance-manage 工具已被增强,包含以下操作,以便您可以显式管理升级。
警告
对于 MySQL,使用 glance-manage db expand 或 glance-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
这将运行滚动升级过程的收缩阶段。数据库收缩应作为滚动升级过程的最后一步,在所有旧服务升级到新服务之后运行。