啟用 TDE 的叢集支援使用 pgBackRest 進行透明備份和還原,您不需要執行任何額外步驟。詳情請參閱「建立啟用 TDE 的叢集」。
如需 Kubernetes 相關資訊,請參閱「在 Kubernetes 中備份及還原」。
如要進一步瞭解 pgBackRest,請參閱使用手冊。
事前準備
設定 AlloyDB Omni 以搭配 pgBackRest 運作之前,請先完成下列必要條件:
- 在您控管的伺服器上安裝並執行 AlloyDB Omni。
- 為 AlloyDB Omni 執行個體設定永久資料儲存庫。
基本設定 (含本機備份)
本節步驟將引導您完成 pgBackRest 的基本設定。基本設定不會啟用排程備份功能。詳情請參閱「設定排定備份」。
由於 pgBackRest 是與 AlloyDB Omni 相容的彈性第三方產品,您可以視需要和偏好設定修改這些步驟。
將備份磁碟區掛接至容器
為方便管理,強烈建議您為 pgBackRest 備份建立並掛接獨立磁碟區。如要設定新的磁碟區,請完成下列步驟:
如果容器正在執行,請停止並移除。
Docker
docker stop CONTAINER_NAMEdocker rm CONTAINER_NAMEDocker
docker stop CONTAINER_NAMEdocker rm CONTAINER_NAMEPodman
podman stop CONTAINER_NAMEpodman rm CONTAINER_NAMEPodman
podman stop CONTAINER_NAMEpodman rm CONTAINER_NAME請替換下列變數:
CONTAINER_NAME:您為容器使用的名稱。
在容器的檔案系統中建立備份目錄。
Docker
mkdir -p BACKUP_DIR
Docker
mkdir -p BACKUP_DIR
Podman
mkdir -p BACKUP_DIR
Podman
mkdir -p BACKUP_DIR
替換下列變數:
BACKUP_DIR:儲存備份的主機目錄。
使用新的備份磁碟區重新建立容器。
Docker
docker run -d --name CONTAINER_NAME \ -e POSTGRES_PASSWORD=NEW_PASSWORD \ -v DATA_DIR:/var/lib/postgresql/data \ -v BACKUP_DIR:/var/lib/postgresql/backups \ -p HOST_PORT:5432 \ --restart=always \ google/alloydbomni:latest
Docker
docker run -d --name CONTAINER_NAME \ -e POSTGRES_PASSWORD=NEW_PASSWORD \ -v DATA_DIR:/var/lib/postgresql/data \ -v BACKUP_DIR:/var/lib/postgresql/backups \ -p HOST_PORT:5432 \ --restart=always \ google/alloydbomni:latest
Podman
podman run -d --name CONTAINER_NAME \ -e POSTGRES_PASSWORD=NEW_PASSWORD \ -v DATA_DIR:/var/lib/postgresql/data \ -v BACKUP_DIR:/var/lib/postgresql/backups \ -p HOST_PORT:5432 \ --restart=always \ docker.io/google/alloydbomni:latest
Podman
podman run -d --name CONTAINER_NAME \ -e POSTGRES_PASSWORD=NEW_PASSWORD \ -v DATA_DIR:/var/lib/postgresql/data \ -v BACKUP_DIR:/var/lib/postgresql/backups \ -p HOST_PORT:5432 \ --restart=always \ docker.io/google/alloydbomni:latest
請替換下列變數:
CONTAINER_NAME:容器名稱。NEW_PASSWORD:新容器建立後,指派給容器postgres使用者的密碼。請注意,只有在DATA_DIR是新位置時,NEW_PASSWORD才會設定新密碼。DATA_DIR:儲存資料的主機目錄路徑。BACKUP_DIR:儲存備份的主機目錄。HOST_PORT:主體機器上的 TCP 通訊埠,容器應將自己的通訊埠5432發布至該通訊埠。如要一併在主體機器上使用 PostgreSQL 預設通訊埠,請指定5432。
將容器中的備份目錄設為可由
postgres讀取。Docker
docker exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
Docker
docker exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
Podman
podman exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
Podman
podman exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
請替換下列變數:
CONTAINER_NAME:容器名稱。
設定本機備份
pgBackRest 會為每次備份建立子目錄,並包含純文字資訊清單檔案。
pgBackRest 使用「節」一詞來指稱 PostgreSQL 資料庫叢集的設定。節區名稱可任意指定,不一定要與主機伺服器、PostgreSQL 叢集或資料庫名稱相符。pgBackRest 說明文件建議根據叢集的功能命名 stanza。
備份作業會將資料寫入存放區。pgBackRest 支援在特定節中寫入多個存放區。與存放區相關的大多數設定參數都會以數值建立索引。例如 repo1-。與 PostgreSQL 叢集相關的參數也會獨立建立索引。舉例來說,stanza 中第一個 PostgreSQL 叢集專屬的參數會加上 pg1- 前置字元。
pgBackRest 會使用名為 pgbackrest.conf 的設定檔,保存全域和段落專屬參數。
如要建構及初始化設定檔,以便備份 AlloyDB Omni 叢集,請在主機端備份目錄中建立 pgbackrest.conf 檔案,該目錄是在將備份磁碟區掛接至容器或建立備份目錄時建立。
[global]
# Paths (all mandatory):
repo1-path=/var/lib/postgresql/backups
spool-path=/var/lib/postgresql/backups/spool
lock-path=/var/lib/postgresql/backups
# 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=/var/lib/postgresql/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=/tmp
pg1-path=/var/lib/postgresql/data
部分參數為必填,但如有需要,您可以調整其他參數來符合特定需求,例如:
repo1-path:備份寫入的目錄位置。建議您選擇主機伺服器和容器都能存取的位置。log-path: 寫入記錄檔的目錄位置。如要將記錄檔寫入其他位置,不與備份檔案混在一起,請調整這項參數。repo1-retention-full:要保留的完整備份數量。repo1-retention-full-type: 保留率的評估依據是數量還是時間範圍 (天數)。repo1-retention-diff: 要保留的差異備份數量。
設定檔中與 AlloyDB Omni 相容的其他非關鍵但建議的參數設定包括:
log-level-console:執行 pgBackup 指令時,寫入畫面 (STDOUT) 的記錄層級。您可以在設定檔中調整此值,或使用--log-level-console指令列引數覆寫此值。預設值為warn。start-fast: 強制檢查點快速啟動備份作業。預設值為n。archive-async: 非同步推送 WAL 區隔檔案,提升效能。預設值為n。:用於壓縮和傳輸的程序數量上限。
process-max這通常會設為主要叢集上的max_cpu/4,或備用叢集上的max_cpu/2。預設值為1。compress-type:要使用的壓縮演算法。預設值為gz。
還有許多其他 pgBackRest 設定參數可供調整。本文件僅涵蓋預設 AlloyDB Omni 設定的必要參數,以及一些建議的參數設定。如需完整的設定參數清單,請參閱 pgBackRest 設定參考資料線上說明文件。
設定 pgBackRest 後,必須建立節來初始化備份寫入的目標存放區,節會使用設定檔中設定的參數。
如要設定資料庫備份,請完成下列步驟:
使用
stanza-create指令建立節。Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni stanza-create
Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni stanza-create
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni stanza-create
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni stanza-create
請替換下列變數:
CONTAINER_NAME:容器名稱。
設定資料庫備份。
Docker
docker exec -u postgres CONTAINER_NAME psql \ -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \ -c "ALTER SYSTEM SET archive_mode=on;" \ -c "ALTER SYSTEM SET max_wal_senders=10;" \ -c "ALTER SYSTEM SET wal_level=replica;"
Docker
docker exec -u postgres CONTAINER_NAME psql \ -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \ -c "ALTER SYSTEM SET archive_mode=on;" \ -c "ALTER SYSTEM SET max_wal_senders=10;" \ -c "ALTER SYSTEM SET wal_level=replica;"
Podman
podman exec -u postgres CONTAINER_NAME psql \ -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \ -c "ALTER SYSTEM SET archive_mode=on;" \ -c "ALTER SYSTEM SET max_wal_senders=10;" \ -c "ALTER SYSTEM SET wal_level=replica;"
Podman
podman exec -u postgres CONTAINER_NAME psql \ -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \ -c "ALTER SYSTEM SET archive_mode=on;" \ -c "ALTER SYSTEM SET max_wal_senders=10;" \ -c "ALTER SYSTEM SET wal_level=replica;"
請替換下列變數:
CONTAINER_NAME:容器名稱。
重新啟動容器。
Docker
docker restart CONTAINER_NAME
Docker
docker restart CONTAINER_NAME
Podman
podman restart CONTAINER_NAME
Podman
podman restart CONTAINER_NAME
請替換下列變數:
CONTAINER_NAME:容器名稱。
驗證備份設定。
Docker
docker exec -u postgres CONTAINER_NAME psql \ -c "SELECT name, setting FROM pg_catalog.pg_settings WHERE name IN ('archive_command', 'archive_mode', 'max_wal_senders', 'wal_level') ORDER BY name"Docker
docker exec -u postgres CONTAINER_NAME psql \ -c "SELECT name, setting FROM pg_catalog.pg_settings WHERE name IN ('archive_command', 'archive_mode', 'max_wal_senders', 'wal_level') ORDER BY name"Podman
podman exec -u postgres CONTAINER_NAME psql \ -c "SELECT name, setting FROM pg_catalog.pg_settings WHERE name IN ('archive_command', 'archive_mode', 'max_wal_senders', 'wal_level') ORDER BY name"Podman
podman exec -u postgres CONTAINER_NAME psql \ -c "SELECT name, setting FROM pg_catalog.pg_settings WHERE name IN ('archive_command', 'archive_mode', 'max_wal_senders', 'wal_level') ORDER BY name"請替換下列變數:
CONTAINER_NAME:容器名稱。
執行 pgBackRest 檢查。
Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ check
Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ check
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ check
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ check
請替換下列變數:
CONTAINER_NAME:容器名稱。
執行備份
執行完整備份。
Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ --type=full backup
Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ --type=full backup
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ --type=full backup
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ --type=full backup
請替換下列變數:
CONTAINER_NAME:容器名稱。
執行差異備份。
Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ --type=diff backup
Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ --type=diff backup
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ --type=diff backup
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ --type=diff backup
請替換下列變數:
CONTAINER_NAME:容器名稱。
備份報表。
Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ info
Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ info
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ info
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ info
請替換下列變數:
CONTAINER_NAME:容器名稱。
設定排程備份
如要設定排定的備份,請建立 Cron 工作,視需要執行 pgbackrest backup 指令。詳情請參閱「排定備份作業」。
自訂設定和遠端備份
基本設定完成後,您可以根據需求和偏好設定調整設定檔,方法是使用 pgBackRest 設定參考資料中記錄的選項。
包括指定位於遠端機器或雲端的其他備份存放區。如果您定義多個存放區,pgBackRest 會同時寫入所有存放區,做為預設備份動作。
舉例來說,pgBackRest 支援將 Cloud Storage bucket 做為備份存放區,並提供多種相關設定選項。下一節將示範其中一種使用方式。
使用 Cloud Storage 的設定範例
本節的步驟是以「使用本機備份進行基本設定」一節中介紹的設定檔為基礎。這些修改會定義 Cloud Storage bucket 中的第二個備份存放區,並透過 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 物件使用者 IAM 角色。
在
pgbackrest.conf檔案的[global]區段中加入下列幾行內容:# 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=PATH_IN_BUCKET # Cloud Storage backup retention parameters: repo2-retention-full=8 repo2-retention-full-type=count替換下列變數:
BUCKET_NAME:要讓 pgBackRest 儲存備份的 Cloud Storage bucket 名稱。PATH_IN_BUCKET:Cloud Storage bucket 中的目錄路徑,用於指示 pgBackRest 儲存備份。
使用
pgbackrest stanza-create指令初始化雲端式備份位置:Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ stanza-create
Docker
docker exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ stanza-create
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ stanza-create
Podman
podman exec -u postgres CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/backups \ --stanza=omni \ stanza-create
請替換下列變數:
CONTAINER_NAME:您為容器使用的名稱。
使用 pgbackrest stanza-create 指令在 Cloud Storage bucket 中初始化備份存放區後,pgBackRest 可能會備份至兩個位置:
本機檔案系統中的位置,在設定檔的其他位置定義為
repo1-path。如果未在pgbackrest指令中指定--repo,則這是預設位置。Cloud Storage bucket,使用本範例設定的
repo2-gcs-bucket設定指令定義。如要使用 Cloud Storage bucket,請在pgbackrest指令中指定--repo=2。