5.9. フェイルオーバとフェイルバック

5.9.1. フェイルオーバとフェイルバックの設定

failover_command (string)

PostgreSQLバックエンドノードが切り離される時に実行するユーザコマンドを指定します。 Pgpool-IIはコマンド実行の前に、以下の特殊文字をバックエンドの具体的な情報に置き換えます。

表 5-6. フェイルオーバコマンドオプション

特殊文字説明
%d切り離されたノードのDBノードID
%h切り離されたノードのホスト名
%p切り離されたノードのポート番号
%D切り離されたノードのデータベースクラスタパス
%M古いマスターノードのID
%m新しいマスターノードのID
%H新しいマスターノードのホスト名
%P古いプライマリノードのID
%r新しいマスターノードのポート番号
%R新しいマスターノードのデータベースクラスタパス
%% '%'文字

注意: フェイルオーバーが実行されると、基本的にPgpool-IIは子プロセスを切断します。 これにより、Pgpool-IIへの全てのアクティブセッションが終了されます。 その後、Pgpool-IIfailover_commandを実行し、コマンドが完了した後にPgpool-IIはクライアントからの接続を再び受け付ける準備のため新しい子プロセスを起動します。

しかし、Pgpool-II 3.6以降では、そのセッションがダウンしたスタンバイを使用していない場合には、フェイルオーバが起こってもセッションが切断されません。 プライマリサーバがダウンしたときには、依然としてすべてのセッションが切断されます。 ヘルスチェックがタイムアウトした場合にも、すべてのセッションが切断されます。 それ以外のケース、たとえばヘルスチェックの再試行回数がオーバーした場合には、全セッションの切断は起きません。

注意: スクリプトの中でpsqlやその他のコマンドを使ってバックエンドにアクセスし、情報を取り出すことはできますが、psqlPgpool-II自体に対して実行することはできません。 スクリプトはPgpool-IIから呼ばれ、Pgpool-IIがフェイルオーバーを実行している間に動作するからです。

このパラメータはPgpool-IIの設定を再読み込みすることで変更可能です。

failback_command (string)

PostgreSQLバックエンドノードがPgpool-IIに復帰された時に実行するユーザコマンドを指定します。 Pgpool-IIはコマンド実行の前に、以下の特殊文字をバックエンドの具体的な情報に置き換えます。

表 5-7. フェイルバックコマンドオプション

特殊文字説明
%d復帰したノードのDBノードID
%h復帰したノードのホスト名
%p復帰したノードのポート番号
%D復帰したノードのデータベースクラスタパス
%M古いマスターノードのID
%m新しいマスターノードのID
%H新しいマスターノードのホスト名
%P古いプライマリノードのID
%r新しいマスターノードのポート番号
%R新しいマスターノードのデータベースクラスタパス
%% '%'文字

注意: スクリプトの中でpsqlやその他のコマンドを使ってバックエンドにアクセスし、情報を取り出すことはできますが、psqlPgpool-II自体に対して実行することはできません。 スクリプトはPgpool-IIから呼ばれ、Pgpool-IIがフェイルオーバーを実行している間に動作するからです。

このパラメータはPgpool-IIの設定を再読み込みすることで変更可能です。

follow_master_command (string)

プライマリノードのフェイルオーバー後に実行するユーザコマンドを指定します。 この機能は、マスタースレーブモードでストリーミングレプリケーション構成の場合のみ有効です。 Pgpool-IIはコマンド実行の前に、以下の特殊文字をバックエンドの具体的な情報に置き換えます。

表 5-8. フォローマスターコマンドオプション

特殊文字説明
%d切り離されたノードのDBノードID
%h切り離されたノードのホスト名
%p切り離されたノードのポート番号
%D切り離されたノードのデータベースクラスタパス
%M古いマスターノードのID
%m新しいプライマリノードのID
%H新しいプライマリノードのホスト名
%P古いプライマリノードのID
%r新しいプライマリノードのポート番号
%R新しいプライマリノードのデータベースクラスタパス
%% '%'文字

注意: follow_master_commandが空文字列でない場合、ストリーミングレプリケーションによるマスタースレーブでプライマリノードのフェイルオーバーが完了した後に、Pgpool-IIは新しいプライマリ以外のすべてのノードを切り離し、クライアントから再び接続を受け付ける準備のため再度新しい子プロセスを起動します。 その後、Pgpool-IIは切り離されたそれぞれのノードに対してfollow_master_commandに設定したコマンドを実行します。

通常は、follow_master_commandコマンドはpcp_recovery_nodeコマンドを呼んで新しいプライマリからスレーブをリカバリするために使用します。

このパラメータはPgpool-IIの設定を再読み込みすることで変更可能です。

fail_over_on_backend_error (boolean)

onに設定した場合、Pgpool-IIPostgreSQLバックエンド接続からの読み出し、書き込みのエラーをバックエンドノードの故障と見なし、現在のセッションを切断した後にそのノードをフェイルオーバします。 offに設定した場合、そのようなエラーの場合でもPgpool-IIは単にエラーをレポートしセッションが切断するのみです。

注意: fail_over_on_backend_errorをoffにする場合は、バックエンドのヘルスチェックを有効にすることをお勧めします(項5.8をご覧ください)。 なお、PostgreSQLバックエンドサーバが管理コマンドでシャットダウンされたことをPgpool-IIが検知した場合には、依然としてフェイルオーバが起こることに注意してください。 この場合にもフェイルオーバを避けたい場合には、backend_flagでDISALLOW_TO_FAILOVERを指定してください。

このパラメータはPgpool-IIの設定を再読み込みすることで変更可能です。

search_primary_node_timeout (integer)

フェイルオーバが起きた時にプライマリノードを検索するための最大時間を秒単位で指定します。 Pgpool-IIは、ここで設定した時間の間にプライマリノードを見つけられなかった場合、探すのを諦めます。 デフォルト値は300です。 0を指定すると、永久に検索し続けます。

このパラメータはストリーミングレプリケーションによるマスタースレーブモードの場合のみ有効です。

このパラメータはPgpool-IIの設定を再読み込みすることで変更可能です。

5.9.2. rawモードにおけるフェイルオーバ

rawモードにおいて、複数のバックエンドサーバが定義されている場合、フェイルオーバが可能です。 通常の動作ではPgpool-IIbackend_hostname0で指定したバックエンドにアクセスします。 何らかの理由でbackend_hostname0のサーバに障害が発生すると、Pgpool-IIbackend_hostname1へのアクセスを試みます。 これが失敗した場合にはPgpool-IIbackend_hostname2, 3と以下同様に試みます。