在 1.6.0 版上將 AlloyDB Omni 升級至 17.5.0 版

選取說明文件版本:

本頁說明如何在 Kubernetes 上,將 AlloyDB Omni 升級至 17.5.0 版。

事前準備

  • 確認 AlloyDB Omni Kubernetes 運算子版本為 1.6.0。如要升級 AlloyDB Omni 運算子版本,請參閱「遷移至最新版 AlloyDB Omni Kubernetes 運算子」。

  • 確認磁碟可用空間至少有 5 GB。

  • 如果您執行外部或遠端備份系統,請執行完整備份並暫停所有排定的備份作業,以免在升級過程中備份。

  • 如要升級高可用性 (HA) 和資料復原 (DR) 環境,請先解除資料庫叢集的連結。

升級 AlloyDB Omni 版本

如要使用 pg_upgrade 升級 AlloyDB Omni 版本,請執行下列其中一項操作:

執行指令碼升級

您可以在 GitHub 上的 AlloyDB Omni 範例中,找到執行手動升級步驟的指令碼。

如要使用升級指令碼,請下載指令碼並執行下列指令:

./MVU.sh 17.5.0 1.6.0 NAME NAMESPACE OS_TYPE

請替換下列變數:

  • NAME:資料庫叢集名稱。
  • NAMESPACE:資料庫叢集的命名空間。
  • OS_TYPE:資料庫映像檔的基礎作業系統。有效值為 DebianUBI9。如未指定,資料庫版本 16.9.0 以上的運算子預設為 UBI9

執行手動升級步驟

請按照您要升級的主要版本操作。

從 16.x.x 版升級至 17.5.0 版

  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/16; mv /mnt/disks/pgsql/data /mnt/disks/pgsql/16/data; cp -r /usr/lib/postgresql/16/bin /mnt/disks/pgsql/16/.; cp -r /usr/lib/postgresql/16/lib /mnt/disks/pgsql/16/.; cp -r /usr/share/postgresql/16 /mnt/disks/pgsql/16/share; rm /mnt/disks/pgsql/16/share/postgresql.conf.sample; cp /usr/share/postgresql/postgresql.conf.sample /mnt/disks/pgsql/16/share/postgresql.conf.sample; chmod 2740 /mnt/disks/pgsql/16/data
    

    請替換下列變數:

    • POD_NAME:Pod 的名稱。
  6. 將資料庫叢集修補至 17.5.0 版,並將控制層代理程式 (CPA) 修補至 1.6.0 版。

    kubectl patch dbclusters.alloydbomni.dbadmin.goog NAME --type=merge -p '{"spec":{"databaseVersion":"17.5.0","controlPlaneAgentsVersion":"1.6.0","databaseImageOSType":"UBI9"}}'
    

    請替換下列變數:

    • NAME:資料庫叢集名稱。
  7. 為升級後的 AlloyDB Omni 版本建立空白資料庫叢集。

    kubectl 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 pg16 cluster
    postgres@POD_NAME:~$ cp /mnt/disks/pgsql/16/data/pg_hba.conf /mnt/disks/pgsql/16/data/pg_hba.conf.bak
    
    # Update pg16 configurations
    postgres@POD_NAME:~$ echo "local      all           all                      trust" >> /mnt/disks/pgsql/16/data/pg_hba.conf; echo "host       all           all      127.0.0.1/32    trust" >> /mnt/disks/pgsql/16/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/16/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/16/bin -B /usr/lib/postgresql/17/bin -d /mnt/disks/pgsql/16/data -D /mnt/disks/pgsql/data --link -v
    
    postgres@POD_NAME:~$ pg_upgrade -U alloydbadmin -b /mnt/disks/pgsql/16/bin -B /usr/lib/postgresql/17/bin -d /mnt/disks/pgsql/16/data -D /mnt/disks/pgsql/data --link -v
    
    # Recover pg16 configurations
    postgres@POD_NAME:~$ cp /mnt/disks/pgsql/16/data/pg_hba.conf.bak /mnt/disks/pgsql/data/pg_hba.conf; cp -r /mnt/disks/pgsql/16/data/postgresql.conf /mnt/disks/pgsql/data/.; cp -r /mnt/disks/pgsql/16/data/postgresql.conf.d /mnt/disks/pgsql/data/.; cp -r /mnt/disks/pgsql/16/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/16/
    

    請替換下列變數:

    • POD_NAME:Pod 的名稱。
  11. 升級成功後,請從資料庫叢集中移除手動版本升級註解。

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

    請替換下列變數:

    • NAME:資料庫叢集名稱。
  12. 恢復正常運作,並重新啟用您在步驟 1 至 3 中停用的任何備份、備份方案或複製程序。

從 15.x.x 版升級至 17.5.0 版

  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. 將資料庫叢集修補至 17.5.0 版,並將控制層代理程式 (CPA) 修補至 1.6.0 版。

    kubectl patch dbclusters.alloydbomni.dbadmin.goog NAME --type=merge -p '{"spec":{"databaseVersion":"17.5.0","controlPlaneAgentsVersion":"1.6.0","databaseImageOSType":"UBI9"}}'
    

    請替換下列變數:

    • NAME:資料庫叢集名稱。
  7. 為升級後的 AlloyDB Omni 版本建立空白資料庫叢集。

    kubectl 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/17/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/17/bin -d /mnt/disks/pgsql/15/data -D /mnt/disks/pgsql/data --link -v
    
    # Recover pg16 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/16/
    

    請替換下列變數:

    • POD_NAME:Pod 的名稱。
  11. 升級成功後,請從資料庫叢集中移除手動版本升級註解。

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

    請替換下列變數:

    • NAME:資料庫叢集名稱。
  12. 恢復正常運作,並重新啟用您在步驟 1 至 3 中停用的任何備份、備份方案或複製程序。