使用 pgBackRest 將 AlloyDB Omni RPM 備份及還原至與 S3 相容的儲存空間

1. 簡介

本程式碼實驗室說明如何設定 pgBackRest,使用與 S3 相容的物件儲存空間備份及還原 AlloyDB Omni RPM 部署項目。

注意:在本程式碼研究室中,您會在 VM 上部署獨立的 MinIO 二進位檔,做為本機輕量型 S3 相容儲存端點,用於教學課程和測試。對於正式版工作負載,請一律使用受支援且持續維護的 S3 相容儲存空間解決方案或雲端物件儲存空間。

必要條件

  • 從 Cloud 控制台存取 Google Cloud 專案和 Cloud Shell。
  • 已安裝並設定 Google Cloud SDK (gcloud)。

課程內容

  • 如何設定 Compute Engine VM 以使用 AlloyDB Omni RPM。
  • 如何在 VM 上設定與 S3 相容的本機物件儲存伺服器。
  • 如何設定 pgBackRest,將與 S3 相容的物件儲存空間做為備份存放區。
  • 如何執行、列出及驗證備份。
  • 如何從備份還原資料。

軟硬體需求

  • 取得 AlloyDB Omni RPM 的網址連結。連結會傳送至您的電子郵件,其中包含存放區網址伺服器。初始化下列環境變數,讓網址在程式碼研究室中隨時可用。
    export ALLOYDB_OMNI_REPOSITORY_URL="..."
    
  • 可存取 Google Cloud 的終端機。您可以使用 Cloud Shell 達成這個目的。

2. 設定和需求條件

專案設定

建立 Google Cloud 專案

  1. 在 Google Cloud 控制台的專案選擇器頁面中,選取或建立 Google Cloud 專案。
  2. 確認 Cloud 專案已啟用計費功能。瞭解如何檢查專案是否已啟用計費功能。

啟動 Cloud Shell

雖然您可以透過筆電遠端操作 Google Cloud,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是雲端執行的指令列環境。

啟用 Cloud Shell 的圖示

  1. 開啟 Google Cloud 控制台,然後點選右上角工具列中的 Cloud Shell 圖示。您也可以透過下列任一方式開啟 Cloud Shell:

佈建並連至環境預計只需要幾分鐘,這項作業完成後,您會看到類似以下的內容:

Google Cloud Shell 終端機顯示環境已連線{: width="624"}

3. 建立 Compute Engine VM

在本節中,您將使用 gcloud 指令列工具建立單一 Compute Engine (GCE) 虛擬機器 (VM)。您使用與 AlloyDB Omni RPM 完全相容的 Rocky Linux 9 映像檔。

  1. 為專案 ID、VM 名稱、機型、可用區和區域定義環境變數。
    export PROJECT="your-project-id"
    export INSTANCE_NAME="alloydb-omni-pgbackrest"
    export MACHINE_TYPE="e2-standard-4"
    export ZONE="us-central1-c"
    export REGION="us-central1"
    
  2. 使用 Google Cloud 帳戶使用者登入,並設定預設專案。
    gcloud auth login
    gcloud config set project $PROJECT
    
  3. 建立防火牆規則,允許連線至 VM 的 SSH 連線。
    gcloud compute firewall-rules create allow-ssh-alloydb-omni \
        --project=$PROJECT \
        --direction=INGRESS \
        --action=allow \
        --rules=tcp:22 \
        --source-ranges="0.0.0.0/0"
    
  4. 由於 VM 是在沒有公用 IP 位址的情況下建立,請設定 Cloud Router 和 Cloud NAT 閘道,讓 VM 存取外部套件存放區並下載必要軟體。
    gcloud compute routers create alloydb-omni-router \
        --project=$PROJECT \
        --network=default \
        --region=$REGION
    
    gcloud compute routers nats create alloydb-omni-nat \
        --project=$PROJECT \
        --router=alloydb-omni-router \
        --region=$REGION \
        --nat-all-subnet-ip-ranges \
        --auto-allocate-nat-external-ips
    
  5. 確認虛擬私有雲網路具有有效的預設網際網路閘道路徑。在某些共用或遊樂區環境中,清理指令碼有時會移除預設路徑。Cloud NAT 必須有這條路徑,才能將傳出流量轉送至網際網路。
    gcloud compute routes create default-internet-route \
        --project=$PROJECT \
        --network=default \
        --destination-range=0.0.0.0/0 \
        --next-hop-gateway=default-internet-gateway
    
  6. 建立 Compute Engine VM 執行個體,並使用 Rocky Linux 9 和 20 GB 的平衡型永久磁碟。為提升安全性,請使用 --no-address 標記,這樣系統就不會為 VM 指派公開 IP 位址。
    gcloud compute instances create $INSTANCE_NAME \
        --project=$PROJECT \
        --zone=$ZONE \
        --machine-type=$MACHINE_TYPE \
        --image-family=rocky-linux-9 \
        --image-project=rocky-linux-cloud \
        --boot-disk-size=20GB \
        --boot-disk-type=pd-balanced \
        --no-address
    
  7. 建立 VM 後,請確認 VM 的狀態。
    gcloud compute instances list --filter="name=$INSTANCE_NAME" --project=$PROJECT
    

