资讯中心

新功能 在 Amazon Aurora PostgreSQL 和 Amazon RDS for

2026-01-27 14:21:26



Amazon RDS 和 Amazon Aurora 现已全面支持蓝绿部署

关键要点

蓝绿部署 允许在一个独立且完全托管的环境中测试数据库更新,以确保在生产中获得最大的可用性与安全性。在进行版本升级或关键性参数变更时,蓝绿部署能够提供最小的停机时间和无缝的切换过程。用户可通过几个简单的步骤创建一个蓝绿环境,大大减少对业务的影响。

更新数据库如重大升级、实例扩展和参数设置更改往往面临挑战,尤其是在确保最小停机时间和不影响业务的前提下。尽管进行详尽的测试,但直接在生产环境中进行更改并不总是安全或高效。这可能导致在操作期间的停机时间延长。相对而言,创建一个与生产环境相似的暂存环境,通过稳定的同步机制进行低停机切换的方式显然更加安全和高效,但其实施复杂度较高。

例如,为了测试重大版本升级,Amazon Aurora 和 Amazon RDS 提供了一键式的原地重大版本升级。尽管如此,客户倾向于先在暂存环境中测试更改,然后再将更改推送到生产环境。为了支持用户自助管理自己的暂存环境,Amazon Aurora 和 Amazon RDS 提供了数据库克隆和可提升的只读副本功能。但是,创建暂存环境时,需要仔细安排设置,以确保正确复制生产设置到新数据库。由于这一任务的复杂性,用户可能会选择延迟数据库升级,从而损失因升级所带来的安全性、性能和功能好处。

为了简化大规模版本升级的暂存环境创建过程,我们很高兴宣布 Amazon RDS 对 Amazon Aurora PostgreSQLCompatible 版 和 Amazon RDS for PostgreSQL 在 1121 及更高版本、1216 及更高版本、1312 及更高版本、149 及更高版本、154 及更高版本的所有适用 AWS 区域和 AWS GovCloud美国区域实现了蓝绿部署的全面可用性。

只需几次点击,即可创建一个蓝绿部署,创建一个全托管的暂存环境绿色,该环境与生产环境蓝色相似。暂存环境克隆您生产环境的主数据库和同一区域的只读副本。蓝绿部署使用 PostgreSQL 社区提供的逻辑复制机制保持这两个环境的数据同步。

在最快一分钟内,您就可以将暂存环境提升为新的生产环境,并且不会丢失数据。在切换期间,蓝绿部署会在两个环境上阻止写入,以确保绿色环境与生产数据库蓝色完全同步。蓝绿部署会将生产流量重定向到新提升的暂存环境,整个过程无需更改代码来管理您的端点。

在本篇中,我们将通过一个示例演示如何创建一个蓝绿部署。同时,我们还将展示如何利用蓝绿部署以最少停机时间执行重大版本升级,并描述切换过程。最后,我们将讨论使用蓝绿部署的最佳实践。

解决方案概述

蓝绿部署基于 PostgreSQL 逻辑复制。物理复制使用精确的块地址和逐字节复制,这会阻止在两个主要版本之间的复制。而逻辑复制则是根据复制标识通常是主键复制表及其更改,从而实现我们在两个支持的 PostgreSQL 系统之间复制数据的目的。

前提条件

要开始使用蓝绿部署,您需要 启用逻辑复制 并进行一次性原地小版本升级,升级到支持蓝绿部署的小版本:

bashaws rds createdbclusterparametergroup dbclusterparametergroupname pg14bluegreen dbparametergroupfamily aurorapostgresql14 description 适用于 Aurora PG 14 的逻辑复制设置的参数组

aws rds modifydbclusterparametergroup dbclusterparametergroupname pg14bluegreen parameters ParameterName=rdslogicalreplicationParameterValue=1ApplyMethod=pendingreboot

必须指出的是,除了启用逻辑复制外,根据您的数据库工作负载,您还需要调整以下参数,这些将在本帖的最佳实践部分进一步讨论:

maxreplicationslotsmaxwalsendermaxlogicalreplicationworkermaxworkerprocesses

您还可以直接在 AWS 管理控制台 中修改参数组。有关更多信息,请参见 与 DB 参数组协作。

如果您向现有的 Amazon Aurora 集群添加此参数,则需要重启数据库以使设置生效。我们建议您在进行原地小版本升级时更改这些参数,以避免对生产数据库进行多次重启。例如,如果您有一个名为 bluegreeninst01 的 Amazon Aurora PostgreSQL 兼容实例,您可以使用以下命令重启它:

