pgBackRest を使用して AlloyDB Omni RPM を S3 互換ストレージにバックアップして復元する

1. はじめに

この Codelab では、S3 互換のオブジェクト ストレージを使用して AlloyDB Omni RPM デプロイをバックアップして復元するように pgBackRest を構成する方法について説明します。

注: この Codelab では、チュートリアルとテストの目的で、ローカルの軽量な S3 互換ストレージ エンドポイントとして機能するスタンドアロンの MinIO バイナリを VM にデプロイします。本番環境のワークロードでは、サポートされている、積極的にメンテナンスされている S3 互換のストレージ ソリューションまたはクラウド オブジェクト ストレージを常に使用してください。

前提条件

  • Cloud Console から Google Cloud プロジェクトと Cloud Shell にアクセスする。
  • Google Cloud SDK(gcloud)のインストールと構成

学習内容

  • AlloyDB Omni RPM 用に Compute Engine VM を設定する方法。
  • VM にローカルの S3 互換オブジェクト ストレージ サーバーを設定する方法。
  • S3 互換オブジェクト ストレージをバックアップ リポジトリとして使用するように pgBackRest を構成する方法。
  • バックアップの実行、一覧表示、検証の方法。
  • バックアップからデータを復元する方法。

必要なもの

  • AlloyDB Omni RPM の URL リンクを取得します。リンクは、リポジトリ URL サーバーを含むメールで送信されます。次の環境変数を初期化して、Codelab で使用する URL を準備します。
    export ALLOYDB_OMNI_REPOSITORY_URL="..."
    
  • Google Cloud にアクセスできるターミナル。この目的には Cloud Shell を使用できます。

2. 設定と要件

プロジェクトのセットアップ

Google Cloud プロジェクトの作成

  1. Google Cloud コンソールのプロジェクト セレクタ ページで、Google Cloud プロジェクトを選択または作成します。
  2. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

Cloud Shell の起動

Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。

Cloud Shell をアクティブにするアイコン

  1. Google Cloud コンソールを開き、右上のツールバーにある Cloud Shell アイコンをクリックします。次のいずれかの方法で Cloud Shell を開くこともできます。

通常、環境のプロビジョニングと接続には数分かかります。このオペレーションが完了すると、次のような内容が表示されます。

環境が接続されたことを示す Google Cloud Shell ターミナル{: width="624"}

3. Compute Engine VM を作成する

このセクションでは、gcloud コマンドライン ツールを使用して、単一の Compute Engine(GCE)仮想マシン(VM)を作成します。AlloyDB Omni RPM と完全に互換性のある Rocky Linux 9 イメージを使用します。

  1. プロジェクト ID、VM 名、マシンタイプ、ゾーン、リージョンの環境変数を定義します。
    export PROJECT="your-project-id"
    export INSTANCE_NAME="alloydb-omni-pgbackrest"
    export MACHINE_TYPE="e2-standard-4"
    export ZONE="us-central1-c"
    export REGION="us-central1"
    
  2. Google Cloud アカウントのユーザーを使用してログインし、デフォルトのプロジェクトを構成します。
    gcloud auth login
    gcloud config set project $PROJECT
    
  3. VM への SSH 接続を許可するファイアウォール ルールを作成します。
    gcloud compute firewall-rules create allow-ssh-alloydb-omni \
        --project=$PROJECT \
        --direction=INGRESS \
        --action=allow \
        --rules=tcp:22 \
        --source-ranges="0.0.0.0/0"
    
  4. VM はパブリック IP アドレスなしで作成されるため、VM が外部パッケージ リポジトリにアクセスして必要なソフトウェアをダウンロードできるように、Cloud Router と Cloud NAT ゲートウェイを構成します。
    gcloud compute routers create alloydb-omni-router \
        --project=$PROJECT \
        --network=default \
        --region=$REGION
    
    gcloud compute routers nats create alloydb-omni-nat \
        --project=$PROJECT \
        --router=alloydb-omni-router \
        --region=$REGION \
        --nat-all-subnet-ip-ranges \
        --auto-allocate-nat-external-ips
    
  5. VPC ネットワークに有効なデフォルトのインターネット ゲートウェイ ルートがあることを確認します。一部の共有環境またはプレイグラウンド環境では、クリーンアップ スクリプトによってデフォルト ルートが削除されることがあります。このルートは、Cloud NAT がアウトバウンド トラフィックをインターネットに転送するために必要です。
    gcloud compute routes create default-internet-route \
        --project=$PROJECT \
        --network=default \
        --destination-range=0.0.0.0/0 \
        --next-hop-gateway=default-internet-gateway
    
  6. Rocky Linux 9 と 20 GB のバランス永続ディスクを使用して Compute Engine VM インスタンスを作成します。セキュリティを強化するには、VM にパブリック IP アドレスが割り当てられないように --no-address フラグを使用します。
    gcloud compute instances create $INSTANCE_NAME \
        --project=$PROJECT \
        --zone=$ZONE \
        --machine-type=$MACHINE_TYPE \
        --image-family=rocky-linux-9 \
        --image-project=rocky-linux-cloud \
        --boot-disk-size=20GB \
        --boot-disk-type=pd-balanced \
        --no-address
    
  7. VM を作成したら、VM のステータスを確認します。
    gcloud compute instances list --filter="name=$INSTANCE_NAME" --project=$PROJECT
    

