PostgreSQLのストリーミングレプリケーションメモ

2019-03-05 01:49:48

 昨日はPostgreSQLのロジカルレプリケーションの設定を実験したので、今日はストリーミングレプリケーションを試してみました。ロジカルとストリーミングの大まかな違いは、DBの変更が命令で通知されるか、バイナリで通知されるかの違いとなります。


 ロジカルだと、どのDBのどのテーブルを同期の対象にするか柔軟に指定できます。ただし同期させなかったテーブルに依存するような処理が行われた場合、結果が保証されなくなります。ストリーミングだと同期の対象はサーバ上に存在する全てのインスタンスになるので、柔軟な設定はできません。その代わり全ての情報が一致するので、余計な問題が発生しにくくわかりやすいという利点があります。普通に同期を考えるなら、ストリーミングを使う方が無難な気がします。

 ということで設定メモです。

1 マスタサーバでTCP接続可能な設定を行う
2 マスタサーバでレプリケーション用ユーザを作成し、pg_hba.confで接続許可設定を行う
3 スレーブサーバでpg_backupコマンドを使い、インスタンスを複製する(初期インスタンスがあるならディレクトリごと削除)
4 スレーブサーバを起動する

 接続設定などはpg_backupコマンドを使った時点で勝手に作られるので、意外に簡単に設定可能です。ちなみにネット上の解説ではストリーミングレプリケーションの説明でsynchronous_standby_namesの設定が必ずと言っていいほど出てきますが必要ありません。これを設定すると書き込みが同期式になって、スレーブの書き込みが終了してからコミットが完了するようになります。