ノート:
- このチュートリアルでは、Oracle Cloudへのアクセス権が必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了したら、これらの値をクラウド環境に固有の値に置き換えてください。
pglogical拡張機能を使用したOCI Database with PostgreSQLのクロスリージョン同期
はじめに
pglogical拡張により、PostgreSQLインスタンスを含む複数のOracle Cloud Infrastructure (OCI)データベース間の論理レプリケーションが可能になります。バージョン間PostgreSQLレプリケーションをサポートし、OCI内のリージョンおよびローカル両方の可用性ドメインにデプロイされたデータベース間のデータ同期を容易にします。さらに、マルチクラウド・プロバイダの管理対象PostgreSQLサービスでホストされているデータベースと、クラウドまたはオンプレミスで実行されている自己管理コミュニティPostgreSQLインスタンス間のレプリケーションを可能にし、柔軟性と相互運用性の高いレプリケーション・ソリューションを提供します。
パブリッシュ/サブスクライブ・モデルを利用すると、論理ストリーミング・レプリケーションによって、パブリッシャからサブスクライバへの表、順序およびその他のオブジェクトへの変更をレプリケートできます。この拡張機能は、次のような様々なユースケースに最適です。
-
フル・データベース・レプリケーション。
-
メジャー・バージョンのアップグレード(特定の制限あり)。
-
スキーマ、データ定義言語(DDL)、順序および表データのレプリケーション。
-
Change Data Capture(CDC)
-
複数のアップストリーム・サーバーからのデータの集計およびマージ。
制限事項
pglogical拡張は、次の制限のために特定のユース・ケースに適していない場合があります。
-
複数のデータベースを同時にレプリケートすることはサポートされていません。
-
UNLOGGED
表およびTEMPORARY
表はレプリケートできません。 -
データベース・メタデータの移行はサポートされていません。
-
自動DDLレプリケーションは使用できません。
-
異なるエンコーディングのデータベース間のレプリケーションはサポートされていません。
-
ラージ・オブジェクト(LOB)の変更はデコードできないため、レプリケーションはできません。可能な場合は、byteaデータ型を使用して、LOBではなく大きなバイナリ・データを格納することを検討してください。
詳細は、制限事項および制限事項を参照してください。
目的
- 2つのOCIリージョン間のクロスリージョンにpglogical拡張を実装し、特にアッシュバーンとムンバイの間のレプリケーションを示します。この設定は、単一のOCIリージョン内のリージョン内レプリケーションにも適応できます。
前提条件
-
OCIテナンシへのアクセス。
-
OCI要塞ホスト(OCIコンピュート・イメージ)。
-
各リージョンにVirtual Cloud Network (VCN)を作成します。
-
pglogical拡張は、ソース・データベースとターゲット・データベースの両方にインストールする必要があります。
-
表構造の一貫性:プロバイダとサブスクライバ上の表は、同じ名前を持ち、同じスキーマ内にあり、データ型が一致する同一の列を持つ必要があります。
-
制約の互換性:
CHECK
制約とNOT NULL
制約は、サブスクライバに対してプロバイダに対して許可されているものと同じか、それ以上である必要があります。 -
主キー要件:表の
PRIMARY KEYs
は同じである必要があります。主キー以外にUNIQUE
制約を追加することはお薦めしません。
タスク1: データベース間の通信の確立
リージョン間でDBシステムに接続するには、VCNピアリングを設定する必要があります。
Dynamic Routing Gateway(DRG)を使用してVCNピアリングを作成するには、次のサブタスクに従います。
タスク1.1: VCNsへのDRGのアタッチ
-
要件に従って、ソース・リージョンおよびターゲット・リージョンにVCNを作成します。
-
要件に従って、ソース・リージョンとターゲット・リージョンに動的ルーティング・ゲートウェイ(DRG)を作成します。
-
DRGをVCNにアタッチするには、ソース・リージョンでDRGを選択します。「VCNアタッチメント」および「仮想クラウド・ネットワーク・アタッチメントの作成」をクリックします。
-
「VCNアタッチメントの作成」ページで、アタッチメント名を入力し、「VCN-A」(ソース・リージョンVCN)を選択して、「VCNアタッチメントの作成」をクリックします。
-
同じステップを繰り返して、ターゲットVCNをアタッチします。
詳細は、Dynamic Routing Gatewaysを参照してください。
タスク1.2: リモート・ピアリング接続の作成(RPC)
-
ソース・リージョンRPC (
SOR-RPC
)を作成します。 -
SOURCE DRG
詳細ページに移動し、「リモート・ピアリング接続アタッチメント」をクリックします。 -
「リモート・ピアリング接続の作成」をクリックします。
-
「リモート・ピアリング接続の作成」ページで、接続名を入力してコンパートメントを選択し、「リモート・ピアリング接続の作成」をクリックします。
-
ターゲット・リージョンRPC (
TAR-RPC
)を作成するには、前述と同じ手順を繰り返してターゲット・リージョンRPCを作成します。
タスク1.3: RPC接続の確立
SOR-RPC
接続を使用して、「ソース」リージョンから「ターゲット」リージョンへの接続を確立します。
-
SOURCE DRG
詳細ページに移動し、「リモート・ピアリング接続アタッチメント」をクリックします。 -
「リモート・ピアリング接続」列で接続の名前をクリックして、
SOR-RPC
の詳細を表示します。 -
接続の詳細ページで、「接続の確立」をクリックし、接続名を入力してコンパートメントを選択します。
-
「接続の確立」ページで、「ターゲット・リージョン名」リージョンを選択し、ターゲットRPCのOCID (
TAR-RPC
)を入力します。接続が確立されると、RPCの状態がPEEREDに変更されます。したがって、
TAR-RPC
ピアリング状態もPEEREDに変更されます。
タスク1.4: DRGアタッチメントに送信されるトラフィックを送信するためのVCNsでのルート表の構成
-
Target-VCN
プライベート・サブネットCIDRにトラフィックを送信するように、Source-VCN
でルート表を構成します。 -
Source-VCN
の詳細ページに移動し、「ルート表」をクリックします。 -
ルート表のリストで、「プライベート・サブネット- ソース-VCNのルート表」をクリックします。
-
ルート表ページで、「ルート・ルールの追加」をクリックし、要件に従ってルート・ルール情報を入力します。
-
ソースVCNのプライベート・サブネットCIDRにトラフィックを送信するように
Target-VCN
でルート表を構成するには、前述と同じステップを繰り返して、ソースVCNのプライベート・サブネットのルート表を構成します。
タスク1.5: DRGを介したVCNsのプライベート・サブネット間のトラフィックを許可するセキュリティ・イングレス・ルールの追加
-
ソースVCNのプライベート・サブネット- ソース-VCNのセキュリティ・リストにイングレス・ルールを追加して、
Target-VCN-private
サブネットからSource-VCN-private
サブネットへのトラフィックを許可します -
Source-VCN
詳細ページに移動し、「セキュリティ・リスト」および「プライベート・サブネット- ソース-VCNのセキュリティ・リスト」をクリックします。 -
「セキュリティ・リスト」ページで、「イングレス・ルールの追加」をクリックし、要件に従ってイングレス・ルール情報を入力します。
-
Target-VCN
のプライベート・サブネット- ターゲット-VCNのセキュリティ・リストにイングレス・ルールを追加して、Source-VCN-private
サブネットからTarget-VCN-private
サブネットへのトラフィックを許可するには、前述と同じステップを繰り返して、ターゲット-VCNのイングレス・ルールを追加しますが、適切なイングレス・ルールを使用します。
タスク1.6: クロスリージョン・データベース接続のテストおよび検証
Source-VM
に接続してターゲット・データベースへの接続を検証し、同時にターゲットVMからのソース・データベースの接続を検証して双方向通信を確保します。
タスク2: Aレコード・エントリの構成
リージョン間でデータベース・システムの完全修飾ドメイン名(FQDN)を解決するには、Aレコード・エントリを構成する必要があります。このチュートリアルでは、ムンバイ・リージョンがターゲット・リージョンとして機能します。
-
ターゲット・リージョン(ムンバイ)に切り替え、検索バーに「DNS」と入力し、「プライベート・ビュー」を選択します。
-
現在のリージョンのVCNリストが表示されます。DRGがすでに構成されているVCNを選択します。
-
DNSゾーンのリスト(ムンバイのデータベース・システムのFQDNを含む)が表示されます。
-
リモート・データベース・システムのエントリを追加します。
-
「ゾーンの作成」をクリックします。
-
「ゾーン名」に、他のリージョン(アッシュバーン)のデータベース・システムのFQDNを入力します。
-
新しいゾーン・エントリを追加するには、「作成」をクリックします。
-
-
Aレコード・エントリを構成します。
-
新しく作成したゾーンを開き、「レコードの管理」をクリックして「レコードの追加」を選択します。
-
次の情報を入力します
-
名前:名前を入力します。
-
タイプ: 「A (IPv4 Address)」を選択します。
-
TTL: 3600秒を入力します(アプリケーション要件に従って変更)。
-
RDATAモード: 「基本」を選択します。
-
アドレス:他のリージョンのデータベース・システムのプライマリ・エンドポイントIPアドレスを入力します。
-
-
-
「変更の保存」、「変更の公開」の順にクリックして、構成を適用します。
この設定により、データベース・システムB (ムンバイ)は、FQDNを使用してデータベース・システムA (アッシュバーン)を解決して接続できるようになり、リージョン間のシームレスなデータベース通信が可能になります。
タスク3: リージョン全体でのデータベース・システムの作成
OCIのリージョンにまたがってPostgreSQLデータベースをデプロイし、堅牢なディザスタ・リカバリ(DR)戦略を確立します。OCIでのPostgreSQLデータベースの作成の詳細は、データベース・システムの作成を参照してください。
タスク4: 地域全体でのpglogical拡張の有効化
このチュートリアルでは、アッシュバーンをソース・リージョンとして指定し、ムンバイをターゲット・リージョンとして指定して、DRの実装を示します。
-
アッシュバーン・リージョンで、OCIコンソールにログインし、PostgreSQLデータベースに移動し、データベース・システムを選択し、構成ファイルにアクセスして構成設定を変更します。
-
完全な構成ファイルにリダイレクトされます。「構成のコピー」を選択して続行すると、次のページが表示されます。
-
仕様に基づいて必要な情報を入力します。次に、「ユーザー変数(読取り/書込み)」にナビゲートし、「別の変数の追加」をクリックして、「変数名」に
wal_level
、track_commit_timestamp
に「変数値」にlogical
、1
をそれぞれ選択します。 -
「拡張機能の構成」で、PostgreSQL拡張機能として
pglogical
を選択します。 -
「作成」をクリックして構成ファイルを生成します。
-
データベース・システムに移動し、「構成」で「編集」を選択し、以前に作成した構成をデータベース・システムに適用します。
-
データベース・システムに「更新中」状態が表示されます。アクティブになるまで待ってから続行します。
-
アクティブになったら、データベース・システムにログインし、次の問合せを使用して有効な拡張機能を確認します。
SHOW oci.admin_enabled_extensions;
-
次のコマンドを使用してpglogical拡張を作成します。
CREATE EXTENSION pglogical;
コマンドの出力例を次に示します。
pglogical_source=> show oci.admin_enabled_extensions ; oci.admin_enabled_extensions ------------------------------ pglogical (1 row) pglogical_source=> create extension pglogical; CREATE EXTENSION
-
他の(ムンバイ)リージョン・データベースで同じ手順を繰り返して、pglogical拡張を有効にします。
タスク5: ソース・データベースの構成
次の問合せを実行して、論理レプリケーションを有効にするための権限をソース・データベースに付与します。
alter role psql with replication;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_reset() to psql ;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_setup to psql ;
grant all on FUNCTION pg_catalog.pg_replication_origin_session_setup to psql;
'psql'は、データベース設定プロセス中に作成されたサンプル・ユーザーです。
タスク6: ソース・データベースでのpglogical拡張レプリケーションの設定
-
ソース・データベースにパブリッシャ・ノードを作成します。
SELECT pglogical.create_node(node_name := 'provider1',dsn :='host=primary.xxxxxxxxx.postgresql.us-ashburn-1.oci.oraclecloud.com port=5432 user=xxxx password=xxxxx dbname=pglogical_source');
node_name:
ソース・データベースに作成するパブリッシャの名前を指定します。host:
ソース・データベースの完全修飾ドメイン名(FQDN)を入力します。port_number:
ソース・データベースが稼働しているポートを指定します。database_name:
パブリケーションが作成されるデータベースを指定します。
-
パブリック・スキーマ内のすべての表をデフォルトのレプリケーション・セットに含めます。
SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);
タスク7: ターゲット・データベースの構成
次の問合せを実行して、論理レプリケーションを有効にするターゲット・データベースに対する権限を付与します。
alter role psql with replication;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_reset() to psql ;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_setup to psql ;
grant all on FUNCTION pg_catalog.pg_replication_origin_session_setup to psql;
'psql'は、データベース設定プロセス中に作成されたサンプル・ユーザーです。
必要な権限を付与した後、ソース・データベース構造と一致するようにターゲット・データベース内の必要なすべてのオブジェクトをレプリケートします。
タスク8: ターゲット・データベースでのpglogicalレプリケーションの設定
-
ターゲット・データベースにサブスクライバ・ノードを作成します。
SELECT pglogical.create_node(node_name := 'subscriber1',dsn :='host=primary.xxxxxxx.postgresql.ap-mumbai-1.oci.oraclecloud.com port=5432 user=xxxx password=xxxxx dbname=pglogical_target');
node_name:
ターゲット・データベースのサブスクライバの名前を定義します。host:
ターゲット・データベースの完全修飾ドメイン名(FQDN)を入力します。port_number:
ターゲット・データベースが稼働しているポートを入力します。database_name:
サブスクリプションが作成されるデータベースの名前を指定します。
-
サブスクライバ・ノードにサブスクリプションを作成します。これにより、バックグラウンド同期およびレプリケーション・プロセスが開始されます。
SELECT pglogical.create_subscription(subscription_name := 'subscription1',provider_dsn := 'host=primary.xxxxxxxx.postgresql.us-ashburn-1.oci.oraclecloud.com port=5432 user=xxxx password=xxxxxx dbname=pglogical_source sslmode=verify-full sslrootcert=/etc/opt/postgresql/ca-bundle.pem'); SELECT pglogical.wait_for_subscription_sync_complete('subscription1');
subscription_name:
サブスクリプションの名前を指定します。host:
ソース・データベースのFQDNを指定します。port_number:
ターゲット・データベースが稼働しているポートを指定します。database_name:
ソース・データベースの名前を入力します。
ノート:接続の失敗を防ぐために、サブスクリプション作成文字列で
sslmode=verify-full
およびsslrootcert = /etc/opt/postgresql/ca-bundle.pem
を使用してください。
タスク9: 登録ステータスの確認
次の文を実行して、ターゲット・データベースのサブスクリプションのステータスを確認します。
select * from pglogical.show_subscription_status();
タスク10: データレプリケーションが実行されていることの確認
次の文を実行して、ソース・データベース上のレプリケーションのステータスを確認します。
SELECT * FROM pg_stat_replication;
タスク11: (オプション)レプリケーションの停止または起動
-
ターゲット・データベースで次のコマンドを使用して、サブスクリプションを無効にできます。
select pglogical.alter_subscription_disable('subscription_name');
-
ターゲット・データベースで次のコマンドを使用して、サブスクリプションを有効にできます。
select pglogical.alter_subscription_enable('subscription_name');
ノート:
subscription_name
に、ターゲットで作成されたサブスクリプションの名前を入力します。
タスク12: (オプション)サブスクリプションの削除
ターゲット・データベースのサブスクリプションを削除するには、次のコマンドを実行します。
select pglogical.drop_subscription('subscription_name');
ノート:
subscription_name
に、ターゲットで作成されたサブスクリプションの名前を入力します。
トラブル・シューティング
-
次のエラーが発生した場合は、ターゲットVCNにAレコードを追加する必要があることを示します。解決するには、タスク2を参照してください。
ERROR: could not connect to the postgresql server: could not translate host name "primary.XXXXXXX.postgresql.xx-xxxxx-1.oci.oraclecloud.com" to address: Name or service not known
-
証明の失敗を防ぐには、サブスクリプションの作成時に文字列に
sslmode=verify-full and sslrootcert=/etc/opt/postgresql/ca-bundle.pem
を指定します。could not connect to the postgresql server: connection to server at "primary.XXXXXXX.postgresql.xx-xxxxx-1.oci.oraclecloud.com" , port 5432 failed: SSL error: certificate verify failed
次のステップ
このチュートリアルでは、pglogical拡張を使用して、OCI Database with PostgreSQLのリージョン間でDRソリューションを実装するための包括的なアプローチを提供します。構成プロセス、データ・レプリケーションおよび一般的な問題のトラブルシューティングについて説明します。
また、このメソッドはPostgreSQLアップグレードに適用できるため、停止時間が最小限に抑えられ、ターゲット・データベースがソースと完全に同期されると、スムーズなアプリケーション・カットオーバーが可能になります。
確認
- 作者 - Kaviya Selvaraj (シニア・メンバー・テクニカル・スタッフ)
その他の学習リソース
docs.oracle.com/learnで他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。
製品ドキュメントについては、Oracle Help Centerを参照してください。
Cross-Region Synchronization of OCI Database with PostgreSQL using the pglogical Extension
G31233-03
Copyright ©2025, Oracle and/or its affiliates.