BFT名古屋 TECH BLOG

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

【AWS】EC2上のPostreSQL間でのロジカルレプリケーション設定方法

はじめに

こんにちは。BFT名古屋支店のマッチです。今回はAWSPostgreSQLをインストールしたEC2インスタンスを2台用意し、ロジカルレプリケーションを行う手順を解説します。

EC2へのPostgreSQLインストール手順については、以下の記事を参考にしてください。 bftnagoya.hateblo.jp

前提条件

設定手順

パブリッシャー(連携元)とサブスクライバー(連携先)で分けて手順を説明していきます。

パブリッシャー側の設定

postgresql.confの設定

vi /var/lib/pgsql/13/data/postgresql.conf

以下のように設定ファイルを編集する。

#wal_level = 'replica'
変更↓
wal_level = 'logical'

#listen_addresses = 'localhost'
変更↓
listen_addresses = '*'

②pg_hba.confの設定

vi /var/lib/pgsql/13/data/pg_hba.conf

以下のように設定ファイルを編集する。

# IPv4 local connections:
host    all             all             0.0.0.0/0               md5 #この行を追加する

③データベースに接続する

psql -U postgres

④データベースの作成

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;

サブスクライバー側の設定

①データベースに接続する

psql -U postgres

②データベースの作成

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=<パブリッシャーのプライベート IPv4 アドレス> port=5432 dbname=testdb user=postgres password=<パスワード>' PUBLICATION testpub;

※今回はサブスクリプション名を「testsub」として作成

⑤作成されたサブスクリプションの確認

SELECT * FROM pg_subscription;

⑥データの確認

select * from testtable;

テーブルの中身がパブリッシャーと同様になっていることを確認する。

まとめ

以上がロジカルレプリケーションの設定方法となります。ロジカルレプリケーションによるデータの連携はリアルタイムに行われ、ログは「/var/lib/pgsql/13/data/log」の中のファイルに記録されていくので、必要に応じて確認するとよいでしょう。