すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:pglogical拡張子を使用する

最終更新日:Jan 11, 2024

このトピックでは、PostgreSQLのpglogical拡張機能を使用して、ApsaraDB RDS for PostgreSQLインスタンスのデータをレプリケートする方法について説明します。 この拡張機能は、パブリッシュ /サブスクライブパターンを使用して、論理ストリーミング複製を実装します。

前提条件

  • RDSインスタンスはPostgreSQL 10以降を実行します。

  • RDSインスタンスは、20230830以降のマイナーエンジンバージョンを実行します。

    重要

    拡張機能は、20230830より前のマイナーエンジンバージョンでサポートされています。 ApsaraDB RDS for PostgreSQLの拡張機能管理を標準化し、拡張機能のセキュリティを強化するために、ApsaraDB RDSはマイナーエンジンバージョンのイテレーションで脆弱な拡張機能を最適化する予定です。 その結果、以前のマイナーエンジンバージョンを実行するRDSインスタンスに対して、一部の拡張機能を作成できなくなりました。 詳細については、「 [製品の変更 /機能の変更] ApsaraDB RDS For PostgreSQLインスタンスの拡張機能作成の制限」をご参照ください。

    • 20230830より前のマイナーエンジンバージョンを実行するRDSインスタンスの拡張機能を作成した場合、その拡張機能は影響を受けません。

    • RDSインスタンスの拡張機能を初めて作成する場合、または拡張機能を再作成する場合は、RDSインスタンスのマイナーエンジンバージョンを最新バージョンに更新する必要があります。 詳細については、「マイナーエンジンバージョンの更新」をご参照ください。

  • pglogicalは、RDSインスタンスのshared_preload_librariesパラメーターの値に追加されます。

    shared_preload_librariesパラメーターの値にpglogicalを追加する方法の詳細については、「ApsaraDB RDS For PostgreSQLインスタンスのパラメーターの変更」をご参照ください。

    説明

    shared_preload_librariesパラメーターの値を変更して適用すると、RDSインスタンスがすぐに再起動します。 再起動すると、RDSインスタンスからアプリケーションが切断されます。 注意して進めてください。 再起動がトリガーされる前に、ビジネスを計画し、アプリケーションがデータベースに自動的に再接続するように構成されていることを確認します。

背景情報

PostgreQLのpglogical拡張機能は、パブリッシュ /サブスクライブパターンを使用して、物理レプリケーションの代わりにデータをレプリケートする非常に効率的な方法として機能します。 pglogical拡張機能は、Slony、Bucardo、およびLongisteよりも高いレプリケーション速度を提供し、クロスバージョンのアップグレードをサポートします。 pglogical拡張は、次のシナリオに適しています。

  • 主要なエンジンバージョンのアップグレード

  • RDSインスタンス上のデータベースからのすべてのデータのレプリケーション

  • レプリケーションセットを使用した指定されたテーブル、行、および列のレプリケーション

  • 複数のアップストリームサーバーからのデータの集約とマージ

拡張機能を使用するUse the extension

  • pglogical拡張を有効にします。

    拡張の作成pglogical;
  • pglogical拡張機能を無効にします。

    ドロップ延長pglogical;

論理ストリーミングレプリケーションの設定

  1. パブリッシャーにパブリッシャーノードを作成します。

    説明

    パブリッシャーノードのhostパラメーターを127.0.0.1に設定する必要があります。 SHOW PORT; 文を実行して、発行者ノードのportパラメーターの値を取得できます。

    SELECT pglogical.create_node ()
        node_name := 'provider' 、
        dsn := 'host=127.0.0.1 port=<ポート番号> dbname=test user=provider_user password=provider_pass'
    ); 
  2. レプリケーションセットを設定します。

    パブリックスキーマ内のすべてのテーブルを既定のレプリケーションセットに追加します。

    SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);
    説明
    • レプリケーションセットは、指定されたテーブルのみをレプリケートし、これらのテーブルに対する指定された変更のみをパブリッシャからサブスクライバにレプリケートするために使用されます。

    • 既定のレプリケーションセットは、すべてのテーブルとこれらのテーブルに対するすべての変更をパブリッシャーからサブスクライバーにレプリケートするために使用されます。 詳細については、「pglogicalドキュメント」をご参照ください。

  3. サブスクライバにサブスクライバノードを作成します。

    説明

    サブスクライバーノードのhostパラメーターを127.0.0.1に設定する必要があります。 SHOW PORT; ステートメントを実行して、加入者ノードのportパラメーターの値を取得できます。

    SELECT pglogical.create_node ()
        node_name := 'subscriber' 、
        dsn := 'host=127.0.0.1 port=<ポート番号> dbname=test user=subscriber_user password=subscriber_pass'
    ); 
  4. サブスクライバーにサブスクリプションを作成します。

    説明
    • hostパラメーターは、pgm-**** .pg.rds.aliyuncs.comなど、パブリッシャーの内部エンドポイントに設定する必要があります。 portパラメーターは、パブリッシャーの内部ポート番号に設定する必要があります。

    • ApsaraDB RDSコンソールで、RDSインスタンスの内部エンドポイント内部ポート番号を表示できます。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスのエンドポイントとポート番号の表示と変更」をご参照ください。

    SELECT pglogical.create_subscription ()
        subscription_name := 'subscription' 、
        provider_dsn := 'host=<プロバイダの内部エンドポイント> port=<プロバイダの内部ポート番号> dbname=test user=provider_user password=provider_pass'
    ); 

    サブスクリプションが作成されると、同期プロセスとレプリケーションプロセスがバックグラウンドで開始されます。

参考資料

詳細については、「pglogical documentation」をご参照ください。