このトピックでは、PostgreSQLのpglogical拡張機能を使用して、ApsaraDB RDS for PostgreSQLインスタンスのデータをレプリケートする方法について説明します。 この拡張機能は、パブリッシュ /サブスクライブパターンを使用して、論理ストリーミング複製を実装します。
前提条件
RDSインスタンスはPostgreSQL 10以降を実行します。
説明この拡張機能は、PostgreSQL 17を実行するApsaraDB RDS for PostgreSQLインスタンスではサポートされていません。
RDSインスタンスは、20230830以降のマイナーエンジンバージョンを実行します。
重要この拡張機能は、20230830以前の一部のマイナーエンジンバージョンでサポートされています。 ただし、ApsaraDB RDSは、標準化された拡張機能管理とセキュリティ強化のために、マイナーエンジンバージョンの更新で脆弱な拡張機能を最適化する予定です。 したがって、20230830より前のマイナーエンジンバージョンを実行する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拡張を有効にします。
CREATE EXTENSION pglogical;
pglogical拡張機能を無効にします。
DROP EXTENSION pglogical;
論理ストリーミングレプリケーションの設定
パブリッシャーにパブリッシャーノードを作成します。
説明パブリッシャーノードの
host
パラメーターを127.0.0.1に設定する必要があります。SHOW PORT;
文を実行して、発行者ノードのport
パラメーターの値を取得できます。SELECT pglogical.create_node( node_name := 'provider', dsn := 'host=127.0.0.1 port=<Port number> dbname=test user=provider_user password=provider_pass' );
レプリケーションセットを設定します。
パブリックスキーマ内のすべてのテーブルを既定のレプリケーションセットに追加します。
SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);
説明レプリケーションセットは、指定されたテーブルのみをレプリケートし、これらのテーブルに対する指定された変更のみをパブリッシャからサブスクライバにレプリケートするために使用されます。
既定のレプリケーションセットは、すべてのテーブルとこれらのテーブルに対するすべての変更をパブリッシャーからサブスクライバーにレプリケートするために使用されます。 詳細については、「pglogicalドキュメント」をご参照ください。
サブスクライバにサブスクライバノードを作成します。
説明サブスクライバーノードの
host
パラメーターを127.0.0.1に設定する必要があります。SHOW PORT;
ステートメントを実行して、加入者ノードのport
パラメーターの値を取得できます。SELECT pglogical.create_node( node_name := 'subscriber', dsn := 'host=127.0.0.1 port=<Port number> dbname=test user=subscriber_user password=subscriber_pass' );
サブスクライバーにサブスクリプションを作成します。
説明host
パラメーターは、pgm-**** .pg.rds.aliyuncs.com
など、パブリッシャーの内部エンドポイントに設定する必要があります。port
パラメーターは、パブリッシャーの内部ポート番号に設定する必要があります。ApsaraDB RDSコンソールで、RDSインスタンスの内部エンドポイントと内部ポート番号を表示できます。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスのエンドポイントとポート番号の表示と変更」をご参照ください。
SELECT pglogical.create_subscription( subscription_name := 'subscription', provider_dsn := 'host=<Internal endpoint of the provider> port=<Internal port number of the provider> dbname=test user=provider_user password=provider_pass' );
サブスクリプションが作成されると、同期プロセスとレプリケーションプロセスがバックグラウンドで開始されます。
関連ドキュメント
詳細については、「pglogical documentation」をご参照ください。