はじめに
こんにちは。BFT名古屋支店のマッチです。今回はAWSのサービスのひとつであるRDSを用いてPostgreSQLのロジカルレプリケーションを行う方法について解説します。ロジカルレプリケーションについて詳細は、以下の記事をご参照ください。
AWS上での設定
RDS間でのロジカルレプリケーションを行うにあたって、AWSマネジメントコンソール上で以下の設定が必要となります。
セキュリティグループの設定
[VPC]-[セキュリティグループ]より、パブリッシャーがサブスクライバーに接続できるようにセキュリティグループを設定します。
パラメータグループの設定
[RDS]-[パラメータグループ]より、パブリッシャー(連携元)用とサブスクライバー(連携先)用の2つの新規パラメータグループを作成し、以下のパラメータを変更します。
- rds.logical_replication:1 (共通)
- max_sync_workers_per_subscription:2 (サブスクライバーのみ)
- max_logical_replication_workers:4 (サブスクライバーのみ)
DBインスタンスの作成
パブリッシャー(連携元)用とサブスクライバー(連携先)用の2つのDBインスタンスを作成し、それぞれに上記のセキュリティグループとパラメータグループを設定します。RDSへの接続手順については、以下をご参照ください。
PostgreSQL上での設定
PostgreSQL上でレプリケーションするテーブルの作成とパブリケーション、サブスクリプションの設定を行います。
パブリッシャー側の設定
①データベースの作成
CREATE DATABASE testdb WITH OWNER postgres;
※今回は「testdb」というデータベース名で作成
②テーブルの作成
\c testdb CREATE TABLE testtable (id char(4) not null, Country text not null, Capital text not null, PRIMARY KEY(id));
※今回はtesttableというテーブル名で国名と首都のテーブルを作成
③データの投入
INSERT INTO testtable (id,Country,Capital)VALUES (1,'Japan','Tokyo'), (2,'USA','Washington D.C.'), (3,'France','Paris');
④データの確認
select * from testtable;
⑤パブリケーションの作成(コマンドはDB内の全テーブルを複製対象とする場合のもの)
CREATE PUBLICATION testpub FOR ALL TABLES;
※今回はパブリケーション名を「testpub」として作成
⑥作成されたパブリケーションの確認
SELECT * FROM pg_publication;
サブスクライバー側の設定
①データベースの作成
CREATE DATABASE testdb WITH OWNER postgres;
②テーブルの作成
\c testdb CREATE TABLE testtable (id char(4) not null, Country text not null, Capital text not null, PRIMARY KEY(id));
③サブスクリプションの作成
CREATE SUBSCRIPTION testsub CONNECTION 'host=<パブリッシャーのエンドポイント名> port=5432 dbname=testdb user=postgres password=<パスワード>' PUBLICATION testpub;
※今回はサブスクリプション名を「testsub」として作成
④作成されたサブスクリプションの確認
SELECT * FROM pg_subscription;
⑤データの確認
select * from testtable;
テーブルの中身がパブリッシャーと同様になっていることを確認する。
まとめ
以上が、RDSでのロジカルレプリケーション設定方法となります。EC2上のPostgreSQL間でのロジカルレプリケーション設定については以下の記事をご参照ください。