postgresqlのレプリの方法について調査


レプリケーションとは?

Replication と書き、レプリカを作成するの意味で
リアルタイムにデータをコピーする技術のこと。

postgresqlのレプリの種類

以下がデフォルトのconfigで、 synchronous_commit でレプリの種類を決めています。

# cat postgresql.conf | grep -A 1 synchronous_commit
==========
#synchronous_commit = on                # synchronization level;
                                        # off, local, remote_write, remote_apply, or on
==========

コメントアウトの箇所にも書かれている通り、以下5種類あります。

  • remote_apply : 完全同期
  • on : 同期
  • remote_write : 準同期
  • local : 非同期
  • off : 完全非同期

と、その前に 先に出てくる WAL という言葉をお話します。
WAL とは Write Ahead Logging の略で、DBのデータを変更する前に更新内容をログに記録します。
もしDBが壊れてしまっても、WALがあればデータを復旧することが出来ます。
WALに書き込まれてから、DBにデータの変更が行われます
それを踏まえて以下を進みます。

remote_apply : 完全同期

完全同期 で、slaveのWALがpostgresqlに書き込まれるまで保証します。

on : 同期

同期で、 slaveのWALのディスク書き込みまで保証されます。

remote_write : 準同期

準同期で、slaveのWALのメモリに書き込まれるまで保証されます。

local : 非同期

slaveには転送を保証しません。
ローカルのWALに書き込まれるまで保証します。

off : 完全非同期

非同期同様、slaveには転送を保証しません。
ローカルのWALへ書き込みすることすら保証しません。
一番パフォーマンスが良いです。

参考