本文介绍如何通过蓝绿部署的模式升级RDS PostgreSQL数据库大版本。
前提条件
背景信息
在蓝绿部署模式下,原实例恢复到一个新实例,并使用pg_upgrade将其升级至目标版本。割接场景下,自动切换原连接地址到新实例。
RDS PostgreSQL控制台还支持通过零停机模式和本地升级模式升级数据库大版本,不同模式的对比请参见大版本升级方案简介。
升级费用
通过蓝绿部署模式升级大版本,系统会在原实例的基础上,新建一个实例,在升级完成后:
- 原实例和新实例将同时产生费用。 
- 原实例的费用和计费方式保持不变。 
- 新实例的计费方式相比于原实例可能会发生变化。因此在升级前,请确保账户余额大于等于100元。 - 原实例计费方式 - 新实例计费方式 - 包年包月/按量付费 - 按量付费 - Serverless - Serverless 
注意事项
- 业务影响:通过蓝绿部署(割接)进行升级时,在割接过程中,原实例将会被设置为只读,并会造成分钟级业务闪断,请在业务低峰期进行升级。如果选择不割接方式进行升级,则不受影响。 - 原实例只读时间的长短与数据库对象数量相关,实例数据库对象数越多,只读时间越长,当数据库对象数达到百万级别时,只读时间可能达到十分钟级甚至小时级。您可以使用 - SELECT count(1) FROM pg_class;命令查看数据库的对象数。
- 客户端感知的闪断时长取决于DNS缓存刷新时间。您可以尝试切换虚拟交换机,通过业务闪断时长来评估客户端的DNS缓存刷新时间。 
- 升级过程的时间长短与实例的数据库对象数量相关,数据库对象数越多,升级时间越长。大版本升级时您可以在任务中心查看任务进度。 
- 对于蓝绿部署,在割接后,如果不希望原实例被设置为只读,请在升级后将参数 - rds_force_trans_ro_non_sup设置为- off,详情请参见设置实例参数。
 
- 跨版本升级:RDS PostgreSQL 9.4和10高性能本地盘实例仅支持升级至云盘版实例,最高可直接升级至RDS PostgreSQL 14。如果需要升级至PostgreSQL 15或更高版本,请首先升级至中间版本(PostgreSQL 9.4可升级至10、11、12、13或14;PostgreSQL 10可升级至11、12、13或14),然后再进行PostgreSQL 15或更高版本的升级。 
- 复制槽(Replication Slots): - 当原实例中存在复制槽的发布端,升级会导致复制槽丢失。 
- 当原实例中存在复制槽的订阅端,升级可能出现复制槽抢占导致的数据不同步问题。解决方法请参见如何避免在升级过程中出现复制槽抢占导致的数据不同步问题。 
 
- 虚拟IP:对于蓝绿部署(割接),升级后新实例的虚拟IP(Virtual IP Address)会变更,请自行检查网络连通性,如防火墙配置。 - 虚拟IP变更影响:如果您在应用程序中配置了虚拟IP,则需要修改应用配置以指向新实例的虚拟IP。 
- 建议方案:为避免手动修改配置的复杂性,建议在应用程序中直接配置实例的连接地址,获取实例连接地址请参见查看或修改连接地址和端口。 
 
- 参数变化: - 如果原实例使用了新版本不支持的参数,在新版本中该参数会被自动删除。 
- 如果原实例的参数取值不在新版本对应参数取值的合法区间,则在新版本中,该参数将被设定为该版本参数模板的默认值。 
- 升级过程中,系统会暂时将 - statement_timeout的值修改为0,并在升级完成后恢复为原值。
 
- DTS任务:如果待升级的实例作为数据传输服务(DTS)的源实例或目标实例,则升级后需要重建DTS任务 。 
- 插件兼容性问题:进行大版本升级时,系统将自动更新至最新的内核小版本,可能会遇到插件兼容性问题。 
步骤一:升级前检查
- 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。 
- (可选)如果待升级的实例中创建了只读实例,需要将应用程序中配置的只读实例连接地址修改为主实例连接地址,并删除只读实例。 说明- 为保证业务稳定,建议在业务低峰期修改应用连接地址。 
- 在左侧导航栏单击大版本升级。 说明- 如果左侧导航栏中没有大版本升级,请检查RDS PostgreSQL实例版本及配置,具体请参见前提条件。 
- 在升级检查页签中,单击创建升级检查报告。 
- 择选升级版本,且升级模式选择蓝绿部署后,单击确定。 - 此时,实例状态变为维护实例中,待升级检查完成后,实例状态会变为运行中。 - 当升级检查报告结果为成功或警告时,可以进行后续的大版本升级步骤;若结果为失败,则需单击查看信息,根据报告内容修复异常检查项后,再次进行升级前检查。常见的报错及原因请参见解读RDS PostgreSQL大版本升级检查报告。 重要- 为确保升级顺利完成,当升级检查报告的检查结果为警告时,建议根据报告内容修复异常检查项后,再次进行升级前检查,直至检查结果为成功。 
- 升级检查成功后,如果在主实例中创建了插件,需重新执行检查。 
 
