内容提要
CloudNativePG 1.26 支持离线原地主版本升级,将 PostgreSQL 升级变为声明式、Kubernetes 原生流程。小版本升级仅需修改镜像名,CNPG 会滚动升级副本后重启主库,系统 ID 不变;主版本升级同样修改镜像名,CNPG 自动执行 pg_upgrade --link,但副本会被替换,需等新副本同步完成才能恢复高可用。
延伸解读
小版本升级:系统 ID 不变,主库重启
小版本升级只需修改集群清单中的 imageName,CNPG 会先滚动升级副本,再通过切换或重启主库完成升级。文中示例从 PostgreSQL 16.0 升级到 16.10,升级后系统 ID 保持不变,因为仅二进制文件发生变化,数据目录未变。这意味着小版本升级对集群身份无影响,但主库仍会重启,可能造成短暂中断。
主版本升级:副本被替换,高可用暂时失效
主版本升级同样通过修改 imageName 触发,CNPG 自动执行离线原地升级,底层使用 pg_upgrade --link。升级后,原有副本会被新副本替换,系统 ID 也会改变。文中强调,在新副本同步完成之前,高可用功能不可用。因此,升级后需等待副本追赶上主库,才能恢复完整的故障切换能力。
声明式升级的适用性与注意点
CNPG 1.26 引入的离线原地升级将主版本升级变为声明式、Kubernetes 原生流程,与逻辑转储/恢复和逻辑复制并列。这种方式适合希望减少手动干预的场景,但升级期间集群处于离线状态,且副本重建需要时间。用户应关注升级后副本同步进度,确保高可用恢复后再投入生产使用。
Q&A
CloudNativePG 从哪个版本开始支持离线原地主版本升级?
从 CloudNativePG 1.26 版本开始,引入了离线原地升级作为主版本升级的一种选项。
在 CNPG 中如何进行小版本升级?
只需修改集群清单中的 imageName 为新的小版本镜像,然后应用清单。CNPG 会先滚动升级副本,再通过切换或重启主库完成升级,系统 ID 保持不变。
CNPG 主版本升级时副本会如何处理?
主版本升级时,副本节点会被替换为新的副本。升级成功后,CNPG 会初始化新副本,在副本同步完成之前,高可用性将不可用。
CNPG 主版本升级使用什么工具进行数据迁移?
CNPG 自动执行 pg_upgrade --link 来完成主版本升级的数据迁移。
CNPG 小版本升级后系统 ID 会改变吗?
不会。小版本升级仅更换二进制文件,系统 ID 保持不变。
CNPG 主版本升级过程中高可用性会受影响吗?
会。主版本升级后副本被替换,需要等待新副本同步完成,在此期间高可用性不可用。