Amazon RDS 蓝绿部署的限制和注意事项
要在 Amazon RDS 中进行蓝绿部署,需要仔细考虑复制插槽、资源管理、实例大小以及对数据库性能的潜在影响等因素。以下各节提供的指导有助于您优化部署策略,以确保尽可能地减少停机时间、实现无缝过渡并有效地管理数据库环境。
蓝绿部署的限制
以下限制适用于蓝绿部署。
蓝绿部署的一般限制
以下一般限制适用于蓝绿部署:
- 
          蓝绿部署不支持使用 Amazon Secrets Manager 管理主用户密码。 
- 如果在蓝色数据库上启用了专用日志卷(DLV,Dedicated Log Volume),则必须在所有数据库实例(包括只读副本)上启用专用日志卷。 
- 
        在切换期间,蓝色和绿色环境无法与 Amazon Redshift 进行零 ETL 集成。您必须先删除集成,接着切换,然后重新创建集成。 
- 
        创建蓝绿部署时,必须在绿色环境中禁用事件调度器( event_scheduler参数)。这样可以防止在绿色环境中生成事件并导致不一致。
- 
          您无法将未加密的数据库实例更改为加密的数据库实例。此外,无法将加密的数据库实例更改为未加密的数据库实例。 
- 
          无法将蓝色数据库实例更改为比其相应的绿色数据库实例更高的引擎版本。 
- 
          蓝色环境和绿色环境中的资源必须位于同一个 Amazon Web Services 账户中。 
- 
        以下功能不支持蓝绿部署: - 
            Amazon RDS 代理 
- 
            级联只读副本 
- 
            跨区域只读副本 
- 
            Amazon CloudFormation 
- 
            多可用区数据库集群部署 多可用区数据库实例部署支持蓝绿部署。有关多可用区部署的更多信息,请参阅配置和管理 Amazon RDS 的多可用区部署。 
 
- 
            
RDS for MySQL 蓝绿部署的限制
以下限制适用于 RDS for MySQL 蓝绿部署:
- 
          蓝色数据库实例不能是外部二进制日志副本。 
- 
          如果源数据库与自定义选项组相关联,则在创建蓝绿部署时无法指定主要版本升级。 在这种情况下,您可以创建蓝绿部署,而无需指定主要版本升级。然后,您可以在绿色环境中升级数据库。有关更多信息,请参阅 升级数据库实例引擎版本。 
- 
          蓝绿部署不支持适用于 MySQL 的 Amazon JDBC 驱动程序。有关更多信息,请参阅 GitHub 上的 Known Limitations 。 
采用物理复制的 RDS for PostgreSQL 蓝绿部署的限制
以下限制适用于使用物理复制的 RDS for PostgreSQL 蓝绿部署。有关蓝绿部署何时使用物理复制而不是逻辑复制的说明,请参阅 。
- 
            创建绿色环境后,您无法执行手动主要版本升级。 
- 
            使用物理复制的蓝绿部署不支持绿色环境中的架构更改,因为它严格来说是只读的。 
- 
            蓝色数据库实例不能是逻辑源(发布者)或副本(订阅用户)。 
RDS for PostgreSQL 蓝绿部署的限制
以下限制适用于使用逻辑复制的 RDS for PostgreSQL 蓝绿部署。有关蓝绿部署何时使用逻辑复制而不是物理复制的说明,请参阅 。
- 
          Unlogged (未记录的)表不会复制到绿色环境。 
- 
          蓝色数据库实例不能是逻辑源(发布者)或副本(订阅者)。 
- 
            如果将蓝色数据库实例配置为外部数据包装器(FDW)扩展的外部服务器,则必须使用实例端点名称而不是 IP 地址。这会让配置在切换后仍能正常运行。 
- 
            在蓝绿部署中,每个数据库都需要一个逻辑复制插槽。随着数据库数量增长,资源开销会增加,并可能导致复制滞后,尤其是在数据库实例没有充分扩展的情况下。影响取决于数据库工作负载和连接数等因素。要缓解这种情况,可以考虑纵向扩展数据库实例类,或减少源实例上的数据库数量。 
- 
            绿色环境中的逻辑复制 apply process 是单线程的。如果蓝色环境生成大量写入流量,则绿色环境可能无法跟上。这可能会导致复制滞后或失败,特别是对于产生持续高写入吞吐量的工作负载。确保彻底测试工作负载。对于需要主要版本升级和处理大量写入工作负载的场景,可以考虑使用其它方法,例如使用 Amazon Database Migration Service(Amazon DMS)。 
- 
            在执行 RDS for PostgreSQL 的蓝绿部署期间,不支持在分区表上创建新分区。创建新分区涉及数据定义语言(DDL)操作(例如 CREATE TABLE),这些操作不会从蓝色环境复制到绿色环境。但是,现有的分区表及其数据将复制到绿色环境。
- 
            以下限制适用于 PostgreSQL 扩展: - 
                创建蓝绿部署时,必须在蓝色环境中禁用 pg_partman扩展。该扩展将执行CREATE TABLE等 DDL 操作,这会中断从蓝色环境到绿色环境的逻辑复制。
- 
                创建蓝绿部署后, pg_cron扩展必须在所有绿色数据库上保持禁用状态。该扩展具有以超级用户身份运行并绕过绿色环境只读设置的后台工作进程,这可能会导致复制冲突。
- 
                创建蓝绿部署时,必须在蓝色环境中禁用 pglogical和pgactive扩展。将绿色环境切换为新的生产环境后,您可以重新启用这些扩展。此外,蓝色数据库不能是外部实例的逻辑订阅者。
