本文介绍如何升级RDS PostgreSQL数据库大版本,例如从PostgreSQL 10升级至11。
PostgreSQL社区每年发布一个大版本,社区对每个大版本支持5年,大版本通常带来功能、性能方面的革命性提升,而超过5年的数据库版本,由于社区不再提供支持,性能和安全的风险也将逐渐增加。
重要 大版本升级会保留原实例,并创建一个新版本的实例,新实例在创建中不收费,创建成功后将会
产生费用,计费方式为
按量付费。新实例暂不继承原实例优惠,请根据实际情况选择是否升级。
为了让您享受PostgreSQL新的大版本带来的功能、性能提升,同时降低升级风险,RDS PostgreSQL提供大版本升级功能,步骤如下:
- 创建升级检查报告
检查当前主实例是否支持大版本升级,并提供检查结果和检查报告,检查报告异常时不允许升级。
- 执行升级
说明 大版本升级可能会出现与现有应用的兼容性问题,因此建议先使用 不割接模式升级并进行业务测试。
- 指定PostgreSQL大版本进行升级,选择不割接创建一个新版本的测试实例进行业务测试及确保兼容性。
- 测试结束后,在原实例上再次执行大版本升级,选择割接创建一个新版本的实例用于升级后使用。
注意事项
- 升级大版本前需要满足以下前提条件:
- 升级大版本将会造成以下影响:
- 如果选择了割接方式升级,在割接过程中,原实例将会被设置为只读,并会造成分钟级业务闪断,请在业务低峰期进行升级。如果选择不割接方式进行升级,则不受影响。
说明
- 具体的闪断时长取决于数据量以及DNS缓存刷新时间。您可以尝试切换虚拟交换机,通过业务闪断时长来评估客户端的DNS缓存刷新时间。
- 升级过程的时间长短与实例的数据量相关。割接过程的时间长短,与数据量无关,仅受原数据库的数据定义数量影响,包括表定义、索引定义、视图定义、自定义函数、序列定义等。例如在实例中定义100张表、数据量为1 GB时的升级时长,与定义100张表、数据量为10 TB时的升级时长相同。
- 如果原实例使用了新版本不支持的参数,在新版本中该参数会被自动删除,如果在低版本的参数取值不在高版本对应参数的合法区间,在新版本中该参数会被置为高版本参数模板的默认值。
- 新实例不继承原实例的实例名称、标签、云监控报警规则以及备份数据。
- 如果待升级的实例作为数据传输服务(DTS)的源实例或目标实例,则升级后需要重建DTS任务。创建DTS任务详见DTS产品文档。
- 自建的只读节点和逻辑复制槽在升级后仍然保留在原实例下,不会自动转移到高版本实例,需要在升级后进行重建。
- 如果选择了割接方式升级,在割接过程中,原实例将会被设置为只读,并会造成分钟级业务闪断,请在业务低峰期进行升级。如果选择不割接方式进行升级,则不受影响。
- 当待升级的实例中创建了只读实例时,则无法直接进行升级,需要在升级前后进行以下操作:
- 将应用程序中配置的只读实例连接地址修改为主实例连接地址。
说明 为保证业务稳定,建议在业务低峰期修改应用连接地址。
- 删除只读实例。
- 升级大版本。
- 升级完成后,在新实例上重新创建PostgreSQL只读实例。
- 在应用程序中,将升级前修改的实例连接地址修改为新的只读实例连接地址。
- 将应用程序中配置的只读实例连接地址修改为主实例连接地址。
功能特点
- 支持跨版本升级:例如直接从PostgreSQL 10.0升级到PostgreSQL 13.0。
- 支持升级演练:通过不割接的方式,可以在不影响原实例的情况下,验证整个升级流程。
- 支持平滑升级:
- 无需修改应用:通过割接方式升级,您无需修改应用中已配置的数据库连接地址,割接结束会自动交换原实例与新实例的连接地址,应用将自动连接到新实例。
说明 通过 割接方式升级后,新实例的虚拟IP(Virtual IP Address)与原实例不同,如果您在应用程序中配置了虚拟IP,则需要修改应用,因此,建议您在应用程序中配置实例连接地址,如何获取实例连接地址,请参见 查看或修改连接地址和端口。
- 无需停机:升级时原实例无需停机,而是暂时变为只读状态(持续时长为分钟级),降低业务中断带来的风险。此外,由于是通过克隆实例进行升级,所以即使升级失败也不会影响原实例。
- 保留实例设置:升级后保留原实例的白名单、参数设置、插件(新版本不支持的插件和参数除外)。
- 升级后保留原实例的白名单、参数设置、插件(新版本不支持的插件和参数除外)。
- 加密实例升级大版本后仍为加密实例,加密Key保持不变。
- 无需修改应用:通过割接方式升级,您无需修改应用中已配置的数据库连接地址,割接结束会自动交换原实例与新实例的连接地址,应用将自动连接到新实例。
计费方式
升级大版本
- 如果待升级的实例中创建了只读实例,需在升级前执行以下步骤:
- 进入大版本升级页面。
- 在升级检查页签中,选择目标升级版本,然后单击创建升级检查报告,并等待数分钟。
说明
- 为确保升级能顺利完成,请确保升级检查报告的检查结果为成功时,再进行后续升级步骤。
- 升级检查成功后,如果对主实例执行了
CREATE EXTENSION
操作,需重新执行检查。
当升级检查报告的检查结果为失败时,可单击查看信息查看报告详细内容,常见的报错及原因请参见解读RDS PostgreSQL大版本升级检查报告。
- 单击升级实例页签,阅读警告内容,然后选择升级版本,并单击继续创建升级实例。
- 在弹出的窗口中确认注意事项,单击确定,并设置参数(以下仅列举重点参数):
配置 说明 存储类型 选择实例的存储类型。 大版本升级功能基于云盘快照,当前升级后支持选择的存储类型如下。- 当原实例为SSD云盘时,可选SSD云盘。
- 当原实例为ESSD云盘时,可选ESSD PL1云盘、ESSD PL2 云盘、ESSD PL3 云盘。
- 当原实例为本地SSD盘时,可选ESSD PL1云盘、ESSD PL2 云盘、ESSD PL3 云盘。
目标主可用区 系统支持升级后将新的主备实例配置到其他可用区。 目标备可用区 目标主实例交换机 目标备实例交换机 割接配置 系统将创建一个新实例进行数据迁移。请选择迁移后是否自动切换至新实例。 - 不割接:不自动切换。此选项一般用于正式升级之前测试当前业务在新版本中的兼容性。建议第一次执行时选择不割接,应用层完全测试验证通过后,释放实例并重复升级大版本操作,选择割接开始正式升级。
说明
- 迁移过程中,原实例的业务不会受到影响。
- 如需通过不割接升级实例,需在迁移完成后把应用程序中的数据库连接地址改为新实例的连接地址。如何查看连接地址,请参见查看或修改连接地址和端口。
- 割接:自动切换。您无需更改应用程序里的数据库连接地址,割接结束会自动连接到新实例。此选项一般用于在确认业务可以稳定运行在新版本之后执行正式升级。
说明
- 割接后无法回退,请谨慎选择。
- 切换过程中,原实例会被变为只读,业务无法写入,请务必在业务低峰期进行。
- 如果原实例中创建了只读实例,则无法选择割接。只能通过不割接升级实例,且原只读实例不会被克隆。升级完成后,您需要在新版本实例中另行创建PostgreSQL只读实例。
割接时间窗口 迁移完成后,业务切换至新实例的时间。 - 立刻:迁移完成后立即切换。
- 实例可运维时间:在可运维时间段内切换。
说明 仅当 割接配置为 割接时可选。统计信息收集模式 选择在哪个时间点对数据库执行统计信息收集。 - 割接前收集:可以保证业务稳定性。如果实例数据量太大可能会导致升级时间较久。
- 割接后收集:实例升级速度较快。升级后访问未生成统计信息的表可能导致执行计划不准确,业务高峰期还可能导致数据库宕机。
说明 对于 不割接场景, 割接前收集表示新实例开放读写前收集, 割接后收集表示新实例开放读写后收集。存储空间 选择新版本实例的存储空间大小。 本地盘实例升级大版本时,支持存储空间缩容。可选择的最小存储空间需满足以下条件:- 以下两者中的最小值:
- 原实例已使用存储空间 × 120%,如果计算结果(单位需计算为GB)不是5的倍数,则向上凑为5的倍数。
- 原实例存储空间。
- 原实例已使用存储空间 × 120%,如果计算结果(单位需计算为GB)不是5的倍数,则向上凑为5的倍数。
- 大于等于ESSD云盘可购买的最小值,不足时以如下值作为可购买最小值:
- ESSD PL1云盘:20 GB。
- ESSD PL2云盘:500 GB。
- ESSD PL3云盘:1500 GB。
说明例如:- 原实例存储空间为100 GB,已使用70 GB,升级大版本时,存储类型选择为ESSD PL1云盘。
计算方法:70 × 120% = 84 GB,向上凑为5的倍数85 GB。因此,可购买的最小存储空间为85 GB。
- 原实例存储空间为700 GB,已使用350 GB,升级大版本时,存储类型选择为ESSD PL2云盘。
计算方法:350 × 120% = 420,420 GB小于ESSD PL2云盘可购买的最小值500 GB,因此,可购买的最小存储空间为500 GB。
实例规格 选择新版本实例的规格。有关实例规格的更多详情,请参见主实例规格列表。 - 单击立即创建。
此时原实例状态变更为 迁移中,并且实例列表中会多出一个状态为 创建中的新实例。当两个实例的状态变更为 运行中即代表创建或升级完成。具体时间取决于数据量,请耐心等待。说明 升级任务创建后不支持修改或删除。
- 如果在步骤一中删除了只读实例,则在升级后,还需执行以下步骤:
- 在新实例上重新创建PostgreSQL只读实例。
- 在应用程序中,将步骤一中修改的实例连接地址修改为新的只读实例连接地址。
后续步骤
- 确认业务已稳定运行在新实例中后,将新实例转成包年包月。
- 释放原实例。
- 新实例不包含只读实例,您可以按需创建PostgreSQL只读实例。
相关API
API | 描述 |
---|---|
UpgradeDBInstanceMajorVersionPrecheck | RDS PostgreSQL实例大版本升级检查 |
DescribeUpgradeMajorVersionPrecheckTask | 查询RDS PostgreSQL实例大版本升级检查报告 |
UpgradeDBInstanceMajorVersion | RDS PostgreSQL实例升级数据库大版本 |
DescribeUpgradeMajorVersionTask | 查询RDS PostgreSQL实例大版本升级历史任务 |
常见问题
- Q:大版本升级期间,是否能变更实例?比如变更实例规格?
A:大版本升级期间不支持变更实例,必须在大版本升级完成后,才可以进行其他操作。
- Q:大版本是否支持自动升级?
A:暂不支持自动升级数据库大版本。