[pgsql-jp: 41316] ストリーミングレプリケーションのフェイルバック方法

池田亘 ikeda.wataru @ gmail.com
2013年 1月 11日 (金) 03:10:13 JST


池田と申します。質問させて下さい。
同期レプリケーションの検証中なのですが、フェイルオーバーが完了した後、同じ手順でフェイルバックを実施しようとするとスタンバイに pg_ctl
promote を発行してもプライマリに昇格されません。startup process は recovering xxxx
となったままです。
以下の手順でフェイルバックはできないのでしょうか。
抜けている部分、代替手順などあればご教授ください。


* 検証環境
CentOS release 6.3 x86_64
PostgreSQL 9.2
 primary(-p 5432), standby(-p 5433)とも同一ホストで稼働。

 - postgresql.conf
   --
   wal_level = hot_standby
   archive_mode = off
   max_wal_senders = 2
   wal_keep_segments = 32
   synchronous_standby_names = '*'
   hot_standby = on

- recovery.conf
   --
   standby_mode = 'on'
   primary_conninfo = 'host=localhost port=xxxx user=replicator
application_name=xxxx'
   restore_command = 'cp -a "/var/lib/pgsql/xxxx/data/pg_xlog/%f" "%p"'
   recovery_target_timeline = 'latest'

* フェイルオーバー手順
 0. primary(マスタ) と standby で同期レプリケーション。
 1. primary を疑似クラッシュ。(immediateで停止。)
 2. standby に promote を発行。startup process は waitng、recovery.conf が
recovery.done に置き換わったことを確認。この時のログは以下の通り。
     --
     LOG:  received promote request
     LOG:  redo done at 0/4000058
     LOG:  selected new timeline ID: 2
     LOG:  archive recovery complete
 3. primary に recovery.conf を設置して再起動。
     --
     LOG:  streaming replication successfully connected to primary
     LOG:  standby "primary" is now the synchronous standby with priority 1
 4. standby がマスタに昇格して同期レプリケーションが継続していることを確認。

* フェイルバック手順
 0. standby(マスタ) と primary で同期レプリケーション。
 1. stanby を停止。
 2. primary に promote を発行。startup process は recovering
のまま。recovery.done ファイルに置き換わらない。この時 primary のログは以下を繰り返す。
     --
     LOG:  received promote request
     LOG:  restored log file "000000020000000000000004" from archive
     LOG:  record with zero length at 0/4000118
     FATAL:  could not connect to the primary server: could not
connect to server: Connection refused
 3. standby に recovery.conf を設置して再起動。どちらもスタンバイモードになる。
     --
     [standby]
     LOG:  entering standby mode
     LOG:  restored log file "000000020000000000000004" from archive
     LOG:  consistent recovery state reached at 0/4000118
     LOG:  record with zero length at 0/4000118
     LOG:  record with zero length at 0/4000118
     LOG:  database system is ready to accept read only connections
     LOG:  streaming replication successfully connected to primary
     [primary]
     LOG:  streaming replication successfully connected to primary
 4. いずれもマスタ?かつスタンバイモードになっていることを確認。


pgsql-jp メーリングリストの案内