- 
                如果您使用的是 pgAudit扩展,则它必须保留在蓝色和绿色数据库实例的自定义数据库参数组上的共享库(shared_preload_libraries)中。有关更多信息,请参阅 设置 pgAudit 扩展。
 
- 
                
蓝绿部署的特定于逻辑复制的限制
PostgreSQL 有某些与逻辑复制相关的限制,这会导致创建 RDS for PostgreSQL 数据库实例的蓝绿部署存在限制。
下表描述了适用于 RDS for PostgreSQL 的蓝绿部署的逻辑复制限制。有关更多信息,请参阅 PostgreSQL 逻辑复制文档中的限制
| 限制 | 说明 | 
|---|---|
| 数据定义语言(DDL)语句,(例如 CREATE TABLE和CREATE SCHEMA)不会从蓝色环境复制到绿色环境。 | 如果 Amazon RDS 在蓝色环境中检测到 DDL 更改,则您的绿色数据库将进入复制已降级状态。必须删除蓝绿部署和所有绿色数据库,然后重新创建。 | 
| 数据控制语言(DCL)语句(例如 GRANT和REVOKE)不会从蓝色环境复制到绿色环境。 | 如果 Amazon RDS PostgreSQL 检测到有人试图在蓝色环境中执行 DCL 语句,您将看到一条警告消息。由于这是蓝绿部署过程的限制,因此没有可用于更改此行为的配置或 API。 | 
| 对序列对象执行的 NEXTVAL操作在蓝色环境和绿色环境之间不同步。 | 在切换期间,Amazon RDS 会增加绿色环境中的序列值,以匹配蓝色环境中的那些序列值。如果您有成千上万的序列,这可能会延迟切换。 | 
| 蓝色环境中的大型对象不会复制到绿色环境中。这既包括现有的大型对象,也包括在蓝绿部署过程中任何新创建或修改的大型对象。 | 如果 Amazon RDS 检测到在蓝色环境中创建或修改了存储在  | 
| 在绿色环境中,实体化视图不会自动刷新。 | 蓝色环境中刷新的实体化视图不会在绿色环境中刷新。切换后,可以使用 REFRESH MATERIALIZED VIEW | 
| 不允许对没有主键的表执行 UPDATE 和 DELETE 操作。 | 在创建蓝绿部署之前,请确保所有表都有主键或使用  | 
蓝绿部署注意事项
Amazon RDS 使用每种资源的 DbiResourceId 跟踪蓝绿部署中的资源。此资源 ID 是资源的 Amazon Web Services 区域唯一的不可变标识符。
资源 ID 与数据库实例 ID 是分开的。每一个都列在 RDS 控制台的数据库配置中。
当您切换蓝绿部署时,资源的名称(实例 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 策略中使用资源 ID,请确保在必要时添加新转换的资源的资源 ID。有关更多信息,请参阅 Amazon RDS 的 Identity and Access Management。 
- 
          如果您有与数据库实例关联的 IAM 角色,请务必在切换后重新关联它们。附加的角色不会自动复制到绿色环境。 
- 
          如果您使用 IAM 数据库身份验证对数据库实例进行身份验证,请确保用于数据库访问的 IAM 策略同时包含在策略的 Resource元素下方列出的蓝色和绿色数据库。这是在切换后连接到绿色数据库所必需的。有关更多信息,请参阅 创建和使用适用于 IAM 数据库访问的 IAM 策略。
- 
          如果您在蓝绿部署中使用 Amazon Backup 管理资源的自动备份,请在切换后调整 Amazon Backup 使用的资源 ID。有关更多信息,请参阅 使用 Amazon Backup 管理 Amazon RDS 的自动备份。 
- 
          如果您想为属于蓝绿部署的数据库实例还原手动或自动数据库快照,请确保通过检查快照拍摄时间来还原正确的数据库快照。有关更多信息,请参阅 还原到数据库实例。 
- 
          如果您想描述以前的蓝色环境数据库实例自动备份或将其还原到某个时间点,请使用资源 ID 进行操作。 由于数据库实例的名称在切换期间会发生变化,因此您不能将其以前的名称用于 DescribeDBInstanceAutomatedBackups或RestoreDBInstanceToPointInTime操作。有关更多信息,请参阅 将 Amazon RDS 的数据库实例还原到指定时间。 
- 
          当您在蓝绿部署的绿色环境中向数据库实例添加只读副本时,当您切换时,新的只读副本不会替换蓝色环境中的只读副本。但是,新的只读副本将在切换后保留在新的生产环境中。 
- 
          切换后,Amazon Database Migration Service(Amazon DMS)复制任务无法恢复,因为蓝色环境中的检查点在绿色环境中无效。您必须使用新的检查点重新创建 DMS 任务后才能继续复制。 
- 
          当您在蓝绿部署的绿色环境中删除数据库实例时,您无法创建新的数据库实例来替换蓝绿部署中的该实例。 如果您创建一个与已删除的数据库实例具有相同名称和相同 Amazon 资源名称(ARN)的新数据库实例,则它具有不同的 DbiResourceId,因此它不属于绿色环境。如果您在绿色环境中删除数据库实例,则会导致以下行为: - 
              如果蓝色环境中存在同名的数据库实例,则不会将其切换到绿色环境中的数据库实例。不会通过将 -old添加到数据库实例名称来重命名此数据库实例。n
- 
              切换后,任何指向蓝色环境中数据库实例的应用程序都将继续使用相同的数据库实例。 
 相同的行为适用于数据库实例和只读副本。 
-