4. S3 互換のオブジェクト ストレージを設定する

このセクションでは、VM に接続し、環境を準備して、バックアップ バケットをホストするローカルの S3 互換オブジェクト ストレージ サーバー(minio)と S3 クライアント(mc)を設定します。

  1. Identity-Aware Proxy(IAP)を使用して SSH 経由で VM に接続します。VM にパブリック IP アドレスがないため、gcloud は IAP を介して SSH 接続を自動的にトンネリングします。
    gcloud compute ssh $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --tunnel-through-iap
    
  2. 必要に応じて後で SELinux ポリシーを構成できるように、policycoreutils-python-utils パッケージをインストールします。
    sudo dnf install -y policycoreutils-python-utils
    
  3. S3 互換サーバー バイナリ(minio)をダウンロードします。
    curl -L -o minio \
        https://github.com/minio/minio/releases/download/RELEASE.2024-05-10T01-41-38Z/minio.linux-amd64.RELEASE.2024-05-10T01-41-38Z
    chmod +x minio
    sudo mv minio /usr/local/bin/
    
  4. オブジェクト ストレージ サーバーのデータ ディレクトリを作成します。
    sudo mkdir -p /var/lib/s3-storage/data
    
  5. バックグラウンドで S3 互換サーバーを起動します。シークレット キーは 8 文字以上にする必要があります。
    export MINIO_ROOT_USER="s3admin"
    export MINIO_ROOT_PASSWORD="s3password"
    
    nohup sudo env MINIO_ROOT_USER="$MINIO_ROOT_USER" \
        MINIO_ROOT_PASSWORD="$MINIO_ROOT_PASSWORD" \
        /usr/local/bin/minio server /var/lib/s3-storage/data \
        --console-address ":9001" \
        > s3-server.log 2>&1 &
    
  6. S3 互換サーバーが実行されていることを確認します。
    ps aux | grep minio
    
  7. バケットを管理するために、S3 クライアント(mc)をダウンロードしてインストールします。
    curl -L -o mc \
        https://github.com/minio/mc/releases/download/RELEASE.2024-05-09T17-04-24Z/mc.linux-amd64.RELEASE.2024-05-09T17-04-24Z
    chmod +x mc
    sudo mv mc /usr/local/bin/
    
  8. S3 クライアント エイリアス(s3repo)を構成し、alloydb-backups という名前のバケットを作成します。
    mc alias set s3repo http://localhost:9000 s3admin s3password
    mc mb s3repo/alloydb-backups
    

5. AlloyDB Omni をインストールする

このセクションでは、AlloyDB Omni をインストールして構成します。

  1. VM で、データ ディレクトリ、AlloyDB Omni リポジトリ URL、PostgreSQL postgres 管理者ユーザーの安全なパスワードの環境変数を定義します。URL は、登録フォームから受け取ったものに置き換えます。
    export PGDATA="/var/lib/alloydbomni"
    export ALLOYDB_OMNI_REPOSITORY_URL="..."
    export PGPASSWORD="YourStrongPassword123!"
    
    注: この Codelab では、コマンドラインで環境変数を使用してパスワードを渡す(PGPASSWORD=$PGPASSWORD など)方法を簡略化のために使用していますが、この方法ではプロセス リストにパスワードが公開される可能性があります。本番環境では、.pgpass ファイルやシークレット マネージャーなど、より安全な方法を使用します。
  2. AlloyDB Omni がデータベース ファイルを保存するデータ ディレクトリを作成します。
    sudo mkdir -p $PGDATA
    
  3. リポジトリ構成ファイルを作成して、VM で YUM リポジトリを構成します。
    sudo tee /etc/yum.repos.d/alloydbomni.repo << EOF
    [alloydbomni]
    name=alloydbomni
    baseurl=$ALLOYDB_OMNI_REPOSITORY_URL
    enabled=1
    repo_gpgcheck=0
    gpgcheck=1
    gpgkey=https://dl.google.com/linux/linux_signing_key.pub
    EOF
    
  4. YUM キャッシュを更新します。
    sudo yum makecache
    
  5. AlloyDB Omni RPM パッケージのバージョン 18 をインストールします。
    sudo dnf install -y alloydbomni18
    
  6. AlloyDB Omni データベース インスタンスを初期化します。
    sudo PGPASSWORD=$PGPASSWORD PGDATA=$PGDATA /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb
    
  7. 標準の Codelab の手順に沿って、セットアップを容易にするため、SELinux の強制モードを一時的に無効にします。
    sudo setenforce 0
    
  8. AlloyDB Omni データベース インスタンスを準備します。
    sudo PGPASSWORD=$PGPASSWORD PGDATA=$PGDATA /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
    
  9. AlloyDB Omni systemd サービスを有効にして開始します。
    sudo systemctl enable alloydbomni18
    sudo systemctl start alloydbomni18
    
  10. AlloyDB Omni サービスがアクティブで、正常に実行されていることを確認します。
    sudo systemctl status alloydbomni18
    

