BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【AWS】RDSのPostgreSQL間でロジカルレプリケーションをやってみた

はじめに

こんにちは。BFT名古屋支店のマッチです。今回はAWSのサービスのひとつであるRDSを用いてPostgreSQLのロジカルレプリケーションを行う方法について解説します。ロジカルレプリケーションについて詳細は、以下の記事をご参照ください。

bftnagoya.hateblo.jp

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への接続手順については、以下をご参照ください。

bftnagoya.hateblo.jp

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間でのロジカルレプリケーション設定については以下の記事をご参照ください。

bftnagoya.hateblo.jp