1. はじめに
この Codelab では、独立した AlloyDB Omni インスタンス間で論理レプリケーションを構成する方法について説明します。単一の Compute Engine VM に複数の AlloyDB Omni インスタンスをデプロイし、pglogical 拡張機能を使用してインスタンス間のレプリケーションを設定します。
単一ノードで複数のインスタンスを実行することは、開発、テスト、レプリケーション環境のシミュレーションに役立ちます。この Codelab を終了すると、1 つのインスタンスがプロバイダとして機能し、もう 1 つのインスタンスがサブスクライバーとして機能する、動作するレプリケーション設定が完成します。
前提条件
- Google Cloud コンソールから Google Cloud プロジェクトと Cloud Shell にアクセスする。
- Google Cloud SDK(
gcloud)のインストールと構成。gcloud のインストールの詳細については、gcloud-install をご覧ください。
学習内容
gcloudを使用して複数の AlloyDB Omni インスタンス用に Compute Engine VM を作成して準備する方法。- AlloyDB Omni RPM をインストールする方法。
systemdテンプレートを使用して複数の AlloyDB Omni インスタンスを構成して初期化する方法。pglogicalを使用して AlloyDB Omni インスタンス間の論理レプリケーションを構成する方法。- プロバイダからサブスクライバーにデータを複製して、レプリケーションを検証する方法。
必要なもの
- AlloyDB Omni RPM の URL リンクを取得します。リポジトリ URL サーバーへのリンクを含むリンクがメールで送信されます。次の環境変数を初期化して、Codelab で使用する URL を準備します。
export ALLOYDB_OMNI_REPOSITORY_URL="..." - Google Cloud にアクセスできるターミナル。この目的には Cloud Shell を使用できます。
2. 設定と要件
プロジェクトの設定
Google Cloud プロジェクトを作成する
- Google Cloud コンソールのプロジェクト セレクタ ページで、Google Cloud プロジェクトを選択または作成します。
- Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
Cloud Shell の起動
Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、クラウドで実行されるコマンドライン環境である Google Cloud Shell を使用します。

- Google Cloud コンソールを開き、右上のツールバーにある Cloud Shell アイコンをクリックします。次のいずれかの方法で Cloud Shell を開くこともできます。
- Google Cloud コンソールを使用している場合は、G キーを押してから S キーを押します。
- こちらのリンクをクリックします。
通常、Cloud Shell のプロビジョニングと環境への接続には数分かかります。このオペレーションが完了すると、次のような出力が表示されます。

