一、场景及优势
云数据库 PostgreSQL 支持数据库大版本升级,该工具有如下优势:
·支持 PostgreSQL 9~18之间的跨版本升级。支持升级前演练。
·在原实例上拉取只读实例进行升级操作,原实例不受任何影响。
·大版本升级期间,实例会在一定时间内变为只读实例。实例只读的持续时间取决于原实例对象数量,与数据规模无关。
·统计信息收集期间,实例也会变为只读,只读的持续时间取决于数据量大小。
·原实例升级完成后,连接地址、标签、监控、备份集等信息完整保留。
注意:说明:
二、正式大版本升级
1. 登录 PostgreSQL 控制台,在实例列表,单击实例 ID 或操作列的管理,进入实例详情页面。
2. 单击版本升级,进入版本升级操作页面。
3. 单击升级大版本,进入版本升级页面。
3.1 目标版本
系统会给出当前可以升级到的所有大版本,用户可自行选择。仅支持升级到每个大版本下的最新小版本。
3.2 升级时间
升级过程中会有闪断和短暂的只读,因此业务需要自行评估可操作时间窗口,可选择立即执行、指定时间或者维护时间内。维护时间设置请参考 设置实例维护时间。
若所需的准备工作已经完成,但还未到指定的升级时间,则实例的状态将显示为等待切换。你可以在控制台实例列表 > 操作 > 立即切换来直接开始升级。
3.3 统计信息收集说明
该操作,主要是对主实例运行 ANALYZE 并在升级后数据库首次启动时更新系统统计信息。准确的统计信息可确保 PostgreSQL 查询规划器以最优方式处理查询。缺少统计信息可能会导致查询计划错误,进而可能会降低性能并占用过多内存。统计信息生成时长取决于实例数据量大小。统计信息生成时实例会只读。
3.4 插件升级设置
该操作主要是在升级完成后在创建过插件的数据库上执行"ALTER EXTENSION UPDATE"。支持三种升级时间:
| 升级时间 | 说明 |
| 大版本升级完成前升级插件 | 该方式下,需要检查所有的数据库的插件列表并将插件升级到对应的版本,执行时间与数据库的数量、插件数量正相关,会延长整个大版本升级的执行时间,请你评估后选择。 |
| 大版本升级完成后升级插件 | 该方式下,数据库会在大版本升级完成后立即恢复读写,插件此时进行更新。但在插件更新期间,可能会出现插件功能不可用的情况。选择该升级时间,你需要评估业务是否会受到影响。 |
| 不升级插件版本: | 该方式下,数据库会在大版本升级完成后立即恢复读写,不自动升级插件。如你有需要,可自行升级插件。选择该升级时间,你需要评估业务是否会受到影响。 |
3.5 升级开始前是否备份
执行大版本升级时,为保证数据可恢复性,系统默认会自动进行两次全量备份,备份类型为升级备份:
·升级开始前进行一次全量备份,在开始升级之前立即进行。若大版本升级后实例出现问题,用户可以使用此备份将数据库实例恢复为先前版本的状态。
·升级完成后进行一次全量备份,该备份在允许对升级后的数据库实例执行新写入后立即创建。
升级前备份支持两种选项:
| 选项 | 说明 |
| 是 | 默认选项。备份会产生费用,具体请参考 备份空间收费说明,用户可以在升级验证完成后选择将其删除。此备份文件的删除策略也受用户设置的备份集保留规则管理。如果你想延长备份集保留时间,请进入备份恢复界面,在备份过期时间列单击进行编辑。 |
| 否 | 当实例已有备份可以恢复到升级前的状态时,可选择此选项,否则不建议选择。 |
3.6 任务启动设置
| 选项 | 说明 |
| 只检查不发起任务 | 只进行升级前的检查,包含实例运行状态、实例参数设置合法性、数据库连接检查等,但不发起任务。用户可以通过该操作来预检查升级可行性。 |
| 检查并发起任务 | 进行升级前的检查,包含实例运行状态、实例参数设置合法性、数据库连接检查等。如果检查通过则直接发起任务。 |
4. 单击提交会产生一个升级任务,实例的状态更改为内核版本升级中,用户可以在任务列表来查看任务状态和系统日志。
三、演练升级
为了保证升级的成功率,业务可以选择先演练升级。演练升级是基于当前实例的备份集先克隆出新实例,在新实例上进行升级,升级完成后会产生新实例,用户可以选择直接使用该实例,也可以删除实例。克隆产生实例会正常计费,计费模式为按量计费,具体价格请参考 产品价格。具体操作如下:
1. 登录 PostgreSQL 控制台,在实例列表,单击实例 ID 或操作列的管理,进入实例详情页面。
2. 点击版本升级,进入版本升级操作页面。
3. 点击大版本升级演练,进入演练操作界面。
3.1 克隆实例配置
具体克隆实例配置请参考 克隆实例。
注意:说明:
注意:克隆实例任务用时较长,你可在克隆完成后再进入页面,选择已存在的克隆实例进行演练。
注意:
3.2 升级配置
升级配置项请参考 正式大版本升级。
单击提交,发起演练任务,如果原实例为 postgres-******* ,则系统会生产一个实例名为 postgres-*******-pre-upgrade-************** 的新实例,并完成后续的升级。
四、原理解析
为了方便你了解系统原理,合理规划大版本升级时间段,这篇为你展示了在大版本升级过程中,后台系统所做的操作,具体如下:
上图以 PostgreSQL 10升级到 PostgreSQL 14为例,详细说明了后台系统操作步骤如下:
1. 预检查
·检查实例状态是否为运行中;
·检查实例参数合法性;
·检查升级目标版本是否合法。
2. 新建只读实例
新建源实例的只读实例,为减少升级操作对原实例的影响,后续升级操作会在该只读实例上进行。
3. 初始化新版本数据库
新建空白目录,初始化一个版本为目标版本的新实例,该新实例只有单节点。
4. 停止高版本节点、原实例主节点只读。
停止该新版本的实例,同时将源实例设为只读。
5. 只读实例提升为主实例、停止进程。
将只读实例提升为主实例,并停止该实例。
6. 执行升级
执行升级,导出并导入元数据,处理数据。
7. 启动新版本进程、切换路由、新建备机并回收历史节点。
启动升级完成的新版本实例,切换原实例路由信息,并给新实例搭建从节点。最后清理环境,任务结束。
注意:系统升级完成后,请业务务必做好相关验证,以保证业务顺利运行,具体如下:
五、系统限制
·如果实例有关联只读实例,则需要先删除只读实例再发起升级。
·如果实例存在磁盘空间使用超出则不能发起大版本升级。
六、是否支持大版本降级?
不支持大版本降级,当前云数据库 PostgreSQL 大版本向前兼容,建议优先使用高版本。