pgBackRest 是 PostgreSQL 適用的彈性備份與還原公用程式。由於 AlloyDB Omni 與 PostgreSQL 相容,因此您可以使用 pgBackRest,透過手動、排程和連續備份功能保護 AlloyDB Omni 資料。
pgBackRest 會將備份資料寫入本機、遠端或雲端存放區。建立至少一個存放區後,您可以使用 pgBackRest,透過各種方法還原 AlloyDB Omni 資料,包括時間點復原 (PITR)。
AlloyDB Omni 的 Docker 容器中包含 pgBackRest。也就是說,您可以使用 pgBackRest 備份及還原 AlloyDB Omni 資料,不必安裝任何額外軟體。
如要進一步瞭解 pgBackRest,請參閱使用者指南。
事前準備
如要設定 AlloyDB Omni 與 pgBackrest 搭配運作,您必須先在受控伺服器上安裝並執行 AlloyDB Omni。
檔案系統路徑注意事項
AlloyDB Omni 隨附的 pgBackRest 軟體與 AlloyDB Omni 執行個體位於同一個 Docker 容器中。因此,您透過設定檔或指令列引數提供給 pgBackRest 的所有檔案系統路徑,都是容器檔案系統上的位置,而非主機的檔案系統。
無論主機系統上的資料目錄位置為何,本頁的許多指令和範例都會將資料目錄稱為 /mnt/disks/pgsql
。這是因為 AlloyDB Omni 會將資料目錄掛接到容器化檔案系統的 /mnt/disks/pgsql
。因此,您可以將資料目錄做為儲存 pgBackRest 設定和存放區的位置,不必再進行其他設定。
如要設定容器化 pgBackRest,從主機檔案系統上 AlloyDB Omni 資料目錄以外的目錄讀取或寫入資料,則需要讓容器可存取這些目錄。
使用本機備份進行基本設定
本節的步驟會引導您完成 pgBackRest 的基本設定,包括簡短的設定檔,該檔案會指示 pgBackRest 將連續備份資料寫入 AlloyDB Omni 資料目錄的子目錄。
由於 pgBackRest 是與 AlloyDB Omni 相容的彈性第三方產品,您可以視需求和偏好修改任何步驟。如果變更任何檔案系統路徑,請注意這些路徑必須對容器顯示;請參閱「檔案系統路徑注意事項」。
設定受信任的 Unix 通訊端驗證
允許 AlloyDB Omni 主機驗證資料庫伺服器的 postgres
使用者,不必提供密碼。這可簡化後續步驟。
在
/var/alloydb/config/pg_hba.conf
檔案中新增下列程式碼:local all postgres trust
重新啟動 AlloyDB Omni:
sudo alloydb database-server stop
sudo alloydb database-server start
建立及設定備份存放區
本節建立的設定檔是範例,可為本機儲存的連續備份啟用最少的設定。您可以視需要修改這個檔案。詳情請參閱「設定叢集節」。
在 AlloyDB Omni 資料目錄中建立
backups
子目錄:mkdir DATA_DIR/backups
將 DATA_DIR 替換為資料目錄的檔案系統路徑,例如
/home/$USER/alloydb-data
。在資料目錄中建立名為
pgbackrest.conf
的檔案,然後將下列內容複製到檔案中:# Paths (all mandatory): repo1-path=/mnt/disks/pgsql/backups spool-path=/mnt/disks/pgsql lock-path=/mnt/disks/pgsql # Retention details: repo1-retention-full=3 repo1-retention-full-type=count repo1-retention-diff=16 # Force a checkpoint to start backup immediately: start-fast=y # Logging parameters: log-path=/mnt/disks/pgsql/backups log-level-console=info log-level-file=info # Recommended ZSTD compression: compress-type=zst # Other performance parameters: 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=/mnt/disks/pgsql pg1-path=/mnt/disks/pgsql/data
使用
pgbackrest stanza-create
指令初始化備份位置:docker exec pg-service pgbackrest --config-path=/mnt/disks/pgsql --stanza=omni stanza-create
設定資料庫以進行持續備份
如要啟用持續備份,請執行下列指令來設定多個 PostgreSQL 參數:
docker exec pg-service psql -h localhost -U postgres \ -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/mnt/disks/pgsql --stanza=omni archive-push %p';" \ -c "ALTER SYSTEM SET archive_mode=on;" \ -c "ALTER SYSTEM SET max_wal_senders=on;" \ -c "ALTER SYSTEM SET wal_level=replica;"
重新啟動 AlloyDB Omni:
sudo alloydb database-server stop
sudo alloydb database-server start
執行 pgBackRest 指令
完成上一節的步驟後,pgBackRest 就會設定為與 AlloyDB Omni 伺服器搭配運作。 如要查看備份狀態、手動建立備份及執行其他工作,請參閱指令參考資料。
最佳做法是使用 docker exec
指令,直接從安裝 AlloyDB Omni 容器的主機執行 pgBackRest 指令。舉例來說,如要建立手動備份,請使用 pgbackrest backup
指令。修改該指令,使其在 docker
exec
指令中執行,並參照您先前建立的設定檔:
docker exec pg-service pgbackrest --config-path=/mnt/disks/pgsql --stanza=omni --type=full backup
--config-path
標記的值為 /mnt/disks/pgsql
,因為這永遠是 AlloyDB Omni 容器檔案系統中資料目錄的位置。如果您已按照前一節的步驟操作,資料目錄就會包含 pgBackRest 指令正常運作所需的 pgbackrest.conf
檔案。詳情請參閱「檔案系統路徑注意事項」。
您也可以使用環境變數設定 pgBackRest 設定檔的位置。詳情請參閱「設定路徑選項」。
設定排程備份
如要設定排程備份,請建立 Cron 工作,視需要執行 pgbackrest backup
指令。詳情請參閱「排定備份時間」。
自訂設定和遠端備份
基本設定完成後,您可以使用pgBackRest 設定參考資料中記錄的選項,調整設定檔以符合需求和偏好設定。
包括指定位於遠端電腦或雲端的其他備份存放區。如果您定義多個存放區,pgBackRest 會同時寫入所有存放區,做為預設備份動作。
舉例來說,pgBackRest 支援使用 Cloud Storage 值區做為備份存放區,並提供多個相關設定選項。下節將示範如何使用這些選項。
使用 Cloud Storage 的設定範例
本節中的步驟是以「使用本機備份進行基本設定」一節中介紹的設定檔為基礎。對該檔案進行這些修改後,即可在 Cloud Storage 值區中定義第二個備份存放區,並透過 Identity and Access Management (IAM) 存取。
本範例中的自動驗證樣式需要 AlloyDB Omni 叢集在 Compute Engine VM 執行個體上執行。如果不是在 Compute Engine VM 執行個體上執行 AlloyDB Omni,您仍可使用其他驗證方法 (例如儲存在本機檔案系統的 Google Cloud 服務帳戶金鑰),將資料備份到 Cloud Storage Bucket。
如要擴充先前的設定檔,定義以 Cloud Storage 為基礎的 pgBackRest 存放區,請按照下列步驟操作:
設定 bucket 權限,允許附加至 VM 執行個體的服務帳戶寫入 bucket。這需要在該服務帳戶上設定 Storage 物件使用者身分與存取權管理角色。
在
pgbackrest.conf
檔案中新增下列程式碼:# Cloud Storage access details: repo2-type=gcs repo2-gcs-key-type=auto repo2-storage-verify-tls=n # Cloud Storage bucket and path details: repo2-gcs-bucket=BUCKET_NAME repo2-path=/pgbackrest # Cloud Storage backup retention parameters: repo2-retention-full=8 repo2-retention-full-type=count
將 BUCKET_NAME 替換為您要讓 pgBackRest 儲存備份資料的 Cloud Storage bucket 名稱。
使用
pgbackrest stanza-create
指令初始化雲端備份位置:docker exec pg-service pgbackrest --config-path=/mnt/disks/pgsql --stanza=omni stanza-create
使用 pgbackrest stanza-create
指令在 Cloud Storage bucket 中初始化備份存放區後,pgBackRest 會將備份資料儲存到兩個位置:
本機檔案系統中的位置,在設定檔中定義為
repo1-path
。Cloud Storage 值區,使用本範例設定的
repo2-
設定指令定義。