ノート:

pglogical拡張機能を使用したOCI Database with PostgreSQLのクロスリージョン同期

はじめに

pglogical拡張により、PostgreSQLインスタンスを含む複数のOracle Cloud Infrastructure (OCI)データベース間の論理レプリケーションが可能になります。バージョン間PostgreSQLレプリケーションをサポートし、OCI内のリージョンおよびローカル両方の可用性ドメインにデプロイされたデータベース間のデータ同期を容易にします。さらに、マルチクラウド・プロバイダの管理対象PostgreSQLサービスでホストされているデータベースと、クラウドまたはオンプレミスで実行されている自己管理コミュニティPostgreSQLインスタンス間のレプリケーションを可能にし、柔軟性と相互運用性の高いレプリケーション・ソリューションを提供します。

パブリッシュ/サブスクライブ・モデルを利用すると、論理ストリーミング・レプリケーションによって、パブリッシャからサブスクライバへの表、順序およびその他のオブジェクトへの変更をレプリケートできます。この拡張機能は、次のような様々なユースケースに最適です。

制限事項

pglogical拡張は、次の制限のために特定のユース・ケースに適していない場合があります。

詳細は、制限事項および制限事項を参照してください。

目的

前提条件

タスク1: データベース間の通信の確立

リージョン間でDBシステムに接続するには、VCNピアリングを設定する必要があります。

Dynamic Routing Gateway(DRG)を使用してVCNピアリングを作成するには、次のサブタスクに従います。

タスク1.1: VCNsへのDRGのアタッチ

  1. 要件に従って、ソース・リージョンおよびターゲット・リージョンにVCNを作成します。

  2. 要件に従って、ソース・リージョンとターゲット・リージョンに動的ルーティング・ゲートウェイ(DRG)を作成します。

  3. DRGをVCNにアタッチするには、ソース・リージョンでDRGを選択します。「VCNアタッチメント」および「仮想クラウド・ネットワーク・アタッチメントの作成」をクリックします。

  4. 「VCNアタッチメントの作成」ページで、アタッチメント名を入力し、「VCN-A」(ソース・リージョンVCN)を選択して、「VCNアタッチメントの作成」をクリックします。

  5. 同じステップを繰り返して、ターゲットVCNをアタッチします。

詳細は、Dynamic Routing Gatewaysを参照してください。

タスク1.2: リモート・ピアリング接続の作成(RPC)

  1. ソース・リージョンRPC (SOR-RPC)を作成します。

  2. SOURCE DRG詳細ページに移動し、「リモート・ピアリング接続アタッチメント」をクリックします。

  3. リモート・ピアリング接続の作成」をクリックします。

  4. 「リモート・ピアリング接続の作成」ページで、接続名を入力してコンパートメントを選択し、「リモート・ピアリング接続の作成」をクリックします。

  5. ターゲット・リージョンRPC (TAR-RPC)を作成するには、前述と同じ手順を繰り返してターゲット・リージョンRPCを作成します。

タスク1.3: RPC接続の確立

SOR-RPC接続を使用して、「ソース」リージョンから「ターゲット」リージョンへの接続を確立します。

  1. SOURCE DRG詳細ページに移動し、「リモート・ピアリング接続アタッチメント」をクリックします。

  2. 「リモート・ピアリング接続」列で接続の名前をクリックして、SOR-RPCの詳細を表示します。

  3. 接続の詳細ページで、「接続の確立」をクリックし、接続名を入力してコンパートメントを選択します。

  4. 「接続の確立」ページで、「ターゲット・リージョン名」リージョンを選択し、ターゲットRPCのOCID (TAR-RPC)を入力します。接続が確立されると、RPCの状態がPEEREDに変更されます。

    したがって、TAR-RPCピアリング状態もPEEREDに変更されます。

タスク1.4: DRGアタッチメントに送信されるトラフィックを送信するためのVCNsでのルート表の構成

  1. Target-VCNプライベート・サブネットCIDRにトラフィックを送信するように、Source-VCNでルート表を構成します。

  2. Source-VCNの詳細ページに移動し、「ルート表」をクリックします。

  3. ルート表のリストで、「プライベート・サブネット- ソース-VCNのルート表」をクリックします。

  4. ルート表ページで、「ルート・ルールの追加」をクリックし、要件に従ってルート・ルール情報を入力します。

  5. ソースVCNのプライベート・サブネットCIDRにトラフィックを送信するようにTarget-VCNでルート表を構成するには、前述と同じステップを繰り返して、ソースVCNのプライベート・サブネットのルート表を構成します。

タスク1.5: DRGを介したVCNsのプライベート・サブネット間のトラフィックを許可するセキュリティ・イングレス・ルールの追加

  1. ソースVCNのプライベート・サブネット- ソース-VCNのセキュリティ・リストにイングレス・ルールを追加して、Target-VCN-privateサブネットからSource-VCN-privateサブネットへのトラフィックを許可します

  2. Source-VCN詳細ページに移動し、「セキュリティ・リスト」および「プライベート・サブネット- ソース-VCNのセキュリティ・リスト」をクリックします。

  3. 「セキュリティ・リスト」ページで、「イングレス・ルールの追加」をクリックし、要件に従ってイングレス・ルール情報を入力します。

  4. Target-VCNプライベート・サブネット- ターゲット-VCNのセキュリティ・リストにイングレス・ルールを追加して、Source-VCN-privateサブネットからTarget-VCN-privateサブネットへのトラフィックを許可するには、前述と同じステップを繰り返して、ターゲット-VCNのイングレス・ルールを追加しますが、適切なイングレス・ルールを使用します。

