5.8. ヘルスチェック

Pgpool-IIはサーバやネットワークの障害を検知するために、設定されたバックエンドに定期的に接続を試みます。 この障害チェックの手続きを「ヘルスチェック」と言います。 障害が検知されると、Pgpool-IIは設定に基づいてフェイルオーバや縮退運転を試みます。

注意

ヘルスチェックは各バックエンドノードへの余分の接続を1つ必要としますので、postgresql.confmax_connectionsもそれに応じて調整する必要があります。

ヘルスチェックプロセスは、ヘルスチェックの合計実行回数のような様々な統計情報データを収集します。 統計情報を調べるには、SHOW POOL_HEALTH_CHECK_STATSコマンドを使用してください。 なお、このデータは共有メモリ領域に格納されるので、Pgpool-IIの起動時に初期化されることに注意してください。

以下のパラメータは、名前の最後に数字の接尾辞を持つことができます。その 接尾辞は、backend_hostnameのようなバックエンド情報で定義されるバックエンドのIDに対応します。 たとえばhealth_check_timeout0は、バックエンド0のhealth_check_timeoutに適用されます。

接尾辞付きのパラメータがない場合は、そのバックエンドの設定値は接尾辞なしのパラメータの値が使用されます。 つまり、接尾辞なしのパラメータは、「広域変数」のように扱われます。

health_check_timeout (integer)

TCP接続が時間内に成功せずにバックエンドのPostgreSQLへの接続を諦めるまでのタイムアウト値を秒単位で指定します。

このパラメータは、ネットワークケーブルが抜けた際などにヘルスチェックが長時間待たされるのを防止します。 デフォルトは20秒です。0を指定するとタイムアウト処理をしません (TCP/IP のタイムアウトまで待ちます)。

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

health_check_period (integer)

ヘルスチェックの間隔を秒単位で指定します。 デフォルトは0で、これはヘルスチェックが無効であることを意味します。

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

health_check_user (string)

ヘルスチェックを行うPostgreSQLユーザ名を指定します。 同じユーザ名が全てのPostgreSQLバックエンドに存在していなければなりません。 さもないと、ヘルスチェックがエラーとなります。

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

health_check_password (string)

health_check_userで設定したヘルスチェックを行うPostgreSQLユーザのパスワードを指定します。 ユーザとパスワードは全てのPostgreSQLバックエンドで同じである必要があります。 さもないと、ヘルスチェックがエラーとなります。

health_check_passwordが空のままの場合、 Pgpool-IIは空のパスワードを使用する前にまずpool_passwdファイルからhealth_check_userのパスワードを取得できるか試みます。

health_check_passwordは以下の書式で指定します。

AES256-CBC暗号化パスワード

パスワードを格納する最もセキュアで推奨できる方法です。 パスワード文字列はAESで始まっていなければなりません。 pg_encユーティリティを使って正しくAESで暗号化された文字列を作ることができます。 Pgpool-IIは暗号化されたパスワードを使うために起動時に有効な復号鍵を要求します。 Pgpool-IIに復号鍵を提供する方法の詳細は項6.4.2を参照してください。

MD5ハッシュパスワード

AESほどはセキュアではありませんが、平文パスワードよりは良いです。 パスワード文字列はMD5で始まっていなければなりません。 バックエンドにはMD5認証を設定しなければならないことに注意してください。 pg_md5ユーティリティを使って正しいMD5ハッシュパワード文字列を作ることができます。

平文パスワード

暗号化されていない平分のパスワードです。 可能ならば使用を避けるべきです。 パスワード文字列はTEXTで始まっていなければなりません。 例えば、パスワードとしてmypassを設定したい場合、パスワードフィールドにTEXTmypassと指定します。 有効な接頭辞がない場合、Pgpool-IIは平文のパスワードとして文字列を見なします。

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

health_check_database (string)

ヘルスチェックを行う対象のPostgreSQLデータベース名を指定します。 デフォルトは''で、この場合は最初にpostgresデータベースが試され、その後でtemplate1データベースが試されます。 これはPgpool-II V3.4以前の挙動と同じです。

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

health_check_max_retries (integer)

ヘルスチェックに失敗したときに、諦めてフェイルオーバを始める前にリトライする最大回数を指定します。

ティップ: この設定は動作にむらのあるネットワーク環境において、ノードが正常であるにも関わらず、たまにヘルスチェックが失敗することが予想される場合に有用です。

ティップ: health_check_max_retriesを有効にする場合は、failover_on_backend_errorを無効にするのが望ましいです。

デフォルト値は0で、この場合はリトライをしません。

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

health_check_retry_delay (integer)

ヘルスチェックのリトライ間の時間間隔を秒単位で指定します(health_check_max_retries > 0でなければ有効になりません)。 0を指定すると、待ち時間はなくリトライは直ちに行われます。

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

connect_timeout (integer)

connect()システムコールを使ったバックエンドへの接続を諦めるまでの時間をミリ秒単位で指定します。 デフォルトは10000ミリ秒(10秒)です。 不安定なネットワークを使う場合、この値を大きくすると良いでしょう。 0を指定すると、タイムアウトしません。

注意: connect_timeoutの値はヘルスチェックだけではなく通常の接続プールを生成するときにも使われます。

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