适用于 的 Amazon RDS 蓝绿部署概述 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

适用于 的 Amazon RDS 蓝绿部署概述

通过使用 Amazon RDS 蓝绿部署,您可以进行数据库更改并测试,然后再在生产环境中实施这些更改。蓝绿部署会创建一个复制生产环境的暂存环境。在蓝绿部署中,蓝色环境是当前的生产环境。绿色环境是暂存环境。暂存环境使用逻辑复制与当前生产环境保持同步。

您可以在绿色环境中更改 RDS 数据库实例,而不会影响生产工作负载。例如,您可以升级主要或次要数据库引擎版本、升级基础文件系统配置或在暂存环境中更改数据库参数。您可以彻底测试绿色环境中的变化。准备就绪后,您可以切换环境,以将绿色环境提升为新的生产环境。切换通常需要不到一分钟,不会丢失数据,也无需更改应用程序。

由于绿色环境是生产环境拓扑的副本,因此绿色环境包括数据库实例使用的功能。这些功能包括只读副本、存储配置、数据库快照、自动备份、性能详情和增强监控。如果蓝色数据库实例为多可用区数据库实例部署,则绿色数据库实例也是多可用区数据库实例部署。

注意

目前,仅对于 RDS for MariaDB、RDS for MySQL 和 RDS for PostgreSQL 支持蓝绿部署。有关 Amazon Aurora 可用性,请参阅《Amazon Aurora 用户指南》中的使用 Amazon RDS 蓝绿部署进行数据库更新

使用 Amazon RDS 蓝绿部署的优势

通过使用 Amazon RDS 蓝绿部署,您可以随时了解最新的安全补丁,提高数据库性能,并在短暂且可预测的停机时间内采用更新的数据库功能。蓝绿部署降低了数据库更新(例如主要或次要引擎版本升级)的风险和减少了停机时间。

蓝绿部署提供以下优势:

  • 轻松创建生产就绪的暂存环境。

  • 自动将数据库更改从生产环境复制到暂存环境。

  • 在不影响生产环境的情况下在安全的暂存环境中测试数据库更改。

  • 通过数据库补丁和系统更新保持最新状态。

  • 实施和测试更新的数据库功能。

  • 在不更改应用程序的情况下,将您的暂存环境切换为新的生产环境。

  • 使用内置切换防护机制安全切换。

  • 消除切换期间的数据丢失。

  • 快速切换,通常不到一分钟,具体取决于您的工作负载。

蓝绿部署的工作流

