PostgreSQLレプリケーション実装

知人の会社の顧客管理システムのDBをVM上のWindowsクライアントで稼働しているのですがたまたまフリーズして知人から連絡が入りました。
普段夜間処理でバックアップを取っているのですが、有事の際は最大1日分リカバリできないことになるのでDBクライアントをもう一台立ててレプリケーションを実装することにしました。

まずマスタサーバーとなる現行DBの設定ファイル( postgresql.conf )の設定を変更します。

WRITE-AHEAD LOG の項目にある wal_level を replica に変更します。

#------------------------------------------------------------------------------
# WRITE-AHEAD LOG
#------------------------------------------------------------------------------

# - Settings -

wal_level = replica

次に REPLICATION 項目にある max_wal_senders max_replication_slots synchronous_standby_names の3つを変更します。

#------------------------------------------------------------------------------
# REPLICATION
#------------------------------------------------------------------------------

max_wal_senders = 5		
max_replication_slots = 10	
synchronous_standby_names = '*'	

マスタサーバー側はこれで設定完了です。設定を読み込ますためサービスを再起動します。

次にスタンバイサーバー側の設定を行います。
同バージョンのPostgreSQLをインストールしてサービスを止め、DATAディレクトリ配下のデータを削除します。
次にスタンバイサーバーのbin配下にある pg_basebackup.exe を使用してマスタサーバーのデータをコピーします。

pg_basebackup.exe -h 192.168.1.*** -p 5432 -U postgres -D C:\PostgreSQL\data -R -P

上記のようにコマンドを実行すると data ディレクトリ配下にマスタサーバーのデータがコピーされます。

コピーが終わったらスタンバイサーバーの設定ファイル postgresql.conf をスタンバイ用に編集します。

#------------------------------------------------------------------------------
# REPLICATION
#------------------------------------------------------------------------------

#max_wal_senders = 5		
#max_replication_slots = 10	
#synchronous_standby_names = '*'
hot_standby = on

次に postgresql.conf にマスタサーバーへの接続情報を primary_conninfo に記載します。

primary_conninfo = 'user=接続ユーザー名 password=パスワード channel_binding=prefer host=マスタサーバーIP port=5432 sslmode=prefer sslcompression=0 sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=disable krbsrvname=postgres target_session_attrs=any'

編集が完了したらサービスを起動します。

以上でレプリケーションの設定は完了です。
マスタサーバー側で下記SQLを実行することでレプリケーションの状況がわかります。

select * from pg_stat_replication;
   :
  state = streaming
  sync_state = sync

state = streaming になってれば同期している状態です。
スタンバイ側から1時間毎にバックアップを取る等もしておこうか思案中です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です