PostgreSQL : ストリーミングレプリケーション Version 10.0.x 2018/2

マスタ側:111.222.333.444 ⇒ スレーブ側:555.666.777.888

前提条件
マスタ側のPostgreSQLは起動していること。
スレーブ側のPostgreSQLは停止していること。

最小手順
1. マスタ側:レプリケーション用ユーザの作成
2. マスタ側:pg_hba.confの修正
3. マスタ側:postgresql.confの修正
4. マスタ側:PostgreSQLの再起動
5. スレーブ側:ベースバックアップの取得
6. スレーブ側:recovry.confの作成
7. スレーブ側:PostgreSQLの起動
8. レプリケーション状態の確認

1. マスタ側:レプリケーション用ユーザの作成
psql -U postgres -d postgres
CREATE ROLE repl_foo LOGIN REPLICATION PASSWORD 'password';
∗ repl_fooはレプリケーション専用ユーザ。

2. マスタ側:pg_hba.confの修正
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    replication     repl_foo        555.666.777.888/32       md5
∗ DATABASEとして指定するreplicationは実際のデータベースではなく特殊変数。

3. マスタ側:postgresql.confの修正
wal_level = hot_standby
max_wal_senders = 2
∗ ストリーミングレプリケーションに必要な最小限の設定パラメータはこの2つ。
∗ max_wal_sendersの値はスレーブ数に1を足した数字。
4. マスタ側:PostgreSQLの再起動
pg_ctl restart
∗ max_wal_sendersの変更に再起動を要する。

5. スレーブ側 : ベースバックアップの取得
pg_basebackup -h 111.222.333.444 -p 5432 -D /usr/local/pgsql/data -X stream --progress -U repl_foo -R 
∗ この時点でのマスタのデータが全てバックアップされる。

6. スレーブ側 : recovery.confの作成
下記内容のテキストファイルを$PGDATA(ここでは/usr/local/pgsql/data)に作成する。
standby_mode = 'on'
primary_conninfo = 'user=repl_foo host=111.222.333.444 port=5432'
7. スレーブ側 : PostgreSQLの起動
pg_ctl start
8. マスタ側:レプリケーション状態の確認
psql -U postgres -d postgres
SELECT * FROM pg_stat_replication;
  pid  | usesysid | usename  | application_name |  client_addr   | client_hostname | client_port |         backend_start         | backend_xmin |   state   | sent_lsn  | write_lsn | flush_lsn | replay_lsn | write_lag | flush_lag | replay_lag | sync_priority | sync_state
-------+----------+----------+------------------+----------------+-----------------+-------------+-------------------------------+--------------+-----------+-----------+-----------+-----------+------------+-----------+-----------+------------+---------------+------------
 15236 |    16384 | repl_foo | walreceiver      | 555.666.777.888 |                 |       52148 | 2018-02-07 00:39:14.738646+09 |              | streaming | 0/301BDF8 | 0/301BDF8 | 0/301BDF8 | 0/301BDF8  |           |           |            |             0 | async