PostgreSQL12 + Ubuntuでストリーミングレプリケーション
PostgreSQL標準機能でリアルタイムレプリケーション出来る「ストリーミングレプリケーション」が便利
前提条件
プライマリノードのIPは192.168.100.2
レプリカノードのIPは192.168.100.3
レプリケーションユーザーはrep_user
レプリカノードの名前はreplica1
プライマリノード側
レプリケーションに利用するユーザーを作成
code:shell
# rootや他のユーザーではpsqlを使えないのでpostgresとしてログインする
su - postgres
# レプリケーションに使うユーザーを作成
createuser --replication -P rep_user
Enter password for new role: (パスワード)
Enter it again: (再入力)
# postgresからログアウト
exit
各項目を検索してコメントアウトされている物は外していく
code:/etc/postgresql/12/main/postgresql.conf
listen_addresses = '*'
wal_level = replica
synchronous_commit = on
max_wal_senders = 10
wal_keep_segments = 10
synchronous_standby_names = '*'
PostgreSQLを再起動
code:shell
service postgresql restart
pg_hba.confでネットワークセグメント内でrep_userによるレプリケーションを許可
code:/etc/postgresql/12/main/pg_hba.conf
host replication rep_user 192.168.100.0/24 md5
レプリカノード側
code:shell
# PostgreSQLを止める
service postgresql stop
# ローカルのDBを全削除
rm -rf /var/lib/postgresql/12/main
# postgresでログイン
su - postgres
# pg_basebackupでプライマリ側からデータをコピー(データ量によってはかなり長い)
pg_basebackup -R -h 192.168.100.2 -U rep_user -D /var/lib/postgresql/12/main -P
# postgresからログアウト
exit
postgresql.confで接続の許可とhot_standbyを有効にする
code:/etc/postgresql/12/main/postgresql.conf
listen_addresses = '*'
hot_standby = on
pg_basebackupデータコピー後に自動生成されるpostgresql.auto.confを編集してプライマリノードにレプリカノードを認識させる
code:/var/lib/postgresql/12/main/postgresql.auto.conf
# primary_conninfoから始まる行の一番最後(クオーテーション内)にapplication_name=replica1を追加
primary_conninfo = 'user=rep_user ... application_name=replica1'
レプリカ側のPostgreSQLを再起動
code:shell
service postgresql restart