スタンバイインスタンスの昇格処理がタイムアウトで失敗する

Enterprise Postgres の技術情報はこちら

ストリーミングレプリケーションのスタンバイインスタンスを昇格させた際、pg_ctl promoteコマンドがタイムアウトでエラー復帰しました。
原因と対処方法を教えてください。
[原因]
スタンバイインスタンスにパラメータ restore_command が設定されており、restore_commandの実行に時間を要した可能性があります。
restore_commandが設定されている場合、スタンバイインスタンスが昇格要求を受信した際にrestore_commandが複数回実行され、昇格処理はそのrestore_commandの完了を待ちます。
このときrestore_commandにscpコマンドなどのネットワーク通信を伴うコピーコマンドが設定されている、かつ、接続先へのネットワークが不通であった場合、コピーコマンドの復帰待ちにより昇格処理に時間がかかる場合があります。
その結果、「pg_ctl: サーバは時間内に昇格しませんでした」というエラーメッセージが表示され、昇格処理がタイムアウトすることがあります。

[対処方法]
restore_commandにscpコマンドなどのネットワーク通信を伴うコピーコマンドを設定する場合、コピーコマンドにタイムアウト時間を設定し、pg_ctl promoteコマンドの待機時間内に処理が完了するようにしてください。
例えば、scpコマンドの場合は -o "ConnectTimeout <タイムアウト時間>" オプションが使用できます。
ネットワーク不通時、昇格要求の受信後は5回程度のrestore_command実行が動作する場合があるため、タイムアウト値についてはpg_ctl promoteのコマンドに指定する待機時間(デフォルト60秒)に対してある程度余裕を持った値を設定してください。

restore_commandパラメータの詳細は、以下のマニュアルを参照してください。
 Fujitsu Enterprise Postgres 17 SP2
  PostgreSQL 17.6 Documentation
   Part III. Server Administration
    Chapter 19. Server Configuration
     19.5. Write Ahead Log
      19.5.5. Archive Recovery
       restore_command

なお記以外の製品バージョン/レベルについては、該当するマニュアル箇所を参照してください。
製品・サービス情報
対象製品Enterprise Postgres
プラットフォームWindows, Solaris, Linux
アンサー種別 運用/保守
このページの先頭へ