使用蓝绿部署进行数据库更新时,请完成以下主要步骤。

  1. 确定需要更新的生产环境。

    例如,此映像中的生产环境具有多可用区数据库实例部署(mydb1)和只读副本(mydb2)。

    
              蓝绿部署中的生产(蓝色)环境
  2. 创建蓝绿部署。有关说明,请参阅 创建蓝绿部署

    下图显示了步骤 1 中生产环境的蓝绿部署示例。在创建蓝绿部署时,RDS 会复制主数据库实例的完整拓扑和配置以创建绿色环境。复制的数据库实例名称附加了 -green-random-characters。映像中的暂存环境包含多可用区数据库实例部署(mydb1-green-abc123)和只读副本(mydb2-green-abc123)。

    
              蓝绿部署

    创建蓝绿部署时,您可以升级数据库引擎版本并为绿色环境中的数据库实例指定不同的数据库参数组。RDS 还配置从蓝色环境中的主数据库实例到绿色环境中的主数据库实例的逻辑复制。

    创建蓝绿部署后,原定设置情况下,绿色环境中的数据库实例为只读状态。

  3. 如果需要,对暂存环境进行其他更改。

    例如,您可以对数据库进行模式更改,或者更改绿色环境中一个或多个数据库实例使用的数据库实例类。

    有关修改数据库实例的信息,请参阅修改 Amazon RDS 数据库实例

  4. 测试您的暂存环境。

    在测试期间,我们建议您将绿色环境中的数据库保持为只读状态。在绿色环境中启用写入操作需谨慎,因为它们可能导致复制冲突。它们还可能导致切换后生产数据库中出现意外数据。要对 RDS for MySQL 启用写入操作,请将 read_only 参数设置为 0,然后重启数据库实例。对于 RDS for PostgreSQL,请在会话级别将 default_transaction_read_only 参数设置为 off

  5. 准备就绪后,切换以将暂存环境提升为新的生产环境。有关说明,请参阅 切换蓝绿部署

    切换会导致停机。停机时间通常不到一分钟,但根据您的工作负载,停机时间可能会更长。

    下图显示了切换后的数据库实例。

    
              切换蓝绿部署后的数据库实例

    切换后,处于绿色环境中的数据库实例将成为新的生产数据库实例。当前生产环境中的名称和端点分配给新提升的生产环境,无需更改您的应用程序。因此,您的生产流量现在流向新的生产环境。先前蓝色环境中的数据库实例通过向当前名称附加 -oldn(其中 n 是一个数字)来重命名。例如,假设蓝色环境中数据库实例的名称为 mydb1。切换后,数据库实例名称可能为 mydb1-old1

    在本例的映像中,切换期间会发生以下变化:

    • 名为 mydb1-green-abc123 的绿色环境多可用区数据库实例部署将成为名为 mydb1 的生产多可用区数据库实例部署。

    • 名为 mydb2-green-abc123 的绿色环境只读副本成为生产只读副本 mydb2

    • 名为 mydb1 的蓝色环境多可用区数据库实例部署成为 mydb1-old1

    • 名为 mydb2 的蓝色环境只读副本成为 mydb2-old1

  6. 如果您不再需要蓝绿部署,可将其删除。有关说明,请参阅 删除蓝绿部署

    切换后,之前的生产环境不会被删除,因此如有必要,您可以将其用于回归测试。

授权访问蓝绿部署操作

用户必须具有所需的权限才能执行与蓝绿部署相关的操作。您可以创建 IAM policy,以便为用户和角色授予权限以对所需的指定资源执行特定的 API 操作。然后,可以将这些策略附加到需要这些权限的 IAM 权限集或角色。有关更多信息,请参阅 Amazon RDS 的 Identity and Access Management

创建蓝绿部署的用户必须具有执行以下 RDS 操作的权限:

  • rds:AddTagsToResource

  • rds:CreateDBInstanceReadReplica

切换蓝绿部署的用户必须具有执行以下 RDS 操作的权限:

  • rds:ModifyDBInstance

  • rds:PromoteReadReplica

删除蓝绿部署的用户必须具有执行以下 RDS 操作的权限:

  • rds:DeleteDBInstance

Amazon RDS 代表您预调配和修改暂存环境中的资源。这些资源包括使用内部定义命名约定的数据库实例。因此,附加的 IAM 策略不能包含部分资源名称模式,例如 my-db-prefix-*。仅支持通配符(*)。通常,我们建议使用资源标签和其它支持的属性来控制对这些资源的访问权限,而不是使用通配符。有关更多信息,请参阅 Amazon RDS 的操作、资源和条件键

蓝绿部署注意事项

Amazon RDS 使用每种资源的 DbiResourceId 跟踪蓝绿部署中的资源。此资源 ID 是资源的 Amazon Web Services 区域唯一的不可变标识符。

资源 ID 与数据库实例 ID 是分开的:


        创建蓝绿部署

当您切换蓝绿部署时,资源的名称(实例 ID)会发生变化,但每个资源都保持相同的资源 ID。例如,在蓝色环境中,数据库实例标识符可能为 mydb。切换后,同一个数据库实例可能重命名为 mydb-old1。但是,数据库实例的资源 ID 在切换期间不会更改。因此,当将绿色资源提升为新的生产资源时,它们的资源 ID 与之前生产中的蓝色资源 ID 不匹配。