6. pgBackRest を構成する

このセクションでは、AlloyDB Omni Common リポジトリから pgBackRest をインストールし、S3 互換のオブジェクト ストレージ バケットをバックアップ リポジトリとして使用するように /etc/pgbackrest/pgbackrest.conf を構成して、AlloyDB Omni で WAL アーカイブを有効にします。

  1. AlloyDB Omni Common リポジトリ URL の環境変数を VM に定義します。URL は、登録フォームから受け取ったものに置き換えます。
    export ALLOYDB_OMNI_COMMON_REPOSITORY_URL="..."
    
  2. pgBackRest YUM リポジトリを構成し、pgbackrest-2.58.0 をインストールします。
    sudo tee /etc/yum.repos.d/pgbackrest.repo <<EOF
    [pgbackrest]
    name=Google Alloydb Omni Orchestrator
    baseurl=$ALLOYDB_OMNI_COMMON_REPOSITORY_URL
    enabled=1
    repo_gpgcheck=0
    gpgcheck=0
    gpgkey=https://dl.google.com/linux/linux_signing_key.pub
    EOF
    
    sudo dnf install -y pgbackrest-2.58.0
    
  3. pgBackRest のスプール ディレクトリとログ ディレクトリを作成し、所有権を postgres ユーザーに割り当てます。
    sudo mkdir -p /var/log/pgbackrest
    sudo mkdir -p /var/lib/pgbackrest
    
    sudo chown -R postgres:postgres /var/log/pgbackrest
    sudo chown -R postgres:postgres /var/lib/pgbackrest
    
  4. /etc/pgbackrest/pgbackrest.conf を作成し、厳格なファイル権限を構成します。
    sudo mkdir -p /etc/pgbackrest/conf.d
    
    sudo tee /etc/pgbackrest/pgbackrest.conf <<EOF
    [global]
    spool-path=/var/lib/pgbackrest
    lock-path=/var/lib/pgbackrest
    
    # S3 Repository details
    repo1-type=s3
    repo1-s3-endpoint=http://localhost:9000
    repo1-s3-bucket=alloydb-backups
    repo1-s3-key=s3admin
    repo1-s3-key-secret=s3password
    repo1-s3-region=us-east-1
    repo1-s3-uri-style=path
    repo1-path=/pgbackrest
    
    # Retention policy
    repo1-retention-full=3
    repo1-retention-full-type=count
    repo1-retention-diff=16
    
    # Force immediate checkpoint during backup start
    start-fast=y
    
    # Logging
    log-path=/var/log/pgbackrest
    log-level-console=info
    log-level-file=info
    
    # Compression
    compress-type=zst
    
    # Asynchronous WAL archiving
    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=$PGDATA
    EOF
    
    sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf
    sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
    
  5. postgres ユーザーとして pgBackRest スタンザを初期化します。
    sudo -u postgres pgbackrest --stanza=omni stanza-create
    
    出力に stanza-create command end: completed successfully が表示されていることを確認します。
  6. psql を使用して AlloyDB Omni のアーカイブ パラメータを構成します。
    sudo -u postgres /usr/lib/postgresql/18/bin/psql \
        -c "ALTER SYSTEM SET archive_mode = 'on';" \
        -c "ALTER SYSTEM SET archive_command = 'pgbackrest --stanza=omni archive-push %p';" \
        -c "ALTER SYSTEM SET wal_level = 'replica';" \
        -c "ALTER SYSTEM SET max_wal_senders = 10;"
    
  7. AlloyDB Omni サービスを再起動して、アーカイブの変更を適用します。
    sudo systemctl restart alloydbomni18
    
  8. pgBackRest 構成の完全性と接続を確認します。
    sudo -u postgres pgbackrest --stanza=omni check
    
    出力に check command end: completed successfully が表示されていることを確認します。

