クォーラム(ANY)または優先順位(FIRST)で同期レプリケーションを構成
PostgreSQLレプリケーションコマンド
-- Quorum: commit completes once any 1 standby in the list confirms
ALTER SYSTEM SET synchronous_standby_names = 'ANY 1 (stby_a, stby_b)';
-- Priority based: the first connected standby in the list is sync, the others 'potential'
-- ALTER SYSTEM SET synchronous_standby_names = 'FIRST 1 (stby_a, stby_b)';
SELECT pg_reload_conf();
SELECT application_name, state, sync_state, sync_priority FROM pg_stat_replication ORDER BY application_name;概要
コミット完了前に確認が必要なスタンバイを定義する: ANY Nはクォーラムベース(sync_state = quorum)、FIRST Nはリスト順で最初に接続したN台のスタンバイを同期(sync)とし、残りを待機スタンバイ(potential)とする。確認レベルはsynchronous_commit(remote_write、on、remote_apply)で設定する。
使用する場面
フェイルオーバー時にデータ損失が許されない(RPO = 0)システムで。複数のスタンバイがある場合、単一のスタンバイ障害で書き込みが止まらないようANYが推奨される。
注意
必要な数の同期スタンバイが接続されていない場合、コミットはエラーなしでハングし、アプリケーションが停止する。リスト内の名前はスタンバイのapplication_nameと一致する必要がある。緊急時には、単一セッションでSET synchronous_commit = localにより回避できる。Patroni管理下では、手動設定ではなくsynchronous_modeで管理する。