Edited at

PostgreSQL におけるレプリケーションの仕組み

More than 3 years have passed since last update.

今回は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」以上に設定する必要があります。



※なんとなく絵も書いてみました。


更新SQL実行時のレプリケーションのイメージ


同期レプリケーションのイメージ


非同期レプリケーションのイメージ