4. 設定與 S3 相容的物件儲存空間

在本節中,您將連線至 VM、準備環境,並設定本機 S3 相容物件儲存空間伺服器 (minio) 和 S3 用戶端 (mc),以代管備份 bucket。

  1. 使用 Identity-Aware Proxy (IAP),透過 SSH 連線至 VM。由於 VM 沒有公開 IP 位址,gcloud 會自動透過 IAP 建立 SSH 連線通道。
    gcloud compute ssh $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --tunnel-through-iap
    
  2. 安裝 policycoreutils-python-utils 套件,以便日後視需要設定 SELinux 政策。
    sudo dnf install -y policycoreutils-python-utils
    
  3. 下載與 S3 相容的伺服器二進位檔 (minio)。
    curl -L -o minio \
        https://github.com/minio/minio/releases/download/RELEASE.2024-05-10T01-41-38Z/minio.linux-amd64.RELEASE.2024-05-10T01-41-38Z
    chmod +x minio
    sudo mv minio /usr/local/bin/
    
  4. 為物件儲存伺服器建立資料目錄。
    sudo mkdir -p /var/lib/s3-storage/data
    
  5. 使用範例憑證在背景啟動 S3 相容伺服器。請注意,密鑰長度至少須為 8 個半形字元。
    export MINIO_ROOT_USER="s3admin"
    export MINIO_ROOT_PASSWORD="s3password"
    
    nohup sudo env MINIO_ROOT_USER="$MINIO_ROOT_USER" \
        MINIO_ROOT_PASSWORD="$MINIO_ROOT_PASSWORD" \
        /usr/local/bin/minio server /var/lib/s3-storage/data \
        --console-address ":9001" \
        > s3-server.log 2>&1 &
    
  6. 確認 S3 相容伺服器正在運作。
    ps aux | grep minio
    
  7. 下載並安裝 S3 用戶端 (mc),以便管理值區。
    curl -L -o mc \
        https://github.com/minio/mc/releases/download/RELEASE.2024-05-09T17-04-24Z/mc.linux-amd64.RELEASE.2024-05-09T17-04-24Z
    chmod +x mc
    sudo mv mc /usr/local/bin/
    
  8. 設定 S3 用戶端別名 (s3repo),並建立名為 alloydb-backups 的 bucket。
    mc alias set s3repo http://localhost:9000 s3admin s3password
    mc mb s3repo/alloydb-backups
    

5. 安裝 AlloyDB Omni

在本節中,您將安裝及設定 AlloyDB Omni。

  1. 在 VM 上定義資料目錄、AlloyDB Omni 存放區網址,以及 PostgreSQL postgres 管理員使用者的環境變數。將網址替換為註冊表單提供的網址。
    export PGDATA="/var/lib/alloydbomni"
    export ALLOYDB_OMNI_REPOSITORY_URL="..."
    export PGPASSWORD="YourStrongPassword123!"
    
    注意:本程式碼研究室為了簡化程序,使用指令列上的環境變數傳遞密碼 (例如 PGPASSWORD=$PGPASSWORD),但這可能會在程序清單中公開密碼。在實際工作環境中,請使用更安全的方法,例如 .pgpass 檔案或密鑰管理工具。
  2. 建立資料目錄,AlloyDB Omni 會將資料庫檔案儲存在這個目錄中。
    sudo mkdir -p $PGDATA
    
  3. 建立存放區設定檔,在 VM 上設定 YUM 存放區。
    sudo tee /etc/yum.repos.d/alloydbomni.repo << EOF
    [alloydbomni]
    name=alloydbomni
    baseurl=$ALLOYDB_OMNI_REPOSITORY_URL
    enabled=1
    repo_gpgcheck=0
    gpgcheck=1
    gpgkey=https://dl.google.com/linux/linux_signing_key.pub
    EOF
    
  4. 更新 YUM 快取。
    sudo yum makecache
    
  5. 安裝 AlloyDB Omni RPM 套件的 18 版。
    sudo dnf install -y alloydbomni18
    
  6. 初始化 AlloyDB Omni 資料庫執行個體。
    sudo PGPASSWORD=$PGPASSWORD PGDATA=$PGDATA /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb
    
  7. 按照標準程式碼實驗室做法,暫時停用 SELinux 強制執行模式,方便進行設定。
    sudo setenforce 0
    
  8. 準備 AlloyDB Omni 資料庫執行個體。
    sudo PGPASSWORD=$PGPASSWORD PGDATA=$PGDATA /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
    
  9. 啟用並啟動 AlloyDB Omni systemd 服務。
    sudo systemctl enable alloydbomni18
    sudo systemctl start alloydbomni18
    
  10. 確認 AlloyDB Omni 服務已啟用並順利執行。
    sudo systemctl status alloydbomni18
    

