如要升級 PostgreSQL 主要版本,請參閱「在 VM 上升級 AlloyDB Omni」。
本頁的操作說明適用於獨立單一節點部署作業,以及多節點拓撲中的個別資料庫節點,例如具有唯讀副本或高可用性待命節點的部署作業。請根據您的設定,查看下列注意事項:
- 外部資料目錄:停止並移除容器前,請確認資料庫資料儲存在掛接至容器的永久主機目錄 (例如
-v DATA_DIR:/var/lib/postgresql/data)。如果移除的容器僅將資料儲存在容器檔案系統中,資料庫資料就會遭到刪除。詳情請參閱「使用容器安裝 AlloyDB Omni」。 - 多節點拓撲:請務必先升級所有副本和待命節點,再升級主要節點。在高可用性設定中,請先暫停自動容錯移轉或故障偵測,再停止容器,並在升級舊的主要節點前,切換至升級後的待命節點。
- 含有擴充功能的自訂容器映像檔:如果您使用 PostGIS 或 Orafce 等第三方擴充功能建構自訂容器映像檔,請先使用更新後的子版本基礎映像檔重建自訂容器映像檔,再重新建立容器。
事前準備
升級 AlloyDB Omni 前,請先完成下列步驟:
- 規劃維護期間或短暫的服務停機時間,因為更換容器需要暫時停止資料庫服務。
- 開始升級前,請完整備份資料庫。詳情請參閱「備份與還原總覽」。
- 如要升級多節點拓撲,請找出目前的主要節點和所有待命或副本節點,以便先升級待命和副本節點。
檢查執行中的容器,記錄目前的映像檔、主機資料目錄掛接、通訊埠對應、環境變數和執行階段旗標,以便使用相同設定重新建立容器:
Docker
docker inspect CONTAINER_NAMEPodman
podman inspect CONTAINER_NAME將
CONTAINER_NAME替換成 AlloyDB Omni 容器的名稱,例如my-omni。升級前,請先檢查目前的 AlloyDB Omni 資料庫版本:
Docker
docker exec -it CONTAINER_NAME psql -h localhost -U postgres -c "SELECT version();"Podman
podman exec -it CONTAINER_NAME psql -h localhost -U postgres -c "SELECT version();"
提取更新後的容器映像檔
將目標子版本容器映像檔提取至主機:
Docker
docker pull IMAGE_URIPodman
podman pull IMAGE_URI將 IMAGE_URI 替換為要升級的容器映像檔 URI 和子版本標記,例如 Debian 映像檔的 google/alloydbomni:18.4.0,或 Red Hat Universal Base Image (UBI) 的 google/alloydbomni:18.4.0-ubi9。
如果部署作業使用含有
PostGIS 或
Orafce 等擴充功能的自訂容器映像檔,請更新 Dockerfile 中的 FROM 指令或
OMNI_VERSION 建構引數,以參照更新後的
子版本標記,然後建構更新後的自訂映像檔,再繼續操作。
升級 AlloyDB Omni
如要將安裝的 AlloyDB Omni 升級至較新的子版本,請在每個節點完成下列步驟。在多節點拓撲中,請先在每個待命或副本節點上完成下列步驟,再升級主要節點:
停止並移除現有的 AlloyDB Omni 容器:
Docker
docker container stop CONTAINER_NAME docker container rm CONTAINER_NAMEPodman
podman container stop CONTAINER_NAME podman container rm CONTAINER_NAME停止並移除容器不會影響掛接主機資料目錄中的資料庫檔案。
使用更新後的子版本映像檔,並掛接現有的主機資料目錄,重新建立並啟動 AlloyDB Omni 容器:
Docker
docker run -d --name CONTAINER_NAME \ -e POSTGRES_PASSWORD=PASSWORD \ -v DATA_DIR:/var/lib/postgresql/data \ -p HOST_PORT:5432 \ --restart=always \ IMAGE_URIPodman
podman run -d --name CONTAINER_NAME \ -e POSTGRES_PASSWORD=PASSWORD \ -v DATA_DIR:/var/lib/postgresql/data \ -p HOST_PORT:5432 \ --restart=always \ IMAGE_URI更改下列內容:
CONTAINER_NAME:AlloyDB Omni 容器的名稱,例如my-omni。PASSWORD:容器postgres使用者的密碼。掛接現有的初始化資料目錄時,容器會保留資料庫中設定的現有密碼。DATA_DIR:儲存現有資料庫資料的主機目錄路徑。HOST_PORT:主機上發布容器通訊埠5432的 TCP 通訊埠,例如5432。IMAGE_URI:更新後的子版本容器映像檔 URI (或重建的自訂映像檔 URI),例如google/alloydbomni:18.4.0。
請使用與先前容器相同的基本 OS 映像檔變體 (Debian 或 UBI),確保主機資料目錄中的檔案擁有權與容器的
postgres使用者相符。如果先前的容器使用其他執行階段旗標,例如--ulimit、--log-driver、--shm-size或-v /dev/shm:/dev/shm,請在重新建立容器時加入這些旗標。詳情請參閱「設定 AlloyDB Omni 正式版」。
驗證升級
重新建立並啟動容器後,請確認資料庫服務執行的是更新後的子版本:
檢查 AlloyDB Omni 容器的狀態,確認狀態為
Up:Docker
docker ps --filter "name=CONTAINER_NAME"Podman
podman ps --filter "name=CONTAINER_NAME"連線至資料庫,確認升級後的版本已啟用:
Docker
docker exec -it CONTAINER_NAME psql -h localhost -U postgres -c "SELECT version();"Podman
podman exec -it CONTAINER_NAME psql -h localhost -U postgres -c "SELECT version();"
復原升級
如要將 AlloyDB Omni 安裝作業還原至先前的子版本,請停止並移除升級後的容器,然後啟動使用先前子版本映像檔的容器:
停止並移除升級後的 AlloyDB Omni 容器:
Docker
docker container stop CONTAINER_NAME docker container rm CONTAINER_NAMEPodman
podman container stop CONTAINER_NAME podman container rm CONTAINER_NAME使用先前的子版本映像檔,並掛接相同的主機資料目錄,重新建立並啟動容器:
Docker
docker run -d --name CONTAINER_NAME \ -e POSTGRES_PASSWORD=PASSWORD \ -v DATA_DIR:/var/lib/postgresql/data \ -p HOST_PORT:5432 \ --restart=always \ ROLLBACK_IMAGE_URIPodman
podman run -d --name CONTAINER_NAME \ -e POSTGRES_PASSWORD=PASSWORD \ -v DATA_DIR:/var/lib/postgresql/data \ -p HOST_PORT:5432 \ --restart=always \ ROLLBACK_IMAGE_URI更改下列內容:
CONTAINER_NAME:AlloyDB Omni 容器的名稱,例如my-omni。PASSWORD:容器postgres使用者的密碼。掛接現有的初始化資料目錄時,容器會保留資料庫中設定的現有密碼。DATA_DIR:儲存現有資料庫資料的主機目錄路徑。HOST_PORT:主機上發布容器通訊埠5432的 TCP 通訊埠,例如5432。ROLLBACK_IMAGE_URI:先前安裝作業的容器映像檔 URI 和子版本標記 (或先前的自訂映像檔 URI),例如google/alloydbomni:18.1.0。
確認容器正在執行,且先前的資料庫版本處於啟用狀態:
Docker
docker ps --filter "name=CONTAINER_NAME" docker exec -it CONTAINER_NAME psql -h localhost -U postgres -c "SELECT version();"Podman
podman ps --filter "name=CONTAINER_NAME" podman exec -it CONTAINER_NAME psql -h localhost -U postgres -c "SELECT version();"