bashaws rds rebootdbinstance dbinstanceidentifier bluegreeninst01 region {REGION}

启动绿色集群

您可以通过以下命令创建一个绿色集群,其中源是生产数据库的 Amazon 资源名称ARN:

bashaws rds createbluegreendeployment bluegreendeploymentname mybluegreendeployment source arnawsrds{REGION}{ACCOUNTID}clusterbluegreencluster

创建完成后,您将拥有一个准备好进行测试和验证的暂存环境,以便在提升为新的生产环境之前进行确认。

有关逐步指南,请参考 在 Amazon Aurora 和 Amazon RDS 中实现完全托管的蓝绿部署。

使用蓝绿部署执行重大版本升级

历史上,您有几种选项执行重大版本升级:

原地升级 这涉及简单的一键管理工作流程。通常的升级过程大约需要 1015 分钟,但具体时间取决于数据库对象的数量表、架构、序列等。手动创建暂存环境 使用 原生逻辑复制 或 AWS 数据库迁移服务AWS DMS手动创建的暂存环境可以提供更高程度的控制和更低的停机时间,但需投入大量的规划和协调。

有关这些选项的更多信息,请参考 升级您的 Amazon RDS for PostgreSQL 或 Amazon Aurora PostgreSQL 数据库,第 1 部分:比较升级方法。

借助蓝绿部署,您现在有了一种简单且完全托管的重大版本升级执行方式。在部署过程中,您可以根据需要在新重大版本上创建绿色集群,或者在准备好绿色集群后手动执行原地升级。有关在绿色集群上执行原地升级的详细指南,参见 Amazon RDS for PostgreSQL 或 Amazon Aurora PostgreSQL。

如需在部署过程中自动升级绿色集群,您需要在 Aurora 中指定其他参数,例如 targetengineversion 和 targetdbclusterparametergroupname,如下示例代码所示。请确保创建名为 pg15bluegreen 的新参数组,并设置适用于将来生产集群所需的自定义设置。

bashaws rds createbluegreendeployment bluegreendeploymentname mybluegreendeployment source arnawsrds{REGION}{ACCOUNTID}dbbluegreeninst01 targetengineversion 153 targetdbclusterparametergroupname pg15bluegreen

以下图显示了执行重大版本升级的高层步骤:

工作流步骤如下:

现有的生产集群作为当前的蓝色主集群。创建蓝绿部署时,它将当前的生产环境蓝色进行镜像复制,形成未来的绿色集群。Amazon RDS 在绿色集群上执行重大版本升级。在绿色集群上执行原地重大版本升级的过程中,蓝色集群不会受到影响。虽然在绿色环境升级过程中复制会落后,但在重大版本升级完成后它会赶上。然后,绿色集群提升为新的主集群。

执行切换

在绿色集群完成升级且复制完全同步后,您可以切换到绿色集群新的生产集群。Amazon RDS 会执行多项检查,以确保切换过程的安全:

检查实例健康状况验证蓝色和绿色集群之间的复制是否同步检查蓝色集群是否进行了 DDL 活动如有,此步骤会阻止切换检查大型对象如有,此步骤会阻止切换确保蓝色集群上没有长时间运行的写操作或长时间运行的 DDL 操作确保蓝色主数据库实例不是外部复制的目标,以避免在切换期间对蓝色主数据库实例进行写入

所有检查通过后,Amazon RDS 将执行以下操作:

暂停对蓝色和绿色集群的写入,并断开两个集群的连接。在蓝色集群切换到绿色集群之前,Amazon RDS 确保绿色集群与蓝色集群的完全同步。Amazon RDS 在绿色环境中递增序列值,以与蓝色环境中的值匹配。绿色集群提升为新的主集群。Amazon RDS 将绿色环境中的数据库实例重命名为与蓝色环境中的对应数据库实例匹配。同时,Amazon RDS 将蓝色集群重命名为后缀old{n}。例如,如果您的旧集群名为 mydb,则绿色集群将命名为 mydb,而旧的蓝色数据库将命名为 mydbold1。

接下来,我们打开两个集群的连接,新的绿色集群新主集群开始接受写入,而蓝色集群旧主集群将继续提供只读查询,直到其重启,避免出现脑裂splitbrain现象。

以下是执行切换的示例命令:

