AlloyDB Omni 用に pgBackRest を設定する

このページでは、オープンソースのデータベース バックアップ サーバーである pgBackRest で動作するように AlloyDB Omni を構成して、データを保護する方法について説明します。

Kubernetes ベースの情報については、Kubernetes のバックアップと復元をご覧ください。

pgBackRest の詳細については、ユーザーガイドをご覧ください。

始める前に

pgBackRest で動作するように AlloyDB Omni を構成する前に、次の前提条件を完了します。

ローカル バックアップを使用した基本構成

このセクションの手順では、pgBackRest の基本的な設定方法について説明します。基本構成では、スケジュールに基づくバックアップは有効になりません。詳細については、スケジュール設定されたバックアップを設定するをご覧ください。

pgBackRest は AlloyDB Omni と互換性のある柔軟なサードパーティ製プロダクトであるため、ニーズや設定に応じてこれらの手順を変更できます。

バックアップ ボリュームをコンテナにマウントする

整理のために、pgBackRest バックアップ用に別のボリュームを作成してマウントすることを強くおすすめします。新しいボリュームを設定する手順は次のとおりです。

  1. コンテナが実行されている場合は、停止して削除します。

    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: コンテナに使用した名前。
  2. コンテナのファイルシステムにバックアップ ディレクトリを作成します。

    Docker

    mkdir -p BACKUP_DIR
    

    Docker

    mkdir -p BACKUP_DIR
    

    Podman

    mkdir -p BACKUP_DIR
    

    Podman

    mkdir -p BACKUP_DIR
    

    次の変数を置き換えます。

    • BACKUP_DIR: バックアップが保存されるホスト ディレクトリ。
  3. 新しいバックアップ ボリュームを使用してコンテナを再作成します。

    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 を指定します。
  4. コンテナ内のバックアップ ディレクトリを 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 を構成したら、バックアップが書き込まれるターゲット リポジトリを初期化する必要があります。これは、構成ファイルで設定されているパラメータを使用するスタンザを作成することで行います。

バックアップ用にデータベースを構成する手順は次のとおりです。

  1. 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: コンテナに使用した名前。
  2. バックアップ用にデータベースを構成します。

    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: コンテナに使用した名前。
  3. コンテナを再起動します。

    Docker

    docker restart CONTAINER_NAME
    

    Docker

    docker restart CONTAINER_NAME
    

    Podman

    podman restart CONTAINER_NAME
    

    Podman

    podman restart CONTAINER_NAME
    

    次の変数を置き換えます。

    • CONTAINER_NAME: コンテナに使用した名前。
  4. バックアップ構成を検証します。

    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: コンテナに使用した名前。
  5. 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: コンテナに使用した名前。

バックアップを実施する

  1. 完全バックアップを実行します。

    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: コンテナに使用した名前。
  2. 差分バックアップを実行します。

    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: コンテナに使用した名前。
  3. バックアップを報告する。

    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 リポジトリを定義する手順は次のとおりです。

  1. VM インスタンスに接続されているサービス アカウントがバケットに書き込めるように、バケットの権限を構成します。これには、そのサービス アカウントに Storage オブジェクト ユーザーの IAM ロールを設定する必要があります。

  2. 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 バケット内のディレクトリパス。
  3. 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 を指定します。

次のステップ