6. 設定 pgBackRest

在本節中,您會從 AlloyDB Omni Common 存放區安裝 pgBackRest,將 /etc/pgbackrest/pgbackrest.conf 設定為使用與 S3 相容的物件儲存空間 bucket 做為備份存放區,並在 AlloyDB Omni 中啟用 WAL 封存。

  1. 在 VM 上為 AlloyDB Omni Common 存放區 URL 定義環境變數。將網址替換為註冊表單提供的網址。
    export ALLOYDB_OMNI_COMMON_REPOSITORY_URL="..."
    
  2. 設定 pgBackRest YUM 存放區,並安裝 pgbackrest-2.58.0。
    sudo tee /etc/yum.repos.d/pgbackrest.repo <<EOF
    [pgbackrest]
    name=Google Alloydb Omni Orchestrator
    baseurl=$ALLOYDB_OMNI_COMMON_REPOSITORY_URL
    enabled=1
    repo_gpgcheck=0
    gpgcheck=0
    gpgkey=https://dl.google.com/linux/linux_signing_key.pub
    EOF
    
    sudo dnf install -y pgbackrest-2.58.0
    
  3. 為 pgBackRest 建立緩衝區和記錄目錄,並將擁有權指派給 postgres 使用者。
    sudo mkdir -p /var/log/pgbackrest
    sudo mkdir -p /var/lib/pgbackrest
    
    sudo chown -R postgres:postgres /var/log/pgbackrest
    sudo chown -R postgres:postgres /var/lib/pgbackrest
    
  4. 建立 /etc/pgbackrest/pgbackrest.conf 並設定嚴格的檔案權限。
    sudo mkdir -p /etc/pgbackrest/conf.d
    
    sudo tee /etc/pgbackrest/pgbackrest.conf <<EOF
    [global]
    spool-path=/var/lib/pgbackrest
    lock-path=/var/lib/pgbackrest
    
    # S3 Repository details
    repo1-type=s3
    repo1-s3-endpoint=http://localhost:9000
    repo1-s3-bucket=alloydb-backups
    repo1-s3-key=s3admin
    repo1-s3-key-secret=s3password
    repo1-s3-region=us-east-1
    repo1-s3-uri-style=path
    repo1-path=/pgbackrest
    
    # Retention policy
    repo1-retention-full=3
    repo1-retention-full-type=count
    repo1-retention-diff=16
    
    # Force immediate checkpoint during backup start
    start-fast=y
    
    # Logging
    log-path=/var/log/pgbackrest
    log-level-console=info
    log-level-file=info
    
    # Compression
    compress-type=zst
    
    # Asynchronous WAL archiving
    archive-async=y
    archive-push-queue-max=1024MB
    archive-get-queue-max=256MB
    archive-missing-retry=y
    
    [global:archive-push]
    process-max=2
    
    [global:archive-get]
    process-max=2
    
    [omni]
    pg1-user=postgres
    pg1-socket-path=/tmp
    pg1-path=$PGDATA
    EOF
    
    sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf
    sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
    
  5. 以 postgres 使用者身分初始化 pgBackRest 節。
    sudo -u postgres pgbackrest --stanza=omni stanza-create
    
    確認輸出內容中顯示 stanza-create command end: completed successfully。
  6. 使用 psql 設定 AlloyDB Omni 封存參數。
    sudo -u postgres /usr/lib/postgresql/18/bin/psql \
        -c "ALTER SYSTEM SET archive_mode = 'on';" \
        -c "ALTER SYSTEM SET archive_command = 'pgbackrest --stanza=omni archive-push %p';" \
        -c "ALTER SYSTEM SET wal_level = 'replica';" \
        -c "ALTER SYSTEM SET max_wal_senders = 10;"
    
  7. 重新啟動 AlloyDB Omni 服務,即可套用封存變更。
    sudo systemctl restart alloydbomni18
    
  8. 確認 pgBackRest 設定完整性和連線能力。
    sudo -u postgres pgbackrest --stanza=omni check
    
    確認輸出內容中顯示 check command end: completed successfully。

