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

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

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

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

由于绿色环境是生产环境拓扑的副本,因此数据库集群及其所有数据库实例都将在部署中复制。绿色环境还包括数据库集群使用的功能,例如数据库集群快照、性能详情、增强监控和 Aurora Serverless v2。

注意

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

使用 Amazon RDS 蓝绿部署的优势

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

蓝绿部署提供以下优势:

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

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

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

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

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

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

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

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

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

蓝绿部署的工作流

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

  1. 确定需要更新的生产数据库集群。

    下图显示了一个生产数据库集群的示例。

    
            蓝绿部署中的生产(蓝色)Aurora 数据库集群
  2. 创建蓝绿部署。有关说明,请参阅 创建蓝绿部署

    下图显示了步骤 1 中生产环境的蓝绿部署示例。在创建蓝绿部署时,RDS 会复制 Aurora 数据库集群的完整拓扑和配置以创建绿色环境。复制的数据库集群和数据库实例的名称附加了 -green-random-characters。映像中的暂存环境包含数据库集群(auroradb-green-abc123)。它还包含数据库集群中的三个数据库实例(auroradb-instance1-green-abc123、auroradb-instance2-green-abc123 和 auroradb-instance3-green-abc123)。

    
            Amazon Aurora 的蓝绿部署

    创建蓝绿部署时,可以为绿色环境中的数据库集群指定更高的数据库引擎版本和不同的数据库集群参数组。您还可以为数据库集群中的数据库实例指定不同的数据库参数组。

    RDS 还配置从蓝色环境中的主数据库实例到绿色环境中的主数据库实例的复制。

    重要

    对于 Aurora MySQL 版本 3,在创建蓝绿部署后,绿色环境中的数据库集群默认情况下允许写入操作。建议您将数据库集群设为只读,方法是将 read_only 参数设置为 1 并重启该集群。

  3. 对暂存环境进行更改。

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

    有关修改数据库集群的信息,请参阅修改 Amazon Aurora 数据库集群

  4. 测试您的暂存环境。

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

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

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

    下图显示了切换后的数据库集群。

    
            切换 Amazon Aurora 蓝绿部署后的数据库集群和数据库实例

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

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

    • 绿色环境数据库集群 auroradb-green-abc123 成为名为 auroradb 的生产数据库集群。

    • 名为 auroradb-instance1-green-abc123 的绿色环境数据库实例成为生产数据库实例 auroradb-instance1

    • 名为 auroradb-instance2-green-abc123 的绿色环境数据库实例成为生产数据库实例 auroradb-instance2

    • 名为 auroradb-instance3-green-abc123 的绿色环境数据库实例成为生产数据库实例 auroradb-instance3

    • 名为 auroradb 的蓝色环境数据库集群成为 auroradb-old1

    • 名为 auroradb-instance1 的蓝色环境数据库实例成为 auroradb-instance1-old1

    • 名为 auroradb-instance2 的蓝色环境数据库实例成为 auroradb-instance2-old1

    • 名为 auroradb-instance3 的蓝色环境数据库实例成为 auroradb-instance3-old1

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

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

授权访问蓝绿部署操作

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

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

  • rds:AddTagsToResource

  • rds:CreateDBCluster

  • rds:CreateDBInstance

  • rds:CreateDBClusterEndpoint

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

  • rds:ModifyDBCluster

  • rds:PromoteReadReplicaDBCluster

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

  • rds:DeleteDBCluster

  • rds:DeleteDBInstance

  • rds:DeleteDBClusterEndpoint

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

蓝绿部署注意事项

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

资源 ID 与数据库集群 ID 是分开的:


        创建蓝绿部署

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

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

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

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

  • 如果您将数据库活动流用于蓝色环境中的资源,请调整您的应用程序以在切换后监视新流的数据库事件。有关更多信息,请参阅 Aurora 中的数据库活动流

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

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

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

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

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

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

  • Amazon Aurora 通过在蓝色环境中克隆底层 Aurora 存储卷来创建绿色环境。绿色集群卷仅存储对绿色环境所做的增量更改。如果您删除蓝色环境中的数据库集群,则绿色环境中底层 Aurora 存储卷的大小增长到完全大小。有关更多信息,请参阅 克隆 Amazon Aurora 数据库集群卷

  • 当您在蓝绿部署的绿色环境中向数据库集群添加数据库实例时,当您切换时,新的数据库实例不会替换蓝色环境中的数据库实例。但是,新的数据库实例保留在数据库集群中,并成为新的生产环境中的数据库实例。

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

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

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

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

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

蓝绿部署的最佳实践

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

一般最佳实践

  • 切换之前,在绿色环境中全面测试Aurora 数据库集群

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

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

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

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

  • 为两个环境中的所有连接使用集群端点、读取器端点或自定义端点。请勿使用带有静态或排除列表的实例端点或自定义端点。

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

Aurora PostgreSQL 最佳实践

  • 监控 Aurora PostgreSQL 逻辑复制直写缓存,并在必要时对缓存缓冲区进行调整。有关更多信息,请参阅 管理 Aurora PostgreSQL 逻辑复制直写缓存

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

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

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

区域和版本可用性

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

蓝绿部署的限制

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

蓝绿部署的一般限制

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

  • 不支持将 Aurora MySQL 版本 2.08 和 2.09 作为升级源版本或目标版本。

  • 您无法停止和启动属于蓝绿部署一部分的集群。

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

  • 对于 Aurora MySQL,源数据库集群不能包含任何名为 tmp 的数据库。具有此名称的数据库将不会复制到绿色环境中。

  • 对于 Aurora PostgreSQL除非在蓝色数据库集群上将 rds.logically_replicate_unlogged_tables 参数设置为 1,否则未记录的表不会复制到绿色环境中。我们建议您在创建蓝绿部署后不要修改此参数值,以免未记录的表上可能出现复制错误

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

  • 在切换期间,蓝色和绿色环境无法与 Amazon Redshift 进行零 ETL 集成。您必须先删除集成,接着切换,然后重新创建集成。

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

  • 蓝色数据库集群上定义的任何 Aurora 自动扩缩策略不会复制到绿色环境。

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

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

    • Amazon RDS 代理

    • 跨区域只读副本

    • Aurora Serverless v1 数据库集群

    • 属于 Aurora Global Database 的数据库集群

    • 适用于 Aurora PostgreSQL 的 Babelfish

    • Amazon CloudFormation

蓝绿部署的 PostgreSQL 扩展限制

以下限制适用于 PostgreSQL 扩展:

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

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

  • 在所有绿色数据库上,apg_plan_mgmt 扩展必须将 apg_plan_mgmt.capture_plan_baselines 参数设置为 off,以免在蓝色环境中捕获相同的计划时发生主键冲突。有关更多信息,请参阅 Aurora PostgreSQL 查询计划管理概览

    如果要在 Aurora 副本中捕获执行计划,则必须在调用 apg_plan_mgmt.create_replica_plan_capture 函数时提供蓝色数据库集群端点。这样可以确保计划捕获在切换后继续进行。有关更多信息,请参阅 在副本中捕获 Aurora PostgreSQL 执行计划

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

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

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

蓝绿部署的更改限制

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

  • 您无法将未加密的数据库集群更改为加密的数据库集群

  • 您无法将加密的数据库集群更改为未加密的数据库集群

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

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

  • 如果蓝色环境包含任何 Aurora 自动扩缩策略,则这些策略不会复制到绿色环境。您必须手动将策略重新添加到绿色环境中。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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