このページでは、オープンソースのデータベース バックアップ サーバーである pgBackRest で動作するように AlloyDB Omni を構成して、データを保護する方法について説明します。
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 を実行していない場合でも、ローカル ファイル システムに保存されたサービス アカウント キーなどの別の認証方法を使用して、Cloud Storage バケットにバックアップできます。 Google Cloud
前の構成ファイルを拡張して 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
を指定します。