7. 執行備份

在本節中,您將使用 pgBackRest 對 AlloyDB Omni 資料庫執行完整備份和差異備份,並將備份檔儲存至與 S3 相容的物件儲存空間。

  1. 使用 pgbackrest 觸發完整備份。
    sudo -u postgres pgbackrest \
        --stanza=omni \
        --type=full backup
    
  2. 使用 pgbackrest 觸發差異備份。
    sudo -u postgres pgbackrest \
        --stanza=omni \
        --type=diff backup
    
    注意:其他支援的備份類型包括 incr (增量)。

8. 列出及驗證備份

在本節中,您將列出備份項目,並確認備份作業是否順利完成。

  1. 使用 pgbackrest info 指令列出備份。
    sudo -u postgres pgbackrest \
        --stanza=omni info
    
    確認輸出內容顯示 status: ok,以及您執行的每個備份指令的備份資訊:
    • 完整備份: full backup: F (例如 20260908-093545F)
    • 差異備份: diff backup: F_D (例如 20260908-093545F_20260908-094016D)
  2. 使用 S3 用戶端 (mc) 驗證儲存在 bucket 中的備份檔案。
    mc ls s3repo/alloydb-backups/pgbackrest/
    
    輸出內容中應會顯示 backup、archive 和 stanza.info。

9. 從備份還原資料

在本節中,您將停止 AlloyDB Omni 資料庫服務,並使用 pgbackrest 從特定備份還原資料。

注意:還原作業會停止資料庫運作,並覆寫所有資料庫資料。

  1. 為要還原的備份 ID 定義環境變數。將值替換為 pgbackrest info輸出中顯示的備份 ID。
    export BACKUPID="20260908-093545F"
    
  2. 停止 AlloyDB Omni 服務,並確認服務已停用。
    sudo systemctl stop alloydbomni18
    sudo systemctl status alloydbomni18
    
    確認輸出內容顯示 Active: inactive。
  3. 執行 pgbackrest restore 並搭配 --delta 選項,從所選備份還原資料庫。
    sudo -u postgres pgbackrest \
        --stanza=omni \
        --set=$BACKUPID \
        --delta restore
    
    確認輸出內容中顯示 restore command end: completed successfully。
  4. 啟動 AlloyDB Omni 服務,並確認服務已啟用且正在執行。
    sudo systemctl start alloydbomni18
    sudo systemctl status alloydbomni18
    
    確認輸出內容顯示 Active: active (running)。

10. 清理與問卷調查

完成程式碼研究室後,您可以清理 Google Cloud 資源,以免產生不必要的費用。

  1. 中斷與 VM 的 SSH 工作階段連線,返回本機 Cloud Shell 終端機。
    exit
    
  2. 刪除 Compute Engine VM 執行個體。
    gcloud compute instances delete $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --quiet
    
  3. 刪除為 SSH 存取權建立的防火牆規則。
    gcloud compute firewall-rules delete allow-ssh-alloydb-omni --project=$PROJECT --quiet
    
  4. 刪除 Cloud NAT 閘道和 Cloud Router。
    gcloud compute routers nats delete alloydb-omni-nat --router=alloydb-omni-router --region=$REGION --project=$PROJECT --quiet
    gcloud compute routers delete alloydb-omni-router --region=$REGION --project=$PROJECT --quiet
    
  5. 刪除自訂路線。
    gcloud compute routes delete default-internet-route --project=$PROJECT --quiet
    

11. 恭喜

恭喜您完成本程式碼研究室!您已成功設定 pgBackRest,可使用與 S3 相容的物件儲存空間,備份及還原 AlloyDB Omni RPM 部署作業。

涵蓋內容

  • 如何設定 Compute Engine VM 以使用 AlloyDB Omni RPM。
  • 如何設定與 S3 相容的物件儲存空間值區。
  • 如何使用與 S3 相容的存放區設定 pgBackRest。
  • 如何執行、列出及驗證完整備份和差異備份。
  • 如何使用 pgBackRest 從備份還原資料。

詳情請參閱「AlloyDB Omni 總覽」。

12. 問卷調查

您會如何使用本教學課程?

僅閱讀內容 閱讀內容並完成練習