3. Compute Engine VM を作成する
このセクションでは、gcloud コマンドライン ツールを使用して単一の Compute Engine 仮想マシン(VM)を作成します。AlloyDB Omni RPM と完全に互換性のある Rocky Linux 9 イメージを使用します。
- プロジェクト ID、VM 名、ゾーン、リージョンの環境変数を定義します。
export PROJECT="your-project-id" export INSTANCE_NAME="alloydb-omni-multi-vm" export ZONE="us-central1-c" export REGION="us-central1" - Google Cloud アカウントを使用してログインし、デフォルト プロジェクトを構成します。
gcloud auth login gcloud config set project $PROJECT - Identity-Aware Proxy(IAP)を使用して 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" - 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 - Virtual Private Cloud(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 - 必要な仕様(16 個の vCPU、20 GB のバランス永続ディスク、Rocky Linux 9)で Compute Engine VM インスタンスを作成します。セキュリティを強化するには、
--no-addressフラグを使用して、VM にパブリック IP アドレスが割り当てられないようにします。gcloud compute instances create $INSTANCE_NAME \ --project=$PROJECT \ --zone=$ZONE \ --machine-type=n2-highmem-16 \ --image-family=rocky-linux-9 \ --image-project=rocky-linux-cloud \ --boot-disk-size=20GB \ --boot-disk-type=pd-balanced \ --no-address - VM を作成したら、VM のステータスを確認します。
gcloud compute instances list --filter="name=$INSTANCE_NAME" --project=$PROJECT
4. VM を準備する
このセクションでは、新しく作成した VM に接続して、オペレーティング システム環境を準備します。
- IAP を使用して SSH 経由で VM に接続します。VM にパブリック IP アドレスがないため、
gcloudは IAP を介して SSH 接続を自動的にトンネリングします。gcloud compute ssh $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --tunnel-through-iap - ベース データ ディレクトリの環境変数を定義します。
export BASE_PGDATA="/var/lib/alloydbomni" - ベース データ ディレクトリを作成します。
sudo mkdir -p $BASE_PGDATA - SELinux ポリシーを構成できるように、
policycoreutils-python-utilsパッケージをインストールします。sudo dnf install -y policycoreutils-python-utils
5. AlloyDB Omni をインストールする
VM の準備ができたら、パッケージ リポジトリを構成して AlloyDB Omni RPM パッケージをインストールできます。
- リポジトリ構成ファイルを作成して、VM で YUM リポジトリを構成します。
$ALLOYDB_OMNI_REPOSITORY_URLは、受け取った URL に置き換えます。export ALLOYDB_OMNI_REPOSITORY_URL="..." 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 - YUM キャッシュを更新します。
sudo yum makecache - AlloyDB Omni RPM パッケージのバージョン 18 をインストールします。
sudo dnf install -y alloydbomni18
6. 複数のインスタンスを構成する
このセクションでは、inst1 と inst2 の 2 つのインスタンスを構成します。
- 複数のインスタンスをサポートするには、
systemdテンプレート サービス ファイルalloydbomni18@.serviceを作成します。sudo tee /etc/systemd/system/alloydbomni18@.service << EOF [Unit] Description=AlloyDB Omni Database server instance %I After=syslog.target After=network-online.target [Service] SyslogIdentifier=alloydbomni-%I Type=notify User=postgres Group=postgres # Load configuration for the instance EnvironmentFile=/etc/alloydbomni/%I.conf OOMScoreAdjust=-1000 Environment=PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj Environment=PG_OOM_ADJUST_VALUE=0 ExecStartPre=/usr/lib/postgresql/18/bin/alloydbomni18-check-db-dir \${PGDATA} ExecStart=/usr/lib/postgresql/18/bin/postgres -D \${PGDATA} ExecReload=/bin/kill -HUP \$MAINPID KillMode=mixed KillSignal=SIGINT TimeoutSec=0 TimeoutStartSec=0 TimeoutStopSec=1h [Install] WantedBy=multi-user.target EOF systemdマネージャー構成を再読み込みして、新しいテンプレート サービスを認識します。sudo systemctl daemon-reload- AlloyDB Omni インスタンスの構成ディレクトリを作成します。
sudo mkdir -p /etc/alloydbomni inst1のデータ ディレクトリを構成します。sudo tee /etc/alloydbomni/inst1.conf << EOF PGDATA=/var/lib/alloydbomni/inst1 EOFinst2のデータ ディレクトリを構成します。sudo tee /etc/alloydbomni/inst2.conf << EOF PGDATA=/var/lib/alloydbomni/inst2 EOF- 構成ファイルに適切な権限を設定します。
sudo chmod 640 /etc/alloydbomni/*.conf sudo chown postgres:postgres /etc/alloydbomni/*.conf - 両方のインスタンスのデータ ディレクトリを作成し、正しい所有権を設定します。
sudo mkdir -p /var/lib/alloydbomni/inst1 sudo mkdir -p /var/lib/alloydbomni/inst2 sudo chown -R postgres:postgres /var/lib/alloydbomni sudo chmod 750 /var/lib/alloydbomni/inst1 /var/lib/alloydbomni/inst2 - 省略可: 各インスタンスのリソース上限を設定します。これにより、1 つのインスタンスがすべての VM リソースを消費することを防ぐことができます。両方のインスタンスの
systemdオーバーライド ディレクトリとファイルを作成します。注: 次の構成で使用されているリソース上限(40%)は、値の例です。特定のワークロードと VM 容量に基づいて上限を調整します。inst1の場合:sudo mkdir -p /etc/systemd/system/alloydbomni18@inst1.service.d sudo tee /etc/systemd/system/alloydbomni18@inst1.service.d/override.conf << EOF [Service] CPUQuota=40% MemoryMax=40% EOFinst2の場合:sudo mkdir -p /etc/systemd/system/alloydbomni18@inst2.service.d sudo tee /etc/systemd/system/alloydbomni18@inst2.service.d/override.conf << EOF [Service] CPUQuota=40% MemoryMax=40% EOF
7. データベースを初期化して準備する
各データベース インスタンスを個別に初期化して準備します。
- セットアップ用に SELinux を制限なしモードに構成します。
注意: SELinux を permissive モードに設定すると、適用が無効になるため、慎重に使用する必要があります。この Codelab では、インストールを簡素化するために使用します。本番環境では、AlloyDB Omni が enforcing モードで実行されるように、適切な SELinux ポリシーを構成します。セットアップ後にsudo setenforce 0sudo setenforce 1を実行して、適用を再度有効にできます。 - PostgreSQL
postgres管理者ユーザーの安全なパスワードを定義します。このパスワードは、この Codelab の両方のインスタンスで使用されます。 注: この Codelab では、コマンドラインで環境変数を使用してパスワードを渡す(export PGPASSWORD="YourStrongPassword123!"PGPASSWORD=$PGPASSWORDなど)方法を簡略化のために使用していますが、この方法ではプロセス リストにパスワードが公開される可能性があります。本番環境では、.pgpassファイルやシークレット マネージャーなどのより安全な方法を使用します。
inst1 を設定する
inst1のデータベース ディレクトリを初期化します。sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst1 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup initdbpostgresql.confファイルを更新して、ポート5433でリッスンするようにインスタンスを構成します。sudo sed -i \ "s/^#*[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9]*/port = 5433/" \ /var/lib/alloydbomni/inst1/postgresql.conf- AlloyDB Omni 用にデータベース インスタンスを準備します。
sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst1 \ PGPORT=5433 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
inst2 をセットアップする
inst2のデータベース ディレクトリを初期化します。sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst2 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb- ポート
5434でリッスンするようにインスタンスを構成します。sudo sed -i \ "s/^#*[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9]*/port = 5434/" \ /var/lib/alloydbomni/inst2/postgresql.conf - データベース インスタンスを準備します。
sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst2 \ PGPORT=5434 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
8. AlloyDB Omni サービスを開始する
これで、両方のインスタンスの systemd サービスを開始できます。
- 新しい構成とオーバーライドを認識するには、
systemdマネージャー構成を再読み込みします。sudo systemctl daemon-reload inst1のサービスを有効にして開始します。sudo systemctl enable alloydbomni18@inst1 sudo systemctl start alloydbomni18@inst1inst2のサービスを有効にして開始します。sudo systemctl enable alloydbomni18@inst2 sudo systemctl start alloydbomni18@inst2- 両方のサービスが有効で実行されていることを確認します。
両方の出力にsudo systemctl status alloydbomni18@inst1 sudo systemctl status alloydbomni18@inst2Active: active (running)が示されていることを確認します。
9. AlloyDB Omni インスタンスを確認する
両方のインスタンスが正しく機能し、独立していることを確認します。
inst1(ポート 5433)に接続します。データベースを初期化して準備するで構成したパスワードの入力を求められます。/usr/lib/postgresql/18/bin/psql -h localhost -p 5433 -U postgres -W- クエリを実行して接続を確認します。
postgres=# SELECT version(); - インスタンスから切断します。
postgres=# \q inst2(ポート 5434)に接続します。/usr/lib/postgresql/18/bin/psql -h localhost -p 5434 -U postgres -W- クエリを実行して接続を確認します。
postgres=# SELECT version(); - インスタンスから切断します。
postgres=# \q
10. pglogical レプリケーション用に構成する
pglogical 拡張機能を使用して、2 つのインスタンス間の論理レプリケーションを構成します。このシナリオでは、inst1 はプロバイダとして機能し、inst2 はサブスクライバーとして機能します。
注: この Codelab では、レプリケーション接続に postgres スーパーユーザーを使用します。本番環境では、REPLICATION 権限を持つ専用のレプリケーション ユーザーを作成し、レプリケートされるテーブルへのアクセス権のみを付与します。
pglogical 用にインスタンスを構成する
shared_preload_librariesでpglogicalを有効にし、postgresql.confでinst1の他のレプリケーション パラメータを構成します。# Append pglogical to shared_preload_libraries sudo sed -i \ "s/\(shared_preload_libraries\s*=\s*'\)\([^']*\)'/\1\2,pglogical'/" \ /var/lib/alloydbomni/inst1/postgresql.conf # Append replication settings sudo tee -a /var/lib/alloydbomni/inst1/postgresql.conf << EOF wal_level = logical max_replication_slots = 10 max_wal_senders = 10 max_worker_processes = 20 track_commit_timestamp = on alloydb.enable_pglogical = on alloydb.logical_decoding = on EOFinst1で構成したinst2の設定を構成します。# Append pglogical to shared_preload_libraries sudo sed -i \ "s/\(shared_preload_libraries\s*=\s*'\)\([^']*\)'/\1\2,pglogical'/" \ /var/lib/alloydbomni/inst2/postgresql.conf # Append replication settings sudo tee -a /var/lib/alloydbomni/inst2/postgresql.conf << EOF wal_level = logical max_replication_slots = 10 max_wal_senders = 10 max_worker_processes = 20 track_commit_timestamp = on alloydb.enable_pglogical = on alloydb.logical_decoding = on EOF- 構成の変更を適用するには、両方のインスタンスを再起動します。
sudo systemctl restart alloydbomni18@inst1 sudo systemctl restart alloydbomni18@inst2
レプリケーションのロールとテーブルを設定する
inst1(プロバイダ、ポート 5433)で、レプリケーション ロールとレプリケートするテーブルを作成します。/usr/lib/postgresql/18/bin/psql -h localhost -p 5433 \ -U postgres -d postgres -c " DO \$\$ BEGIN IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = 'app_owner') THEN CREATE ROLE app_owner WITH LOGIN PASSWORD 'Password123'; END IF; END \$\$; GRANT ALL ON SCHEMA public TO app_owner; CREATE TABLE IF NOT EXISTS replication_test ( id SERIAL PRIMARY KEY, data TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ALTER TABLE replication_test OWNER TO app_owner; "inst2(サブスクライバー、ポート 5434)で、同じロールとテーブル構造を作成します。/usr/lib/postgresql/18/bin/psql -h localhost -p 5434 \ -U postgres -d postgres -c " DO \$\$ BEGIN IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = 'app_owner') THEN CREATE ROLE app_owner WITH LOGIN PASSWORD 'Password123'; END IF; END \$\$; GRANT ALL ON SCHEMA public TO app_owner; CREATE TABLE IF NOT EXISTS replication_test ( id SERIAL PRIMARY KEY, data TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ALTER TABLE replication_test OWNER TO app_owner; "
pglogical ノードとサブスクリプションを構成する
inst1で pglogical プロバイダ ノードを初期化します。/usr/lib/postgresql/18/bin/psql -h localhost -p 5433 \ -U postgres -d postgres -c " CREATE EXTENSION IF NOT EXISTS pglogical; SELECT pglogical.create_node( node_name := 'provider', dsn := 'host=127.0.0.1 port=5433 dbname=postgres user=postgres password=YourStrongPassword123!' ); SELECT pglogical.replication_set_add_table('default', 'replication_test'); "- pglogical サブスクライバー ノードを初期化し、
inst2にサブスクリプションを作成します。 注: サブスクリプションを作成した後、最初の同期が完了するまでに時間がかかることがあります。/usr/lib/postgresql/18/bin/psql -h localhost -p 5434 \ -U postgres -d postgres -c " CREATE EXTENSION IF NOT EXISTS pglogical; SELECT pglogical.create_node( node_name := 'subscriber', dsn := 'host=127.0.0.1 port=5434 dbname=postgres user=postgres password=YourStrongPassword123!' ); SELECT pglogical.create_subscription( subscription_name := 'test_subscription', provider_dsn := 'host=127.0.0.1 port=5433 dbname=postgres user=postgres password=YourStrongPassword123!' ); "
11. pglogical レプリケーションを検証する
プロバイダにデータを挿入し、サブスクライバーでクエリを実行して、レプリケーションが想定どおりに機能していることを確認します。
- サブスクリプションが有効であることを確認します。
replicatingに切り替わるまでに数秒かかることがあります。/usr/lib/postgresql/18/bin/psql -t -A -h localhost -p 5434 \ -U postgres -d postgres -c " SELECT status FROM pglogical.show_subscription_status() WHERE subscription_name = 'test_subscription'; " - 続行する前に、出力に
replicatingが表示されていることを確認します。 - プロバイダ(
inst1)にテスト行を挿入します。/usr/lib/postgresql/18/bin/psql -h localhost -p 5433 \ -U postgres -d postgres -c " INSERT INTO replication_test (data) VALUES ('Hello from replication provider!'); " - データが複製されたことを確認するには、
inst2のテーブルにクエリを実行します。/usr/lib/postgresql/18/bin/psql -h localhost -p 5434 \ -U postgres -d postgres -c "SELECT * FROM replication_test;"inst1に挿入された行が表示されることを確認します。
12. クリーンアップ
リソースをクリーンアップします。まず、VM 上の AlloyDB Omni インスタンスを破棄してから、Google Cloud リソースを削除します。
AlloyDB Omni インスタンスを破棄する
VM を削除する前に、サービスを停止して無効にし、構成とデータを削除して AlloyDB Omni インスタンスをクリーンアップできます。
inst1のサービスを停止して無効にし、データと構成を削除します。sudo systemctl stop alloydbomni18@inst1 sudo systemctl disable alloydbomni18@inst1 sudo rm -rf /var/lib/alloydbomni/inst1 sudo rm -f /etc/alloydbomni/inst1.confinst2のサービスを停止して無効にし、データと構成を削除します。sudo systemctl stop alloydbomni18@inst2 sudo systemctl disable alloydbomni18@inst2 sudo rm -rf /var/lib/alloydbomni/inst2 sudo rm -f /etc/alloydbomni/inst2.conf- systemd マネージャー構成を再読み込みし、失敗したユニットをリセットします。
sudo systemctl daemon-reload sudo systemctl reset-failed
Google Cloud リソースをクリーンアップする
インスタンスをクリーンアップしたら、Compute Engine VM とその他のリソースを削除します。
- SSH セッションから切断します。
exit - Compute Engine VM インスタンスを削除します。
gcloud compute instances delete $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --quiet - ファイアウォール ルールを削除します。
gcloud compute firewall-rules delete allow-ssh-alloydb-omni --project=$PROJECT --quiet - Cloud NAT とルーターを削除します。
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 - デフォルトのインターネット ルートを削除します。
gcloud compute routes delete default-internet-route --project=$PROJECT --quiet
13. 完了
これで、単一の Compute Engine VM に複数の AlloyDB Omni インスタンスをデプロイして構成できました。
学習した内容
- Compute Engine VM をプロビジョニングして準備する方法。
- AlloyDB Omni RPM をインストールする方法。
- 複数のインスタンスに対して
systemdテンプレートを構成する方法。 - 異なるポートで複数の独立したサービスを初期化、構成、起動する方法。
- 各インスタンスの独立性を確認する方法。
詳細
- インストールと構成の詳細については、AlloyDB Omni のドキュメントをご覧ください。
- この Codelab で使用されているレプリケーション拡張機能の詳細については、pglogical のドキュメントをご覧ください。