步骤二:升级大版本
- 单击升级实例页签,阅读警告内容,然后选择升级版本,并单击创建升级任务。 
- 在弹出的窗口中,阅读提示内容,然后单击确定。 
- 在创建大版本升级任务区域,升级模式为蓝绿部署,并配置对应升级参数(仅列举重点参数)。 - 配置 - 说明 - 存储类型 - 新实例存储类型仅支持ESSD云盘和高性能云盘。选择ESSD云盘时,支持切换性能等级。 
- 新实例的存储类型需和原实例保持一致。 说明- 不同性能级别的ESSD云盘最小容量不同,切换性能等级时,实例存储空间的最小值会根据所选性能等级自动调整,需确保新值满足要求。 
- 原实例为高性能本地盘时,新实例仅支持选择ESSD云盘。 
 
 - 目标主可用区 - 系统支持升级后将新的主备实例配置到其他可用区,请根据实际情况设置。 - 目标备可用区 - 目标主实例交换机 - 目标备实例交换机 - 割接配置 - 根据实际需求选择是否将流量切换到新版本实例上。 - 不割接:不自动切换。此选项一般用于正式升级之前测试当前业务在新版本中的兼容性。 
- 割接:自动切换。此选项一般用于在确认业务可以稳定运行在新版本之后执行正式升级。割接结束会自动连接到新实例,您无需更改应用程序里的数据库连接地址。 
 说明- 割接后无法回退,请谨慎选择。 
- 割接过程中,原实例将会被设置为只读,并会造成分钟级业务闪断,请在业务低峰期进行升级。如果选择不割接方式进行升级,则不受影响。 
- 建议第一次执行时选则不割接,应用层完全测试验证通过后,释放新实例并重复升级操作,选择割接开始正式升级。 
 - 存储空间 - 选择新版本实例的存储空间大小。 - 实例规格 - 选择新版本实例的规格。有关实例规格的更多详情,请参见主实例规格列表。 
- 单击立即创建。 - 当实例状态变为迁移中时,表示升级任务已正式启动。 - 升级所需时间与实例中的数据库对象数量密切相关,数据库对象数量越多,升级所需时间越长。在进行大版本升级时,您可以在任务中心查看升级进度。 重要- 升级任务创建后不支持修改或删除。 
- 原实例状态为迁移中时,该实例不支持修改参数、重启、释放等运维操作。 
- 如果创建任务时提示资源不足,请切换目标主实例可用区。 
 
- 查看升级结果。 - 当原实例和新实例的状态为运行中时,表示实例升级成功。 说明- 蓝绿部署(切割)模式,升级完成后流量自动切换到新实例(高版本)。 
- 蓝绿部署(不切割)模式,升级完成后流量不切换到新实例(高版本)。 
- 升级完成后,在升级历史页签,单击目标升级任务升级日志列的查看信息,即可查看升级过程中实例的只读时间及详细的升级过程。其中只读时间为割接时间和割接结束时间之间的时段,此时间段不包括因DNS缓存未刷新而导致无法连接的时间。 
- 对于蓝绿部署(不切割),系统同样会显示割接时间和割接结束时间,以便作为割接场景的参考和预估。 
 
后续操作
- 对于采用蓝绿部署(割接)的模式进行升级的实例,确认业务已在新实例中稳定运行后,请及时释放原实例。 - 同时,建议将新实例的计费方式转成包年包月,以获得更多的优惠。 说明- 如果您的原实例计费方式为包年包月且尚未到期,释放实例可能存在费用损失。具体退订规则请参见退款说明。 
- 如果您的原实例购买时使用了优惠,升级后新实例将不会继承此优惠,原实例退订请以实际退订页面为准。 
- 包年包月退款金额退款时间以实际退订账单为准,非实时到账。 
 
- (可选)新实例不包含只读实例,如果在升级前删除了只读实例,还需执行: - 在新实例上重新创建PostgreSQL只读实例。 
- 在应用程序中,将原只读实例连接地址(已在升级前修改为主实例连接地址)修改为新的只读实例连接地址。 
 
升级结果说明
升级过程中,升级历史页签的升级记录中,包含以下升级结果。
| 升级结果 | 实例状态 | 含义 | 可执行动作 | 
| 运行中 | 迁移中 | 升级任务正在运行。 | 无。 | 
| 成功 | 运行中 | 升级任务成功。 | 无。 | 
相关API
| API | 描述 | 
| RDS PostgreSQL实例大版本升级检查。 | |
| 查询RDS PostgreSQL实例大版本升级检查报告。 | |
| RDS PostgreSQL实例升级数据库大版本。 | |
| 查询RDS PostgreSQL实例大版本升级历史任务。 |