この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
Slony-Iで同期をとっている環境での、マスタDBとスレーブDBのフェイルオーバー手順です。
フェイルオーバー前
マスタDB:db1
スレーブDB:db2
postgres@db1$ postgres stop
→障害発生の想定
postgres@db1$ slon_kill
→db1,db2それぞれでSlonyデーモンを起動している場合なので注意
postgres@db2$ slonik_failover 1 2 | slonik
→これでdb2がマスタになり更新の操作が行えるようになる。
フェイルオーバーはマスタが死んでても可能
→アプリの参照DBを元スレーブのdb2に変更
postgres@db1,2$ vi /usr/local/etc/slon_tools.conf
----------
$MASTERNODE = 2; <==1を2に変えておく
----------
postgres@db1$ postgres start
→障害復旧の想定
db1 をdb2からスキーマダンプなどしてDB作成(createlang忘れずに)
postgres@db2$ slonik_drop_node 1 | slonik
postgres@db2$ slonik_store_node 1 | slonik
postgres@db2$ slonik_subscribe_set set1 1 | slonik
postgres@db1$ slon_start
→同期開始。冗長性回復