CentOS Stream 8
Sponsored Link

PostgreSQL 12 : ストリーミングレプリケーション2021/06/25

 
PostgreSQL のストリーミングレプリケーションの設定です。
プライマリー/レプリカ型の冗長構成になります。
[1]
[2] プライマリー側ホストの設定です。
[root@www ~]#
vi /var/lib/pgsql/data/postgresql.conf
# 59行目 : コメント解除して変更

listen_addresses = '
*
'
# 193行目 : コメント解除

wal_level = replica
# 198行目 : コメント解除

synchronous_commit = on
# 286行目 : コメント解除 (レプリケーションリクエストを受ける接続最大値)

max_wal_senders = 10
# 288行目 : コメント解除して変更 (アーカイブログのファイルセグメント数の最小値)

wal_keep_segments =
10
# 300行目 : コメント解除して変更

synchronous_standby_names = '
*
'
[root@www ~]#
vi /var/lib/pgsql/data/pg_hba.conf
# 最終行 : 既存設定はコメント化して追記 (接続許可の設定)

# host replication [レプリケーションユーザー] [接続許可IP] [認証方式]

#host    replication     all             127.0.0.1/32            ident
#host    replication     all             ::1/128                 ident
host    replication     rep_user        10.0.0.30/32            md5
host    replication     rep_user        10.0.0.51/32            md5

# レプリケーション用ユーザー作成

[root@www ~]#
su - postgres

[postgres@www ~]$
createuser --replication -P rep_user

Enter password for new role:  
# 任意のパスワード設定

Enter it again:
[postgres@www ~]$
exit
[root@www ~]#
systemctl restart postgresql
[3] レプリカ側ホストの設定です。
# サービスを停止して既存データは削除

[root@node01 ~]#
systemctl stop postgresql

[root@node01 ~]#
rm -rf /var/lib/pgsql/data/*
# プライマリー側のデータバックアップを取得

[root@node01 ~]#
su - postgres

[postgres@node01 ~]$
pg_basebackup -R -h www.srv.world -U rep_user -D /var/lib/pgsql/data -P

Password:  
# レプリケーション用ユーザーのパスワード

30396/30396 kB (100%), 1/1 tablespace
[postgres@node01 ~]$
exit
[root@node01 ~]#
vi /var/lib/pgsql/data/postgresql.conf
# 59行目 : コメント解除して変更

listen_addresses = '
*
'
# 315行目 : コメント解除

hot_standby = on
[root@node01 ~]#
vi /var/lib/pgsql/data/pg_hba.conf
# 最終行 : 既存設定はコメント化して追記 (接続許可の設定)

# host replication [レプリケーションユーザー] [接続許可IP] [認証方式]

#host    replication     all             127.0.0.1/32            ident
#host    replication     all             ::1/128                 ident
host    replication     rep_user        10.0.0.30/32            md5
host    replication     rep_user        10.0.0.51/32            md5

[root@node01 ~]#
systemctl start postgresql

[4] Firewalld を有効にしている場合は、全ノードでサービスの許可が必要です。
[root@www ~]#
firewall-cmd --add-service=postgresql --permanent

success
[root@www ~]#
firewall-cmd --reload

success
[5] プライマリーサーバー側で SQL 実行し、以下のような結果が返ってくれば OK です。
プライマリーサーバー側データベースを作成する等してレプリケーションが行われていることも確認しておくとよいでしょう。
[postgres@www ~]$
psql -c "select usename, application_name, client_addr, state, sync_priority, sync_state from pg_stat_replication;"

 usename  | application_name | client_addr |   state   | sync_priority | sync_state
----------+------------------+-------------+-----------+---------------+------------
 rep_user | walreceiver      | 10.0.0.51   | streaming |             1 | sync
(1 row)
関連コンテンツ