切换蓝绿部署后,请考虑将资源 ID 更新为新提升的生产资源的 ID,以获得与生产资源一起使用的集成功能和服务。具体而言,请考虑以下更新:

  • 如果您使用 RDS API 和资源 ID 执行筛选,请在切换后调整筛选中使用的资源 ID。

  • 如果您使用 CloudTrail 来审计资源,请调整 CloudTrail 的使用者,以便在切换后跟踪新的资源 ID。有关更多信息,请参阅 监控 Amazon CloudTrail 中的 Amazon RDS API 调用

  • 如果您使用性能详情 API,请在切换后调整 API 调用中的资源 ID。有关更多信息,请参阅 在 Amazon RDS 上使用性能详情监控数据库负载

    您可以在切换后监控同名数据库,但它不包含切换之前的数据。

  • 如果您在 IAM policy 中使用资源 ID,请确保在必要时添加新提升的资源的资源 ID。有关更多信息,请参阅 Amazon RDS 的 Identity and Access Management

  • 如果您有与数据库实例关联的 IAM 角色,请务必在切换后重新关联它们。附加的角色不会自动复制到绿色环境。

  • 如果您使用 IAM 数据库身份验证对数据库实例进行身份验证,请确保用于数据库访问的 IAM policy 同时包含在策略的 Resource 元素下方列出的蓝色和绿色数据库。这是在切换后连接到绿色数据库所必需的。有关更多信息,请参阅 创建和使用适用于 IAM 数据库访问的 IAM 策略

  • 如果您在蓝绿部署中使用 Amazon Backup 管理资源的自动备份,请在切换后调整 Amazon Backup 使用的资源 ID。有关更多信息,请参阅 使用 Amazon Backup 管理自动备份

  • 如果您想为属于蓝绿部署的数据库实例还原手动或自动数据库快照,请确保通过检查快照拍摄时间来还原正确的数据库快照。有关更多信息,请参阅 从数据库快照还原

  • 如果您想描述以前的蓝色环境数据库实例自动备份或将其还原到某个时间点,请使用资源 ID 进行操作。

    由于数据库实例的名称在切换期间会发生变化,因此您不能将其以前的名称用于 DescribeDBInstanceAutomatedBackupsRestoreDBInstanceToPointInTime 操作。

    有关更多信息,请参阅 将数据库实例还原到指定时间

  • 当您在蓝绿部署的绿色环境中向数据库实例添加只读副本时,当您切换时,新的只读副本不会替换蓝色环境中的只读副本。但是,新的只读副本将在切换后保留在新的生产环境中。

  • 当您在蓝绿部署的绿色环境中删除数据库实例时,您无法创建新的数据库实例来替换蓝绿部署中的该实例。

    如果您创建一个与已删除的数据库实例具有相同名称和相同 Amazon 资源名称(ARN)的新数据库实例,则它具有不同的 DbiResourceId,因此它不属于绿色环境。

    如果您在绿色环境中删除数据库实例,则会导致以下行为:

    • 如果蓝色环境中存在同名的数据库实例,则不会将其切换到绿色环境中的数据库实例。不会通过将 -oldn 添加到数据库实例名称来重命名此数据库实例。

    • 切换后,任何指向蓝色环境中数据库实例的应用程序都将继续使用相同的数据库实例。

    相同的行为适用于数据库实例和只读副本。

蓝绿部署的最佳实践

以下是蓝绿部署的最佳实践:

一般最佳实践

  • 切换之前,在绿色环境中全面测试数据库实例

  • 使绿色环境中的数据库保持只读。我们建议您在绿色环境中谨慎启用写入操作,因为它们可能导致复制冲突。它们还可能导致切换后生产数据库中出现意外数据。

  • 使用蓝绿部署实现模式更改时,仅进行与复制兼容的更改。

    例如,您可以在表末尾添加新列、创建索引或删除索引,而无需中断从蓝色部署到绿色部署的复制。但是,模式更改(例如重命名列或重命名表)会中断向绿色部署的复制。

    有关与复制兼容的更改的更多信息,请参阅 MySQL 文档中的在源和副本上使用不同的表定义进行复制以及 PostgreSQL 逻辑复制文档中的限制

  • 创建蓝绿部署后,必要时处理延迟加载。切换之前,请确保数据加载已完成。有关更多信息,请参阅 创建蓝绿部署时处理延迟加载

  • 切换蓝绿部署时,请遵循切换最佳实践。有关更多信息,请参阅 切换最佳实践

