Kubernetes ベースの情報については、Kubernetes でのバックアップと復元をご覧ください。
pgBackRest の詳細については、ユーザーガイドをご覧ください。
始める前に
pgBackRest で動作するように AlloyDB Omni を構成するには、次の前提条件を満たしている必要があります。
- 管理するサーバーに AlloyDB Omni をインストールして実行する。
- AlloyDB Omni インスタンスに永続データ ストレージを設定する。
ローカル バックアップを使用する基本構成
このセクションでは、pgBackRest の基本的な設定方法について説明します。基本構成では、スケジュールに基づくバックアップは有効になりません。詳細については、スケジュールされたバックアップを設定するをご覧ください。
pgBackRest は AlloyDB Omni と互換性のある柔軟なサードパーティ プロダクトであるため、ニーズや設定に応じてこれらの手順を変更できます。
バックアップ ボリュームをコンテナにマウントする
整理のために、pgBackRest バックアップ用に別のボリュームを作成してマウントすることを強くおすすめします。新しいボリュームを設定する手順は次のとおりです。
- コンテナが実行されている場合は、コンテナを停止して削除します。 - Docker- docker stop CONTAINER_NAME- docker rm CONTAINER_NAME- Docker- docker stop CONTAINER_NAME- docker rm CONTAINER_NAME- Podman- podman stop CONTAINER_NAME- podman rm CONTAINER_NAME- Podman- podman stop CONTAINER_NAME- podman 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ユーザーに作成後に割り当てられるパスワード。- NEW_PASSWORDは、- DATA_DIRが新しいロケーションの場合にのみ新しいパスワードを設定します。
- DATA_DIR: データが保存されているホスト ディレクトリ パス。
- DATA_DIR: データが保存されているホスト ディレクトリ パス。
- BACKUP_DIR: バックアップが保存されるホスト ディレクトリ。
- HOST_PORT: コンテナが固有のポート- 5432を公開する、ホストマシン上の TCP ポート。ホストマシン上の 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 のドキュメントでは、スタンザにクラスタの関数名を付けることを推奨しています。
リポジトリは、バックアップが書き込まれる場所です。pgBackRest は、特定のスタンザ内の複数のリポジトリへの書き込みをサポートしています。リポジトリに関連するほとんどの構成パラメータには、数値インデックスが付きます。例: repo1-。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 セグメント ファイルを非同期で push します。デフォルトは- 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: コンテナに使用した名前。
 
スケジュール バックアップを設定する
スケジュールされたバックアップを設定するには、必要な頻度で pgbackrest backup コマンドを実行する cron ジョブを作成します。詳細については、バックアップのスケジュールを設定するをご覧ください。
カスタム構成とリモート バックアップ
基本的な構成が機能したら、pgBackRest 構成リファレンスに記載されているオプションを使用して、ニーズと設定に合わせて構成ファイルを調整できます。
たとえば、リモートマシンまたはクラウドにある追加のバックアップ リポジトリの指定などを行うことができます。複数のリポジトリを定義すると、pgBackRest はデフォルトのバックアップ アクションとしてそれらすべてに同時に書き込みます。
たとえば、pgBackRest は、Cloud Storage バケットをバックアップ リポジトリとして使用し、関連する多くの構成オプションをサポートしています。次のセクションでは、これらのオプションの使用方法の 1 つを示します。
Cloud Storage を使用した構成例
このセクションの手順では、ローカル バックアップを使用した基本構成で説明した構成ファイルを使用します。このファイルに対するこれらの変更により、Identity and Access Management(IAM)を介してアクセスされる Cloud Storage バケットに 2 番目のバックアップ リポジトリが定義されます。
この例の自動認証スタイルでは、Compute Engine VM インスタンスで AlloyDB Omni クラスタを実行する必要があります。Compute Engine VM インスタンスで AlloyDB Omni を実行していない場合でも、ローカル ファイル システムに保存された Google Cloud サービス アカウント キーなど、別の認証方法を使用することで、Cloud Storage バケットに引き続きバックアップを行うことができます。
前の構成ファイルを拡張して Cloud Storage ベースの pgBackRest リポジトリを定義する手順は次のとおりです。
- VM インスタンスに接続されているサービス アカウントがバケットに書き込めるように、バケットの権限を構成します。これには、そのサービス アカウントに 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 バケットの名前。
- PATH_IN_BUCKET: pgBackRest でバックアップを保存する Cloud Storage バケット内のディレクトリ パス。
 
- 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 バケットのバックアップ リポジトリを初期化すると、pgBackRest は次の 2 つの場所にバックアップできます。
- ローカル ファイル システム内の場所。構成ファイルの他の場所で - repo1-pathとして定義されています。これは、- pgbackrestコマンドで- --repoが指定されていない場合のデフォルトの場所です。
- この例で設定した - repo2-gcs-bucket構成ディレクティブを使用して定義された Cloud Storage バケット。Cloud Storage バケットを使用するには、- pgbackrestコマンドで- --repo=2を指定します。