事前準備
確認 AlloyDB Omni Kubernetes 運算子版本為
1.6.3。如要升級 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.3 NAME NAMESPACE
請替換下列變數:
- NAME:資料庫叢集名稱。
- NAMESPACE:資料庫叢集的命名空間。
執行手動升級步驟
請按照您升級來源的主要版本操作。
從舊版主要版本升級
取得資料庫的目前和目標主要版本。
export OLD_PG_VERSION=$(kubectl get dbcluster.alloydbomni.dbadmin.goog NAME -n NAMESPACE -o jsonpath='{.spec.databaseVersion}' | cut -d'.' -f1) export NEW_PG_VERSION=$(echo '17.5.0' | cut -d'.' -f1)請替換下列變數:
NAME:資料庫叢集名稱。NAMESPACE:資料庫叢集的命名空間。
備份資料,以免資料遺失。
終止所有複製程序。包括用於高可用性 (HA) 和資料復原 (DR) 的實體複製,以及所有邏輯複製串流。
為資料庫叢集加上註解,指定手動升級版本。
kubectl annotate dbclusters.alloydbomni.dbadmin.goog NAME -n NAMESPACE dbs.dbadmin.goog.com/manualmvu=true請替換下列變數:
NAME:資料庫叢集名稱。NAMESPACE:資料庫叢集的命名空間。
停止 PostgreSQL 程序,然後移動資料以進行升級。
kubectl exec -i POD_NAME -n NAMESPACE -c database -- /bin/bash -c " # Shut down postgres supervisorctl.par stop postgres; # Check data directory and move it for upgrade if necessary if [ -d /mnt/disks/pgsql/data ]; then echo 'Found data directory at /mnt/disks/pgsql/data, moving it to /mnt/disks/pgsql/${OLD_PG_VERSION}/db' mkdir -p /mnt/disks/pgsql/${OLD_PG_VERSION}; mv /mnt/disks/pgsql/data /mnt/disks/pgsql/${OLD_PG_VERSION}/db; elif [ ! -d /mnt/disks/pgsql/${OLD_PG_VERSION}/db ]; then echo 'ERROR: Neither /mnt/disks/pgsql/data nor /mnt/disks/pgsql/${OLD_PG_VERSION}/db directory found' >&2; exit 1; fi cp -r /usr/lib/postgresql/${OLD_PG_VERSION}/bin /mnt/disks/pgsql/${OLD_PG_VERSION}/.; cp -r /usr/lib/postgresql/${OLD_PG_VERSION}/lib /mnt/disks/pgsql/${OLD_PG_VERSION}/.; cp -r /usr/share/postgresql/${OLD_PG_VERSION} /mnt/disks/pgsql/${OLD_PG_VERSION}/share; rm -f /mnt/disks/pgsql/${OLD_PG_VERSION}/share/postgresql.conf.sample; cp /usr/share/postgresql/postgresql.conf.sample /mnt/disks/pgsql/${OLD_PG_VERSION}/share/postgresql.conf.sample; chmod 2740 /mnt/disks/pgsql/${OLD_PG_VERSION}/db "請替換下列變數:
POD_NAME:Pod 名稱。NAMESPACE:資料庫叢集的命名空間。
將資料庫叢集修補至
17.5.0版,並將控制層代理程式 (CPA) 修補至1.6.3版。kubectl patch dbclusters.alloydbomni.dbadmin.goog NAME -n NAMESPACE --type=merge -p '{"spec":{"databaseVersion":"17.5.0","controlPlaneAgentsVersion":"1.6.3","databaseImageOSType":"UBI9"}}'請替換下列變數:
NAME:資料庫叢集名稱。NAMESPACE:資料庫叢集的命名空間。
取得升級後的資料目錄路徑,並設為環境變數。
export POST_UPGRADE_DATA_DIR=$(kubectl exec -i POD_NAME -n NAMESPACE -c database -- /bin/bash -c "if [ -d /mnt/disks/pgsql/data ]; then echo /mnt/disks/pgsql/data; else echo /mnt/disks/pgsql/${NEW_PG_VERSION}/db; fi")請替換下列變數:
POD_NAME:Pod 名稱。NAMESPACE:資料庫叢集的命名空間。
為升級後的 AlloyDB Omni 版本建立空白資料庫叢集。
kubectl exec -i POD_NAME -n NAMESPACE -c database -- /bin/bash -c " supervisorctl.par stop postgres; # Initialize a new, empty database cluster for the new version. rm -fr $POST_UPGRADE_DATA_DIR; initdb -D $POST_UPGRADE_DATA_DIR -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 名稱。NAMESPACE:資料庫叢集的命名空間。
修改現有資料庫叢集中的
pg_hba.conf,為升級程序提供所需的權限和連線。kubectl exec -i POD_NAME -n NAMESPACE -c database -- /bin/bash -c " # Backup pg_hba.conf of the old postgres cluster cp /mnt/disks/pgsql/${OLD_PG_VERSION}/db/pg_hba.conf /mnt/disks/pgsql/${OLD_PG_VERSION}/db/pg_hba.conf.bak; # Update old postgres configurations echo 'local all all trust' >> /mnt/disks/pgsql/${OLD_PG_VERSION}/db/pg_hba.conf; echo 'host all all 127.0.0.1/32 trust' >> /mnt/disks/pgsql/${OLD_PG_VERSION}/db/pg_hba.conf "請替換下列變數:
POD_NAME:Pod 名稱。NAMESPACE:資料庫叢集的命名空間。
修改新資料庫叢集中的
pg_hba.conf,為升級程序提供所需的權限和連線。kubectl exec -i POD_NAME -n NAMESPACE -c database -- /bin/bash -c " rm $POST_UPGRADE_DATA_DIR/pg_hba.conf; echo 'local all all trust' >> $POST_UPGRADE_DATA_DIR/pg_hba.conf; echo 'host all all 127.0.0.1/32 trust' >> $POST_UPGRADE_DATA_DIR/pg_hba.conf; "請替換下列變數:
POD_NAME:Pod 名稱。NAMESPACE:資料庫叢集的命名空間。
確認是否符合升級資格。
kubectl exec -i POD_NAME -n NAMESPACE -c database -- /bin/bash -c " cd /mnt/disks/pgsql; # Make sure postgres is stopped supervisorctl.par stop postgres; # Check to verify that data can be upgraded. pg_upgrade -U alloydbadmin --check -b /mnt/disks/pgsql/${OLD_PG_VERSION}/bin -B /usr/lib/postgresql/${NEW_PG_VERSION}/bin -d /mnt/disks/pgsql/${OLD_PG_VERSION}/db -D $POST_UPGRADE_DATA_DIR --link -v; "請替換下列變數:
POD_NAME:Pod 名稱。NAMESPACE:資料庫叢集的命名空間。
執行資料庫升級。
kubectl exec -i POD_NAME -n NAMESPACE -c database -- /bin/bash -c " cd /mnt/disks/pgsql; pg_upgrade -U alloydbadmin -b /mnt/disks/pgsql/${OLD_PG_VERSION}/bin -B /usr/lib/postgresql/${NEW_PG_VERSION}/bin -d /mnt/disks/pgsql/${OLD_PG_VERSION}/db -D $POST_UPGRADE_DATA_DIR --link -v; # Recover old cluster configurations cp /mnt/disks/pgsql/${OLD_PG_VERSION}/db/pg_hba.conf.bak $POST_UPGRADE_DATA_DIR/pg_hba.conf; cp -r /mnt/disks/pgsql/${OLD_PG_VERSION}/db/postgresql.conf $POST_UPGRADE_DATA_DIR/.; cp -r /mnt/disks/pgsql/${OLD_PG_VERSION}/db/postgresql.conf.d $POST_UPGRADE_DATA_DIR/.; cp -r /mnt/disks/pgsql/${OLD_PG_VERSION}/db/parambackup $POST_UPGRADE_DATA_DIR/.; # Start postgres supervisorctl.par start postgres; # Clean up backup data rm -fr /mnt/disks/pgsql/${OLD_PG_VERSION}/ "請替換下列變數:
POD_NAME:Pod 名稱。NAMESPACE:資料庫叢集的命名空間。
升級成功後,請從資料庫叢集中移除手動版本升級註解。
kubectl annotate dbclusters.alloydbomni.dbadmin.goog NAME -n NAMESPACE dbs.dbadmin.goog.com/manualmvu-請替換下列變數:
NAME:資料庫叢集名稱。NAMESPACE:資料庫叢集的命名空間。
恢復正常運作,並重新啟用您在步驟一至三中停用的任何備份、備份方案或複製程序。