RDS for MySQL 最佳实践

  • 避免使用未针对复制进行优化的非事务性存储引擎,例如 MyISAM。

  • 为二进制日志复制优化只读副本。

    例如,如果您的数据库引擎版本支持它,请在部署蓝绿部署之前,考虑在生产环境中使用 GTID 复制、并行复制和崩溃安全复制。在切换蓝绿部署之前,这些选项可提升数据的一致性和耐久性。有关只读副本的 GTID 复制的更多信息,请参阅将基于 GTID 的复制用于 Amazon RDS for MySQL

RDS for PostgreSQL 最佳实践

  • 如果您的数据库有足够的可用内存,请在蓝色环境中增加 logical_decoding_work_mem 数据库参数的值。这样做可以减少磁盘上的解码次数,改为使用内存。您可以使用 FreeableMemory CloudWatch 指标监控可用内存。有关更多信息,请参阅 Amazon RDS 的 Amazon CloudWatch 实例级指标

  • 创建蓝绿部署之前,请将所有 PostgreSQL 扩展更新到最新版本。有关更多信息,请参阅 升级 PostgreSQL 扩展

  • 如果您使用的是 aws_s3 扩展,请确保在创建绿色环境后,通过 IAM 角色向绿色数据库实例授予对 Amazon S3 的访问权限。这允许导入和导出命令在切换后继续运行。有关说明,请参阅 设置 Amazon S3 存储桶的访问权限

区域和版本可用性

特征可用性和支持因每个数据库引擎的特定版本以及 Amazon Web Services 区域而异。有关 Amazon RDS 蓝绿部署的版本和区域可用性的更多信息,请参阅蓝/绿部署

蓝绿部署的限制

以下限制适用于蓝绿部署。

蓝绿部署的一般限制

以下一般限制适用于蓝绿部署:

  • MySQL 版本 8.0.11 至 8.0.13 存在社区错误,这会阻止 这些版本进行蓝绿部署。

  • 支持以下版本的 RDS for PostgreSQL 作为升级源版本和目标版本:11.21 及更高版本、12.16 及更高版本、13.12 及更高版本、14.9 及更高版本以及 15.4 及更高版本。对于较低的版本,您可以执行次要版本升级,升级到支持的版本。

  • 蓝/绿部署不支持使用 Amazon Secrets Manager 管理主用户密码。

  • 对于 RDS for PostgreSQL,。

  • 对于 RDS for PostgreSQL,蓝色环境数据库实例不能是自行管理的逻辑源(发布者)或副本(订阅用户)。对于 RDS for MySQL,蓝色环境数据库实例不能是外部二进制日志副本。

  • 创建蓝绿部署时,必须在绿色环境中禁用事件调度器(event_scheduler 参数)。这样可以防止在绿色环境中生成事件并导致不一致。

  • 蓝绿部署不支持适用于 MySQL 的 Amazon JDBC 驱动程序。有关更多信息,请参阅 GitHub 上的已知限制

  • 以下功能不支持蓝绿部署:

    • Amazon RDS 代理

    • 级联只读副本

    • 跨区域只读副本

    • Amazon CloudFormation

    • 多可用区数据库集群部署

      多可用区数据库实例部署支持蓝绿部署。有关多可用区部署的更多信息,请参阅配置和管理多可用区部署

蓝绿部署的 PostgreSQL 扩展限制

