Umut TEKIN:探索:CNPG PostgreSQL 升级

Umut TEKIN:探索:CNPG PostgreSQL 升级

💡 原文英文,约1000词,阅读约需4分钟。
📝

内容提要

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 主版本升级过程中高可用性会受影响吗?

会。主版本升级后副本被替换,需要等待新副本同步完成,在此期间高可用性不可用。

🏷️

标签

➡️

继续阅读