はじめに
こんにちは。BFT名古屋支店のマッチです。今回はAWSでPostgreSQLをインストールしたEC2インスタンスを2台用意し、ロジカルレプリケーションを行う手順を解説します。
EC2へのPostgreSQLインストール手順については、以下の記事を参考にしてください。 bftnagoya.hateblo.jp
前提条件
- EC2で使用するOSはRHEL7.7
- PostgreSQLのバージョンは13
- EC2インスタンスにTeraTermからSSH接続できること
- 2台のEC2インスタンスが同一のサブネット上にあり、互いに接続できること
設定手順
パブリッシャー(連携元)とサブスクライバー(連携先)で分けて手順を説明していきます。
パブリッシャー側の設定
①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」の中のファイルに記録されていくので、必要に応じて確認するとよいでしょう。