在 Kubernetes 上升级到 AlloyDB Omni 16.8.0 版

选择文档版本:

本页面介绍了如何在 Kubernetes 上升级到 AlloyDB Omni 16.8.0 版。

准备工作

升级 AlloyDB Omni 版本

如需使用 pg_upgrade 升级 AlloyDB Omni 版本,请执行以下操作之一:

升级脚本

您可以在 GitHub 上的 AlloyDB Omni 示例中找到执行手动升级步骤的脚本。

如需使用升级脚本,请下载该脚本并运行以下命令:

./MVU.sh 16.8.0 1.5.0 NAME NAMESPACE

执行以下变量替换操作:

  • NAME:您的数据库集群的名称。
  • NAMESPACE:数据库集群的命名空间。

手动升级步骤

  1. 备份数据,以免丢失任何数据。

  2. 移除备份方案

  3. 终止所有复制过程。其中包括为了实现高可用性 (HA) 和数据弹性 (DR) 而进行的物理复制,以及所有逻辑复制流。

  4. 为数据库集群添加注解,以指定手动版本升级。

    kubectl annotate dbclusters.alloydbomni.dbadmin.goog NAME dbs.dbadmin.goog.com/manualmvu=true
    

    执行以下变量替换操作:

    • NAME:您的数据库集群的名称。
  5. 停止 PostgreSQL 进程,以便能够移动数据进行升级。

    k exec -ti POD_NAME -- /bin/Bash
    # Shut down postgres
    postgres@POD_NAME:~$ supervisorctl.par stop postgres
    
    postgres@POD_NAME:~$ mkdir /mnt/disks/pgsql/15; mv /mnt/disks/pgsql/data /mnt/disks/pgsql/15/data; cp -r /usr/lib/postgresql/15/bin /mnt/disks/pgsql/15/.; cp -r /usr/lib/postgresql/15/lib /mnt/disks/pgsql/15/.; cp -r /usr/share/postgresql/15 /mnt/disks/pgsql/15/share; rm /mnt/disks/pgsql/15/share/postgresql.conf.sample; cp /usr/share/postgresql/postgresql.conf.sample /mnt/disks/pgsql/15/share/postgresql.conf.sample; chmod 2740 /mnt/disks/pgsql/15/data
    

    执行以下变量替换操作:

    • POD_NAME:您的 Pod 的名称。
  6. 更新补丁,将数据库集群升级到 16.8.0 版,将控制平面代理 (CPA) 升级到 1.5.0 版。

    kubectl patch dbclusters.alloydbomni.dbadmin.goog NAME --type=merge -p '{"spec":{"databaseVersion":"16.8.0","controlPlaneAgentsVersion":"omni_control_plane_agents_version"}}'
    

    执行以下变量替换操作:

    • NAME:您的数据库集群的名称。
  7. 为新的 AlloyDB Omni 版本创建空数据库集群。

    k exec -ti POD_NAME -- /bin/Bash
    
    postgres@POD_NAME:~$ supervisorctl.par stop postgres
    
    # Initialize a new, empty database cluster for the new version.
    postgres@POD_NAME:~$ rm -fr /mnt/disks/pgsql/data; initdb -D /mnt/disks/pgsql/data -U alloydbadmin --data-checksums --encoding=UTF8 --locale=C --locale-provider=icu --icu-locale=und-x-icu --auth-host=trust --auth-local=reject; cd ~
    

    执行以下变量替换操作:

    • POD_NAME:您的 Pod 的名称。
  8. 修改现有数据库集群中的 pg_hba.conf,为升级流程提供所需的权限和连接。

    # Backup pg_hba.conf of the pg15 cluster
    postgres@POD_NAME:~$ cp /mnt/disks/pgsql/15/data/pg_hba.conf /mnt/disks/pgsql/15/data/pg_hba.conf.bak
    
    # Update pg15 configurations
    postgres@POD_NAME:~$ echo "local      all           all                      trust" >> /mnt/disks/pgsql/15/data/pg_hba.conf; echo "host       all           all      127.0.0.1/32    trust" >> /mnt/disks/pgsql/15/data/pg_hba.conf
    

    执行以下变量替换操作:

    • POD_NAME:您的 Pod 的名称。
  9. 修改新数据库集群中的 pg_hba.conf,为升级流程提供所需的权限和连接。

    postgres@POD_NAME:~$ rm /mnt/disks/pgsql/data/pg_hba.conf; echo "local      all           all                      trust" >> /mnt/disks/pgsql/data/pg_hba.conf; echo "host       all           all      127.0.0.1/32    trust" >> /mnt/disks/pgsql/data/pg_hba.conf; chmod 2740 /mnt/disks/pgsql/15/data
    

    执行以下变量替换操作:

    • POD_NAME:您的 Pod 的名称。
  10. 升级数据库集群。

    # (optional) Make sure postgres is stopped
    postgres@POD_NAME:~$ supervisorctl.par stop postgres
    
    # (optional) Check to verify that data can be upgraded.
    postgres@POD_NAME:~$ pg_upgrade -U alloydbadmin --check -b /mnt/disks/pgsql/15/bin -B /usr/lib/postgresql/16/bin -d /mnt/disks/pgsql/15/data -D /mnt/disks/pgsql/data --link -v
    
    postgres@POD_NAME:~$ pg_upgrade -U alloydbadmin -b /mnt/disks/pgsql/15/bin -B /usr/lib/postgresql/16/bin -d /mnt/disks/pgsql/15/data -D /mnt/disks/pgsql/data --link -v
    
    # Need to recover pg15 configurations
    postgres@POD_NAME:~$ cp /mnt/disks/pgsql/15/data/pg_hba.conf.bak /mnt/disks/pgsql/data/pg_hba.conf; cp -r /mnt/disks/pgsql/15/data/postgresql.conf /mnt/disks/pgsql/data/.; cp -r /mnt/disks/pgsql/15/data/postgresql.conf.d /mnt/disks/pgsql/data/.; cp -r /mnt/disks/pgsql/15/data/parambackup /mnt/disks/pgsql/data/.
    
    # Start postgres
    postgres@POD_NAME:~$ supervisorctl.par start postgres
    
    # Clean up backup data
    postgres@POD_NAME:~$ rm -fr /mnt/disks/pgsql/15/
    

    执行以下变量替换操作:

    • POD_NAME:您的 Pod 的名称。
  11. 从数据库集群中移除手动版本升级注释。

    kubectl annotate dbclusters.alloydbomni.dbadmin.goog NAME dbs.dbadmin.goog.com/manualmvu-
    

    执行以下变量替换操作:

    • NAME:您的数据库集群的名称。
  12. 恢复正常运营,并重新启用在第 1 步到第 3 步中停用的所有备份、备份方案或复制过程。