今回はPostgreSQLにおける同期、非同期レプリケーションの違いについて説明します。
PostgreSQLにおける同期/非同期レプリケーションの概要
PostgreSQLでのデータの書き込みはWAL(Write Ahead Log)に変更履歴として記録されています。
WALの詳細についてはマニュアルをご確認ください。
PostgreSQLでは、そのWALをスレーブに転送し、スレーブがそのWALを再生することでレプリケーションを実現しています。
- 同期レプリケーション:WALファイルがスレーブのディスクに書き込まれるまでを保証
- 非同期レプリケーション:WALファイルをスレーブに送信するまでを保証
レプリケーションを行うためのPostgreSQLのプロセス
マスタ、スレーブ間でのWALのやり取りは2つのプロセスによって実現されています。
マスタではwal_senderプロセス、スレーブではwal_receiverプロセスが起動します。まずはwal_receiverが起動し、マスタに接続を行います。wal_receiverプロセスからの接続に応じて、マスタでwal_senderプロセスが起動し、WALの転送が開始されます。
このような仕組みでレプリケーションは行われるため、max_wal_sendersは必ず「1」以上に設定する必要があります。
※なんとなく絵も書いてみました。