以下限制适用于 PostgreSQL 扩展:

  • 创建蓝绿部署时,必须在蓝色环境中禁用 pg_partman 扩展。该扩展将执行 CREATE TABLE 等 DDL 操作,这会中断从蓝色环境到绿色环境的逻辑复制。

  • 创建蓝绿部署后,pg_cron 扩展必须在所有绿色数据库上保持禁用状态。该扩展具有以超级用户身份运行并绕过绿色环境只读设置的后台工作进程,这可能会导致复制冲突。

  • 如果将蓝色数据库实例配置为外部数据包装器(FDW)扩展的外部服务器,则必须使用实例端点名称而不是 IP 地址。这会让配置在切换后仍能正常运行。

  • 创建蓝绿部署时,必须在蓝色环境中禁用 pglogicalpg_active 扩展。将绿色环境提升为新的生产环境后,您可以启用这些扩展。此外,蓝色数据库不能是外部实例的逻辑订阅者。

  • 如果您使用的是 pgAudit 扩展,则它必须保留在蓝色和绿色数据库实例的自定义数据库参数组上的共享库(shared_preload_libraries)中。有关更多信息,请参阅 设置 pgAudit 扩展

蓝绿部署的更改限制

以下是对蓝绿部署进行更改的限制:

  • 您无法将未加密的数据库实例更改为加密的数据库实例

  • 您无法将加密的数据库实例更改为未加密的数据库实例

  • 您无法将蓝色环境数据库实例更改为比其相应的绿色环境数据库实例更高的引擎版本。

  • 蓝色环境和绿色环境中的资源必须位于同一个 Amazon Web Services 账户中。

  • 对于 RDS for MySQL,如果源数据库与自定义选项组相关联,则在创建蓝绿部署时无法指定主要版本升级。

    在这种情况下,您可以创建蓝绿部署,而无需指定主要版本升级。然后,您可以在绿色环境中升级数据库。有关更多信息,请参阅 升级数据库实例引擎版本

蓝绿部署的 PostgreSQL 逻辑复制的限制

蓝绿部署使用逻辑复制来使暂存环境与生产环境保持同步。PostgreSQL 有某些与逻辑复制相关的限制,这会导致创建 RDS for PostgreSQL 数据库实例的蓝绿部署存在限制。

下表描述了适用于 RDS for PostgreSQL 的蓝绿部署的逻辑复制限制。

限制 说明
数据定义语言(DDL)语句,(例如 CREATE TABLECREATE SCHEMA)不会从蓝色环境复制到绿色环境。

如果 Amazon RDS 在蓝色环境中检测到 DDL 更改,则您的绿色数据库将进入复制已降级状态。

您会收到一个事件,通知您蓝色环境中的 DDL 更改无法复制到绿色环境。必须删除蓝绿部署和所有绿色数据库,然后重新创建。否则,您将无法切换蓝绿部署。

对序列对象执行的 NEXTVAL 操作在蓝色环境和绿色环境之间不同步。

在切换期间,Amazon RDS 会增加绿色环境中的序列值,以匹配蓝色环境中的那些序列值。如果您有成千上万的序列,这可能会延迟切换。

在蓝色环境中创建或修改大型对象不会复制到绿色环境中。

如果 Amazon RDS 检测到在蓝色环境中创建或修改了存储在 pg_largeobject 系统表中的大型对象,则您的绿色数据库将进入复制已降级状态。

RDS 会生成一个事件,通知您蓝色环境中的大型对象更改无法复制到绿色环境中。必须删除蓝绿部署和所有绿色数据库,然后重新创建。否则,您将无法切换蓝绿部署。

在绿色环境中,具体化视图不会自动刷新。

蓝色环境中刷新的具体化视图不会在绿色环境中刷新。切换后,您可以安排具体化视图的刷新。

不允许对没有主键的表执行 UPDATE 和 DELETE 操作。

在创建蓝绿部署之前,请确保数据库实例中的所有表都有主键。

有关更多信息,请参阅 PostgreSQL 逻辑复制文档中的限制