PostgreSQL 9.1 - 同期レプリケーションの障害対応

同期レプリケーションでの障害対応について、具体例を使って説明する。
なお、分量が多いのでここでは一部のみ公開。全体はこちら
(2012.10.30追記)最新情報は書籍にまとめたので、参照のこと。




マスタ:スレーブ = 1:1の場合

マスタ障害:スレーブが1台の場合

マスタ1台、スレーブ1台構成で、マスタに障害が発生した場合の対処を説明する。

ver9.0ではスレーブのマスタ昇格にはtriggerファイルの設定が必要だったが、 ver9.1ではpg_ctlコマンドで実行できるようになった。



sampledb=# SELECT application_name,state,sync_priority,sync_state FROM pg_stat_replication;
 application_name |   state   | sync_priority | sync_state 
------------------+-----------+---------------+------------
 slave1           | streaming |             1 | sync
(1 row)

今、マスタをimmediateでshutdownし、slave1サーバ上でpg_ctl promoteコマンドを実行する。

slave1> pg_ctl -D /usr/local/pgsql/data/ promote

これで、slave1は検索だけでなく更新も実行できるようになった。

スレーブ障害:スレーブが1台の場合

スレーブ障害、および複数スレーブ構成での障害対応については上記の書籍を参照。