bashBLUEGREENDEPLOYMENTIDENTIFIER=(aws rds describebluegreendeployments filters Name=bluegreendeploymentnameValues=mybluegreendeployment query BlueGreenDeployments[]BlueGreenDeploymentIdentifieroutput text)aws rds switchoverbluegreendeployment bluegreendeploymentidentifier mybluegreendeployment switchovertimeout 60

如果切换过程所需的时间超过指定的 switchovertimeout,则任何更改都会被回滚,对两个环境均不作更改。

最佳实践

在本节中,我们将讨论使用蓝绿部署的最佳实践及在管理 PostgreSQL 逻辑复制的当前限制时用户的体验。

主键要求

在 PostgreSQL 逻辑复制中,蓝绿部署根据复制标识通常是主键复制表数据。如果有数据表没有主键,任何针对该表的插入操作将会被复制。然而,对该表的更新和删除将受到如下消息的阻止:

ERROR cannot update table withoutpkey because it does not have a replica identity and publishes updatesHINT To enable updating the table set REPLICA IDENTITY using ALTER TABLE

确保每个表都有主键或唯一键作为复制标识至关重要。

一元云网页版入口

例如,假设您有一个没有主键的表:

sqld sample Table publicsample Column Type Collation Nullable Default a integer b integer c integer

您有几种选择。第一种选择是创建唯一索引,并使用 UNIQUE 索引作为复制标识,或者使用 REPLICA IDENTITY FULL。以下是使用 UNIQUE 索引作为复制标识的示例:

sqlALTER TABLE sample ALTER COLUMN c SET NOT NULLCREATE unique INDEX indexc on sample(c)ALTER TABLE sample REPLICA IDENTITY USING INDEX indexc

以下是使用 REPLICA IDENTITY FULL 的示例:

sqlALTER TABLE sample REPLICA IDENTITY FULL

在 REPLICA IDENTITY FULL 的情况下,所有列值都会写入事务日志WAL。由于在 WAL 中增加了额外内容,可能会导致更高的资源消耗,因此不建议在频繁更新的表上使用。

在蓝绿部署的情况下,确保所有表在创建绿色集群之前都有复制标识至关重要。在发布此功能时,您将在绿色集群创建后无法对蓝绿数据库进行任何 DDL 更改。

处理模式更改DDL

根据当前 PostgreSQL 逻辑复制的限制,我们不支持在绿色集群上进行模式更改“数据定义语言”或“DDL”或复制 DDL 更改。然而,可以在蓝色集群上执行模式更改,但会得到如下消息:

sqlpostgres=gt create table sample (id serial)WARNING command will not be replicated to the green instance CREATE TABLECREATE TABLE

新功能  在 Amazon Aurora PostgreSQL 和 Amazon RDS for

在内部,我们跟踪应用于蓝色集群的任何 DDL 更改。任何 DDL 活动将记录在 PostgreSQL 日志中,并生成 RDS 事件通知。Amazon RDS 控制台将报告复制状态为“复制降级”。此时,您可以立即采取行动以删除或重新创建蓝绿部署。在切换操作期间,如果蓝色集群进行了任何 DDL 活动,Amazon RDS 将执行检查并防止切换到绿色集群。这个防护措施确保数据一致性,防止数据丢失。

值得注意的是,即使您创建了一个表并随后将其删除,该操作仍会被标记为 DDL 活动,从而阻止您执行切换。如果发生这种情况,建议创建一个新的绿色集群。

以下是检查绿色集群创建后蓝色集群是否进行了 DDL 活动的两种方法:

使用 rdstools 扩展:

sqlpostgres=gt create extension rdstoolsCREATE EXTENSIONpostgres=gt select from rdstoolsbluegreengetstatus(ddl)

如果返回 fileexists 为 t,则表示检测到 DDL 活动。

在 Amazon RDS 控制台中的 日志与事件 下检查最近事件。您希望看到类似以下的事件:

数据定义语言DDL更改不支持蓝绿部署。此类更改不会从蓝色环境复制到绿色环境,并且切换将被阻止。您的绿色数据库现在具有 REPLICATIONDEGRADED 状态

处理大量数据库和表格

正如早前讨论的,蓝绿部署是基于逻辑复制的。逻辑复制使用发布和订阅模型,一个或多个订阅者订阅发布节点中的一个或多个出版物。在一个 RDS 集群中,您可以创建多个数据库。PostgreSQL 的逻辑复制是基于每个数据库的,这意味着每