タスク1.6: クロスリージョン・データベース接続のテストおよび検証

Source-VMに接続してターゲット・データベースへの接続を検証し、同時にターゲットVMからのソース・データベースの接続を検証して双方向通信を確保します。

タスク2: Aレコード・エントリの構成

リージョン間でデータベース・システムの完全修飾ドメイン名(FQDN)を解決するには、Aレコード・エントリを構成する必要があります。このチュートリアルでは、ムンバイ・リージョンがターゲット・リージョンとして機能します。

  1. ターゲット・リージョン(ムンバイ)に切り替え、検索バーに「DNS」と入力し、「プライベート・ビュー」を選択します。

  2. 現在のリージョンのVCNリストが表示されます。DRGがすでに構成されているVCNを選択します。

  3. DNSゾーンのリスト(ムンバイのデータベース・システムのFQDNを含む)が表示されます。

  4. リモート・データベース・システムのエントリを追加します。

    1. 「ゾーンの作成」をクリックします。

      イメージ

    2. 「ゾーン名」に、他のリージョン(アッシュバーン)のデータベース・システムのFQDNを入力します。

    3. 新しいゾーン・エントリを追加するには、「作成」をクリックします。

  5. Aレコード・エントリを構成します。

    1. 新しく作成したゾーンを開き、「レコードの管理」をクリックして「レコードの追加」を選択します。

    2. 次の情報を入力します

      • 名前:名前を入力します。

      • タイプ: 「A (IPv4 Address)」を選択します。

      • TTL: 3600秒を入力します(アプリケーション要件に従って変更)。

      • RDATAモード: 「基本」を選択します。

      • アドレス:他のリージョンのデータベース・システムのプライマリ・エンドポイントIPアドレスを入力します。

  6. 「変更の保存」「変更の公開」の順にクリックして、構成を適用します。

    この設定により、データベース・システムB (ムンバイ)は、FQDNを使用してデータベース・システムA (アッシュバーン)を解決して接続できるようになり、リージョン間のシームレスなデータベース通信が可能になります。

タスク3: リージョン全体でのデータベース・システムの作成

OCIのリージョンにまたがってPostgreSQLデータベースをデプロイし、堅牢なディザスタ・リカバリ(DR)戦略を確立します。OCIでのPostgreSQLデータベースの作成の詳細は、データベース・システムの作成を参照してください。

タスク4: 地域全体でのpglogical拡張の有効化

このチュートリアルでは、アッシュバーンをソース・リージョンとして指定し、ムンバイをターゲット・リージョンとして指定して、DRの実装を示します。

  1. アッシュバーン・リージョンで、OCIコンソールにログインし、PostgreSQLデータベースに移動し、データベース・システムを選択し、構成ファイルにアクセスして構成設定を変更します。

    イメージ

  2. 完全な構成ファイルにリダイレクトされます。「構成のコピー」を選択して続行すると、次のページが表示されます。

    イメージ

  3. 仕様に基づいて必要な情報を入力します。次に、「ユーザー変数(読取り/書込み)」にナビゲートし、「別の変数の追加」をクリックして、「変数名」wal_leveltrack_commit_timestamp「変数値」logical1をそれぞれ選択します。

  4. 「拡張機能の構成」で、PostgreSQL拡張機能としてpglogicalを選択します。

  5. 「作成」をクリックして構成ファイルを生成します。

    イメージ

  6. データベース・システムに移動し、「構成」「編集」を選択し、以前に作成した構成をデータベース・システムに適用します。

  7. データベース・システムに「更新中」状態が表示されます。アクティブになるまで待ってから続行します。

  8. アクティブになったら、データベース・システムにログインし、次の問合せを使用して有効な拡張機能を確認します。

    SHOW oci.admin_enabled_extensions;
    
  9. 次のコマンドを使用して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
    
  10. 他の(ムンバイ)リージョン・データベースで同じ手順を繰り返して、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拡張レプリケーションの設定

  1. ソース・データベースにパブリッシャ・ノードを作成します。

    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:パブリケーションが作成されるデータベースを指定します。
  2. パブリック・スキーマ内のすべての表をデフォルトのレプリケーション・セットに含めます。

    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レプリケーションの設定

  1. ターゲット・データベースにサブスクライバ・ノードを作成します。

    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:サブスクリプションが作成されるデータベースの名前を指定します。
  2. サブスクライバ・ノードにサブスクリプションを作成します。これにより、バックグラウンド同期およびレプリケーション・プロセスが開始されます。

    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: (オプション)レプリケーションの停止または起動

ノート: subscription_nameに、ターゲットで作成されたサブスクリプションの名前を入力します。

タスク12: (オプション)サブスクリプションの削除

ターゲット・データベースのサブスクリプションを削除するには、次のコマンドを実行します。

select pglogical.drop_subscription('subscription_name');

ノート: subscription_nameに、ターゲットで作成されたサブスクリプションの名前を入力します。

トラブル・シューティング

次のステップ

このチュートリアルでは、pglogical拡張を使用して、OCI Database with PostgreSQLのリージョン間でDRソリューションを実装するための包括的なアプローチを提供します。構成プロセス、データ・レプリケーションおよび一般的な問題のトラブルシューティングについて説明します。

また、このメソッドはPostgreSQLアップグレードに適用できるため、停止時間が最小限に抑えられ、ターゲット・データベースがソースと完全に同期されると、スムーズなアプリケーション・カットオーバーが可能になります。

確認

その他の学習リソース

docs.oracle.com/learnで他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。

製品ドキュメントについては、Oracle Help Centerを参照してください。