PostgreSQL 12 : ストリーミングレプリケーション2020/01/31 |
PostgreSQL のストリーミングレプリケーションの設定です。
マスター/スレーブ型の冗長構成になります。 |
|
[1] | |
[2] | マスター側ホストの設定です。 |
[root@www ~]#
vi /var/opt/rh/rh-postgresql12/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/opt/rh/rh-postgresql12/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 -bash-4.2$ createuser --replication -P rep_user Enter password for new role: # 任意のパスワード設定 Enter it again:
-bash-4.2$
[root@www ~]# exit
systemctl restart rh-postgresql12-postgresql
|
[3] | スレーブ側ホストの設定です。 |
# サービスを停止して既存データは削除 [root@node01 ~]# systemctl stop rh-postgresql12-postgresql [root@node01 ~]# rm -rf /var/opt/rh/rh-postgresql12/lib/pgsql/data/*
# マスター側のデータバックアップを取得 [root@node01 ~]# su - postgres -bash-4.2$ pg_basebackup -R -h www.srv.world -U rep_user -D /var/opt/rh/rh-postgresql12/lib/pgsql/data -P Password: # レプリケーション用ユーザーのパスワード 33551/33551 kB (100%), 1/1 tablespace -bash-4.2$ exit
[root@node01 ~]#
vi /var/opt/rh/rh-postgresql12/lib/pgsql/data/postgresql.conf # 59行目:コメント解除して変更 listen_addresses = ' * '
# 315行目:コメント解除 hot_standby = on
[root@node01 ~]#
vi /var/opt/rh/rh-postgresql12/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 ~]#
vi /var/opt/rh/rh-postgresql12/lib/pgsql/data/postgresql.auto.conf # 自動生成された認証情報ファイルに [application_name] 追記 (任意の名称 : ホスト名等を指定)
primary_conninfo = 'user=rep_user password=password host=www.srv.world port=5432 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any application_name=node01'
[root@node01 ~]# systemctl start rh-postgresql12-postgresql |
[4] | Firewalld を有効にしている場合は、全ノードでサービスの許可が必要です。 |
[root@www ~]# firewall-cmd --add-service=postgresql --permanent success [root@www ~]# firewall-cmd --reload success |
[5] | マスターサーバー側で SQL 実行し、以下のような結果が返ってくれば OK です。 マスターサーバー側データベースを作成する等してレプリケーションが行われていることも確認しておくとよいでしょう。 |
-bash-4.2$ 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 | node01 | 10.0.0.51 | streaming | 1 | sync (1 row) |
Sponsored Link |