适用于 的 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 有关 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. 测试您的暂存环境。

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

  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:PromoteDBInstance

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

  • rds:DeleteDBInstance

蓝绿部署注意事项

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 policy 同时包含在策略的 Resource 元素下方列出的蓝色和绿色数据库。这是在切换后连接到绿色数据库所必需的。有关更多信息,请参阅创建和使用适用于 IAM 数据库访问的 IAM 策略

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

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

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

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

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

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

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

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

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

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

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

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

蓝绿部署的最佳实践

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

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

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

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

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

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

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

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

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

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

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

区域和版本可用性

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

蓝绿部署的限制

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

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

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

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

    • Amazon RDS 代理

    • 级联只读副本

    • 跨区域只读副本

    • Amazon CloudFormation

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

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

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

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

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

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

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

    • 在切换期间,蓝色主数据库实例不能成为外部复制的目标。

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

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