PostgreSQL/Pgpool-II

フェイルオーバー

フェイルオーバーのタイミング

フェイルオーバーの内部動作

failoverプロセス概要

failover()関数の処理概要は以下の通りである。(詳細は、ソースコードを参照のこと)

  1. 共有メモリの待ち行列にスイッチ中のフラグを立て、待ち行列のリクエスト処理ループに入る。
    1. 待ち行列のセマフォのロック。待ち行列にリクエストがなければ、アンロックして終了。
    2. 待ち行列からリクエストを取り出し、セフォマのアンロック。
    3. リクエストが「CLOSE_IDLE_REQUEST」ならば、すべての子プロセスにSIGUSR1シグナルを送信する。
      (子プロセスは、SIGUSR1シグナルを受信するとアイドル状態のバックエンド接続を閉じる)
    4. watchdogが有効ならば、watchdogにフェイルオーバー処理を通知する。
    5. 待ち行列のリクエストごとに以下の分岐
      • NODE_UP_REQUESTの場合
        途中
      • PROMOTE_NODE_REQUESTの場合
        途中
      • NODE_DOWN_REQUEST && NODE_QUARANTINE_REQUESTの場合
        プライマリノードがダウンした場合など、このステップを通過する。NODE_QUARANTINE_REQUESTは、watchdogでクォラムを組んでいる時のリクエスト種別である。ここで、障害でダウンしたデータベースノードを調べる。
    6. 新しいマスタノードを決める。
    7. 待ち行列のリクエストごとに以下の分岐
      • ストリーミングレプリケーションかつNODE_UP_REQUESTかつバックエンドが全てダウンしていない場合
        need_to_restart_children = false、partial_restart = false
      • ストリーミングレプリケーションかつ(NODE_DOWN_REQUESTまたはNODE_QUARANTINE_REQUEST)かつREQ_DETAIL_SWITCHOVERでプライマリノードでない場合
        need_to_restart_children = true、partial_restart = true
      • それ以外(プライマリノードダウンはここ
        すべての子プロセスにシグナルSIGQUITが送信される(すべての子プロセスは終了する)。子プロセス再起動のフラグを立てる。
        need_to_restart_children = true、partial_restart = false
    8. 待ち行列のリクエストがNODE_DOWN_REQUESTの場合、failover_commandに指定されたスクリプトを実行する。新しいプライマリノード候補のpromoteが実行される。
    9. 新しいプライマリノードを決める。
    10. ストリーミングレプリケーションモードの場合、follow_master_commandを実行する。この動作は、プロセスをforkして子プロセスで実行される。
    11. need_to_restart_childrenがtrueであれば、子プロセスの再起動を行なう。

参考リンク


トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
目次
ダブルクリックで閉じるTOP | 閉じる
GO TO TOP