7. バックアップを実行する

このセクションでは、pgBackRest を使用して、AlloyDB Omni データベースのフル バックアップと差分バックアップを S3 互換のオブジェクト ストレージに実行します。

  1. pgbackrest を使用してフル バックアップをトリガーします。
    sudo -u postgres pgbackrest \
        --stanza=omni \
        --type=full backup
    
  2. pgbackrest を使用して差分バックアップをトリガーします。
    sudo -u postgres pgbackrest \
        --stanza=omni \
        --type=diff backup
    
    注: 他にサポートされているバックアップ タイプには、incr(増分)があります。

8. バックアップを一覧表示して確認する

このセクションでは、バックアップを一覧表示し、正常に完了したことを確認します。

  1. pgbackrest info コマンドを使用してバックアップを一覧表示します。
    sudo -u postgres pgbackrest \
        --stanza=omni info
    
    実行した各バックアップ コマンドのバックアップ情報とともに、出力に status: ok が表示されることを確認します。
    • フル バックアップ: full backup: F(20260908-093545F など)
    • 差分バックアップ: diff backup: F_D(例: 20260908-093545F_20260908-094016D)
  2. S3 クライアント(mc)を使用して、バケットに保存されているバックアップ ファイルを確認します。
    mc ls s3repo/alloydb-backups/pgbackrest/
    
    出力に backup、archive、stanza.info が表示されます。

9. バックアップからデータを復元する

このセクションでは、AlloyDB Omni データベース サービスを停止し、pgbackrest を使用して特定のバックアップからデータを復元します。

注意: 復元すると、データベースが停止し、データベースのデータがすべて上書きされます。

  1. 復元するバックアップ ID の環境変数を定義します。値を pgbackrest info の出力に表示されているバックアップ ID に置き換えます。
    export BACKUPID="20260908-093545F"
    
  2. AlloyDB Omni サービスを停止し、非アクティブであることを確認します。
    sudo systemctl stop alloydbomni18
    sudo systemctl status alloydbomni18
    
    出力に Active: inactive が表示されていることを確認します。
  3. --delta オプションを指定して pgbackrest restore を実行し、選択したバックアップからデータベースを復元します。
    sudo -u postgres pgbackrest \
        --stanza=omni \
        --set=$BACKUPID \
        --delta restore
    
    出力に restore command end: completed successfully が表示されていることを確認します。
  4. AlloyDB Omni サービスを起動し、アクティブで実行中であることを確認します。
    sudo systemctl start alloydbomni18
    sudo systemctl status alloydbomni18
    
    出力に Active: active (running) が表示されていることを確認します。

10. クリーンアップとアンケート

Codelab が終了したら、Google Cloud リソースをクリーンアップして、不要な料金が発生しないようにします。

  1. VM の SSH セッションから切断して、ローカルの Cloud Shell ターミナルに戻ります。
    exit
    
  2. Compute Engine VM インスタンスを削除します。
    gcloud compute instances delete $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --quiet
    
  3. SSH アクセス用に作成したファイアウォール ルールを削除します。
    gcloud compute firewall-rules delete allow-ssh-alloydb-omni --project=$PROJECT --quiet
    
  4. Cloud NAT ゲートウェイと Cloud Router を削除します。
    gcloud compute routers nats delete alloydb-omni-nat --router=alloydb-omni-router --region=$REGION --project=$PROJECT --quiet
    gcloud compute routers delete alloydb-omni-router --region=$REGION --project=$PROJECT --quiet
    
  5. カスタムルートを削除します。
    gcloud compute routes delete default-internet-route --project=$PROJECT --quiet
    

11. 完了

これでこの Codelab は終了です。S3 互換のオブジェクト ストレージを使用して AlloyDB Omni RPM デプロイをバックアップして復元するように pgBackRest を正常に構成しました。

学習した内容

  • AlloyDB Omni RPM 用に Compute Engine VM を設定する方法。
  • S3 互換のオブジェクト ストレージ バケットを設定する方法。
  • S3 互換リポジトリで pgBackRest を構成する方法。
  • 完全バックアップと差分バックアップの実行、一覧表示、検証方法。
  • pgBackRest を使用してバックアップからデータを復元する方法。

詳細については、AlloyDB Omni の概要をご覧ください。

12. アンケート

このチュートリアルの利用方法をお選びください。

全体を通して読むだけ 内容を読んで演習をやり遂げる