零停机数据库大版本升级最佳实践

本文介绍如何以零停机的方式对RDS PostgreSQL数据库进行大版本升级。

升级流程

  1. 升级前检查

  2. 创建零停机升级任务

  3. 切换到高版本实例

不同升级阶段对实例的影响

升级阶段

影响

开始大版本升级

禁止进行任何DDL操作。

创建复制槽和发布

  • 禁止进行任何DDL操作。

  • 出现WAL日志堆积。

订阅端启动并建立逻辑复制关系

  • 禁止进行任何DDL操作。

  • WAL日志开始被消费,不再堆积。

  • 逻辑复制将产生一定的资源负载(与数据库数量及流量密切相关)。

开始切换

  • 禁止进行任何DDL操作。

  • 逻辑复制将产生一定的资源负载(与数据库数量及流量密切相关)。

  • 实例只读(只读时间与Sequence数量相关)。

完成切换(升级完成)

  • 逻辑复制槽被删除,逻辑复制所产生的资源负载被消除。

  • 实例恢复正常读写。

升级任务开始后,在升级历史页签,单击目标升级任务升级日志列的查看信息,即可查看详细的升级过程。

步骤一:升级前检查

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。

  2. 在左侧导航栏单击大版本升级

    说明

    如果左侧导航栏中没有大版本升级,请检查RDS PostgreSQL实例版本及配置,具体请参见前提条件

  3. 升级检查页签中,单击创建升级检查报告

  4. 择选升级版本,且升级模式选择零停机后,单击确定

    此时,实例状态变为维护实例中,待升级检查完成后,实例状态会变为运行中

    当升级检查报告结果为成功警告时,可以进行后续的大版本升级步骤;若结果为失败,则需单击查看信息,根据报告内容修复异常检查项后,再次进行升级前检查。常见的报错及原因请参见解读RDS PostgreSQL大版本升级检查报告

    重要
    • 为确保升级顺利完成,当升级检查报告的检查结果为警告时,建议根据报告内容修复异常检查项后,再次进行升级前检查,直至检查结果为成功

    • 升级检查成功后,如果在主实例中创建了插件,需重新执行检查。

步骤二:升级大版本

  1. 单击升级实例页签,阅读警告内容,然后选择升级版本,并单击创建升级任务

  2. 在弹出的窗口中,阅读提示内容,然后单击确定

  3. 创建大版本升级任务区域,选择升级模式零停机

  4. 单击立即创建

    当实例状态变为迁移中时,表示升级任务已正式启动。

    升级所需时间与实例中的数据库对象数量密切相关,数据库对象数量越多,升级所需时间越长。在进行大版本升级时,您可以在任务中心查看升级进度。

    重要
    • 升级任务创建后不支持修改或删除

    • 原实例状态为迁移中时,该实例不支持修改参数、重启、释放等运维操作。

监控实例负载

在升级过程中,您可以监控实例的负载情况和磁盘使用率,以了解实例的性能状态。

  • WAL日志堆积期间,实例的磁盘使用率会暂时上升。建立逻辑复制后,磁盘占用将会降低。

  • 在逻辑复制阶段,流量和数据库数量会对源实例的负载产生影响。可以通过观察各类资源下wal_sender的资源占用率来评估逻辑复制的影响。

步骤三:切换到高版本

  1. 验证高版本实例。

    当实例状态将从迁移中转变为迁出数据中时,表示逻辑复制已搭建完成,创建升级任务的过程将结束,您可以验证高版本实例的数据。

    进入升级历史页签,使用目标升级记录的高版本验证地址连接至高版本实例,以验证升级后的数据。

    说明

    高版本实例为只读模式,无法进行写入操作。

    image

  2. 切换到高版本实例。

    确定高版本实例的数据符合预期后,且升级结果同步中时,单击升级日志列的切换,将业务切换到高版本实例。

    image

    说明
    • 如果升级结果为其他状态,请参见升级结果说明进行处理。

    • 如果您决定放弃本次升级,可以单击升级日志列的取消。这将删除逻辑复制槽,取消逻辑复制对源实例的影响,并允许其执行DDL操作。

  3. 切换弹窗中设置容忍停写时间(单位:秒),并单击确定

    升级结果变为只读时,表示正在进行切换,此时实例状态为迁移中时。在大版本升级升级历史页签,单击升级日志列的中断按钮,取消此次切换操作。

    说明

    可以通过在切换时设置容忍停写时间,主动等待复制延迟消除,保障数据一致性。在此过程中,升级结果将变为只读。如果超出此时间,则系统将返回到同步中状态,并解除只读限制。

  4. 查看切换结果。

    升级结果变为成功时,表示切换成功,当实例状态为运行中时。

    在实例基本信息页,可以查看实例当前的版本信息。

    说明

    升级完成后,在升级历史页签,单击目标升级任务升级日志列的查看信息,即可查看升级过程中实例的只读时间及详细的升级过程。其中只读时间为切换时间切换完成时间之间的时段,此时间段不包括因DNS缓存未刷新而导致无法连接的时间。

回滚

切换后,如需回滚至低版本实例,可通过切换前的最后一次低版本备份克隆新的实例,并将该实例的连接地址修改改为旧实例的连接地址,以实现回滚至低版本。

说明

切换前,系统会对低版本实例进行备份。

升级结果说明

升级过程中,升级历史页签的升级记录中,包含以下升级结果

升级结果

实例状态

含义

可执行动作

运行中

迁移中

升级任务正在运行。

无。

同步中

迁出数据中

逻辑复制状态正常。

  • 切换:切换到高版本实例。

  • 取消:放弃本次升级。

复制断开

迁出数据中

逻辑复制状态异常。

  • 查看升级日志确定复制异常原因。

  • 取消:放弃本次升级。

只读

迁移中

正在切换,实例为只读模式,并且正在同步Sequence。

中断:取消此次切换操作。

切换

迁移中

Sequence同步已完成,现正进行收尾工作。

无。

取消

运行中

升级任务取消。

无。

成功

运行中

升级任务成功。

无。

相关文档