5.14. Watchdog

Watchdogの設定パラメータはpgpool.confに記述されています。 pgpool.conf.sampleのWATCHDOG節に設定の例があります。 以下のすべてのオプションがwatchdogプロセスでは指定されている必要があります。

5.14.1. Watchdogを有効にする

use_watchdog (boolean)

onならwatchdogを有効にします。 デフォルトはoffです。

このパラメータは、サーバ起動時にのみ設定できます。

5.14.2. Watchdog通信

wd_hostname (string)

Pgpool-IIサーバのホスト名またはIPアドレスを指定します。 クエリやパケットの送受信の他、watchdogの識別子としても用います。

wd_port (integer)

watchdogが接続を受け付けるために監視するポート番号です。 デフォルト値は9000です。

このパラメータは、サーバ起動時にのみ設定できます。

wd_authkey (string)

wachdog間通信で用いられる認証キーを指定します。 全てのPgpool-IIで同じキーを指定する必要があります。 認証キーが異なるwatchdogからの通信は拒絶されます。 死活監視をheartbeatモードで行う場合には、この認証はハートビート信号にも適用されます。

Pgpool-IIV3.5以降ではwd_authkeyがwatchdog IPCクライアントの認証にも使われるため、Pgpool-IIと通信するwatchdogプロセスは、"IPCAuthKey"のコマンドのJSONデータにwd_authkey値を設定しなければなりません。

デフォルトは''(空文字)で、この場合watchdogの認証は行われません。

このパラメータは、サーバ起動時にのみ設定できます。

5.14.3. 上流サーバへの接続

trusted_servers (string)

上位接続を確認するための信頼できるサーバのリストを指定します。 リスト中の各サーバは、pingの応答に答える必要があります。 "hostA,hostB,hostC"のようにカンマで区切って複数のサーバを指定できます。 全てのサーバに到達できなくなると、watchdogはPgpool-IIに障害が発生したと判断します。 そのため、複数のサーバを指定することを推奨します。

このパラメータは、サーバ起動時にのみ設定できます。

ping_path (string)

上位サーバへの接続監視に利用するpingコマンドのパスを指定します。 "/bin"のようにパスだけを指定します。

このパラメータは、サーバ起動時にのみ設定できます。

5.14.4. 仮想IP制御

delegate_IP (string)

(アプリケーションサーバなど)クライアントサーバから接続されるpgpool-IIの仮想IP(VIP) アドレスを指定します。 Pgpool-IIがスタンバイからアクティブに切り替わった時、Pgpool-IIはこのVIPを引き継ぎます。 デフォルトは''(空文字)で、この場合仮想IPは決して立ち上がりません。

このパラメータは、サーバ起動時にのみ設定できます。

if_cmd_path (string)

Pgpool-IIが仮想IPを切り替えるために使用するコマンドへのパスを指定します。 "/bin"のようにパスだけを指定します。

このパラメータは、サーバ起動時にのみ設定できます。

if_up_cmd (string)

仮想IPを起動するために実行するコマンドを指定します。 "ip addr add $_IP_$/24 dev eth0 label eth0:0"のようにコマンドとパラメータを指定します。 $_IP_$delegate_IPで指定されたIPアドレスに置換されます。

このパラメータは、サーバ起動時にのみ設定できます。

if_down_cmd (string)

仮想IPを停止するために実行するコマンドを指定します。 "ip addr del $_IP_$/24 dev eth0"のようにコマンドとパラメータを指定します。

このパラメータは、サーバ起動時にのみ設定できます。

arping_path (string)

IPアドレス切り替え後にPgpool-IIがARPリクエストを送信するコマンドへのパス指定します。 "/usr/sbin"のようにパスだけを指定します。

このパラメータは、サーバ起動時にのみ設定できます。

arping_cmd (string)

IPアドレス切り替え後にARPリクエストを送信するコマンドです。 "arping -U $_IP_$ -w 1"のようにコマンドとパラメータを指定します。 $_IP_$delegate_IPで指定されたIPアドレスに置換されます。

このパラメータは、サーバ起動時にのみ設定できます。

5.14.5. 昇格および降格時の振る舞い

Pgpool-IIがアクティブ(仮想IPを保持しているステータス)に昇格した時の振る舞いを指定します。

clear_memqcache_on_escalation (boolean)

このオプションがonの場合、pgpool-II がアクティブに昇格した時に、共有メモリ上のクエリキャッシュを全て削除します。 これにより、新しいアクティブのPgpool-IIが旧アクティブと非整合な古いクエリキャッシュを使うことを防止します。

デフォルトはonです。

memqcache_methodが'shmem'の場合のみ有効です。

このパラメータは、サーバ起動時にのみ設定できます。

wd_escalation_command (string)

マスターwatchdogに昇格した時に、ここで指定したコマンドがwatchdogによって実行されます。

コマンドは、そのノードに仮想IPが設定されていた場合、それが立ち上がる直前のタイミングで実行されます。

このパラメータは、サーバ起動時にのみ設定できます。

wd_de_escalation_command (string)

Pgpool-IIのマスターwatchdogが責務を辞退し降格するときに、ここで指定したコマンドが実行されます。 マスターwatchdogノードは、そのマスターノードのPgpool-IIが停止したとき、ネットワーク切断やクォーラムが失われたことを検出した時に、マスターから辞任します。

このコマンドは、watchdogノードに仮想IPアドレスが設定されていた場合、それが停止される直前のタイミングで実行されます。

wd_de_escalation_commandは、Pgpool-IIV3.5より前のバージョンには提供されていません。

このパラメータは、サーバ起動時にのみ設定できます。

5.14.6. フェイルオーバの挙動の制御

これらの設定は、watchdog機能が有効な場合に、バックエンドノードのフェイルオーバの動作を制御するために使用されます。 これらの設定の影響は、内部的なPgpool-IIのフェイルオーバ/縮退要求のみに影響します。 一方、(PCPコマンドを使った)ユーザが起動したバックエンド切り離し操作では、これらの設定項目は迂回され適用されません。

failover_when_quorum_exists (boolean)

このパラメータを有効にすると、クォーラムが存在する場合、Pgpool-IIはバックエンドノードで縮退/フェイルオーバを実行します。 クォーラムが存在しない場合、クォーラムが再び存在するまで、バックエンドの障害を検出するPgpool-IIノードは、障害の発生したバックエンドノードを隔離します。

隔離されたノードの動作は切り離されたバックエンドノードと似ていますが、フェイルオーバ/縮退と異なり、隔離ステータスはwatchdogクラスタ内の他のPgpool-IIノードに伝播されません。 したがって、他のPgpool-IIノードは引き続きそのバックエンドを使用し続ける可能性があります。

隔離とフェイルオーバ操作には多くの類似点がありますが、どちらも非常に基本的な方法で異なります。 隔離操作はfailover_commandを実行せず、障害の発生したノードを隔離します。 この隔離されたノードがマスタの場合、Pgpool-IIはスタンバイをマスタに昇格させないので、マスタノードが隔離されている間は、使用可能なマスタバックエンドノードはありません。

デフォルト値はonです。

failover_when_quorum_existsはPgpool-II V3.7より前では利用できません。

このパラメータは、サーバーの起動時にのみ設定できます。

failover_require_consensus (boolean)

このパラメータを有効にすると、Pgpool-IIは、watchdogクォーラムが存在し、少なくともクォーラム投票に必要なノードの最小数があれば、バックエンドノードで縮退/フェイルオーバを実行します。

たとえば、3ノードのwatchdogのクラスタでは、フェイルオーバは、少なくとも2つのノードが特定のバックエンドノードに対してフェイルオーバの実行要求をするときのみ実行されます。

デフォルト値はonです。

注意

failover_require_consensusが有効な場合、Pgpool-IIは他 のPgpool-IIノードから充分な投票を得るまでフェイルオーバしません。 ですから、正しくバックエンドの障害を検出するために、すべてのPgpool-IIノードでヘルスチェックを有効にすることを強く推奨します。 ヘルスチェックに関する詳細については、項5.8をご覧ください。

Pgpool-II V3.7より前ではfailover_require_consensusは利用できません。 failover_when_quorum_existsが有効な場合にのみ有効です。

このパラメータは、サーバの起動時にのみ設定できます。

allow_multiple_failover_requests_from_node (boolean)

このパラメータは、failover_require_consensusと連携して動作します。 有効にすると、単一のPgpool-IIノードが複数のフェイルオーバ投票をできます。

たとえば、3ノードのwatchdogクラスタでは、1つのPgpool-IIノードが特定のバックエンドノードのフェイルオーバに対して2つのフェイルオーバ要求を送信すると、両方の要求が別の投票としてカウントされ、たとえ他のPgpool-IIノードからの投票を得なくても、Pgpool-IIがフェイルオーバを実行します。

デフォルト値はoffです。

allow_multiple_failover_requests_from_nodeは、Pgpool-II V3.7以前では利用できません。 failover_when_quorum_existsfailover_require_consensusの両方が有効な場合にのみ有効です。

このパラメータは、サーバの起動時にのみ設定できます。

5.14.7. Pgpool-IIの死活監視

Watchdogは、定期的にpgpool-IIの状態を監視します。

wd_lifecheck_method (string)

死活監視の方法を指定します。 指定できる値は 'heartbeat' (デフォルト)、'query'、または'external' です。

'heartbeat'を指定した場合には、監視は「ハートビートモード」で行われます。 watchdog は一定間隔でハートビート信号(UDP パケット)を他のPgpool-IIへ送信します。 またwatchdogは他のPgpool-IIから送られてくる信号を受信します。 これが一定時間以上途絶えた場合にはそのPgpool-IIに障害が発生したと判断します。

query: このモードではwatchdogは監視用のクエリをPgpool-IIに発行し、それが成功するかどうかで pgpool-II が生きているかどうかを判断します。

注意

クエリモードでは、num_init_childrenを十分大きな値にしてください。 watchdogプロセスもPgpool-IIにクライアントとして接続するからです。

external: このモードでは、Pgpool-IIに組み込みの死活監視は無効になり、watchdogはローカルとリモートのノード死活監視を行うために外部システムを使います。

externalモードはPgpool-II V3.5よりも前のバージョンでは提供されていません。

このパラメータは、サーバ起動時にのみ設定できます。

wd_monitoring_interfaces_list (string)

watchdogプロセスがネットワークリンクの状態を監視するネットワークデバイス名をカンマ区切りのリストで指定します。 リスト中の全てのネットワークインタフェースが(無効化あるいはケーブルを抜かれることで)非アクティブになると、watchdog はネットワークが完全に故障したと見なし自らを停止させませす。 ''(空文字)を指定するとネットワークインタフェースの監視が無効になります。 'any'を指定すると、ループバック以外の存在する全てのネットワークインタフェースを監視します。 デフォルトの値は''空リスト '' (監視は無効)です。

wd_monitoring_interfaces_listは、Pgpool-II V3.5よりも前のバージョンでは提供されていません。

このパラメータは、サーバ起動時にのみ設定できます。

wd_interval (integer)

Pgpool-IIが死活監視を行う間隔を秒単位で指定します(1以上の数字)。 デフォルトは10です。

このパラメータは、サーバ起動時にのみ設定できます。

wd_priority (integer)

このパラメータによってローカルのwatchdogノードがマスターに選ばれる優先度を上げることができます。 クラスタの初期起動時や古いマスターノードが故障した状況でクラスタがマスターノードの選択を行う際に、wd_priorityが高いノードがマスターwatchdogノードに選ばれます。

wd_priorityは、Pgpool-II V3.5よりも前のバージョンでは提供されていません。

このパラメータは、サーバ起動時にのみ設定できます。

wd_ipc_socket_dir (string)

Pgpool-II watchdog のIPC通信で受け付ける UNIX ドメインソケットが作成されるディレクトリを指定します。 デフォルトは'/tmp'です。 このソケットが cron ジョブで削除されることのないよう気をつけてください。 この値は '/var/run'などのディレクトリに設定することを推奨します。

wd_ipc_socket_dirは、Pgpool-II V3.5よりも前のバージョンでは提供されていません。

このパラメータは、サーバ起動時にのみ設定できます。

5.14.8. 死活監視:ハートビートモードの設定

wd_heartbeat_port (integer)

ハートビート信号を受信するUDPポート番号を指定します。 デフォルトは 9694 です。 wd_lifecheck_method'heartbeat'に設定されている場合のみ有効です。

このパラメータは、サーバ起動時にのみ設定できます。

wd_heartbeat_keepalive (integer)

ハートビート信号を送信する間隔(秒)を指定します。 デフォルトは2です。 wd_heartbeat_keepaliveは、wd_lifecheck_method'heartbeat'に設定されている場合のみ有効です。

このパラメータは、サーバ起動時にのみ設定できます。

wd_heartbeat_deadtime (integer)

このオプションで指定された間隔(秒)の間ハートビート信号が途絶えた場合、リモートのwatchdogに障害が発生したとみなされます。 デフォルトは30です。

このパラメータは、サーバ起動時にのみ設定できます。

heartbeat_destination0 (string)

ハートビート信号の送る先のIPアドレスまたは ホスト名を指定します。 複数のハートビート信号の送り先が指定可能です。 0から始まるパラメータの最後の部分は送り先の番号です。

heartbeat_destinationは、wd_lifecheck_method'heartbeat'に設定されている場合のみ有効です。

このパラメータは、サーバ起動時にのみ設定できます。

heartbeat_destination_port0 (integer)

ハートビート信号の送る先のポート番号を指定します。 複数のハートビート信号の送り先が指定可能です。 0から始まるパラメータの最後の部分は送り先の番号です。

heartbeat_destination_portは、wd_lifecheck_method'heartbeat'に設定されている場合のみ有効です。

このパラメータは、サーバ起動時にのみ設定できます。

heartbeat_device0 (string)

heartbeat_destinationX:heartbeat_destination_portXで指定されるハートビートの送信先に用いるネットワークデバイス名を指定します。 パラメータ名の最後にあるXの値(送信先番号)を変えることにより、ハートビートの送信先ごとに異なるハートビートデバイス番号を設定することが可能です。 送信先番号は0から始まります。

heartbeat_deviceは、wd_lifecheck_method'heartbeat'に設定されている場合のみ有効です。

このパラメータは、サーバ起動時にのみ設定できます。

5.14.9. 死活監視:クエリモードの設定

wd_life_point (integer)

監視クエリの応答が得られなかった場合のリトライ回数を指定します。 有効な値は1以上の整数です。

wd_lifecheck_method'query'の場合のみ、wd_life_pointは有効です。

このパラメータは、サーバ起動時にのみ設定できます。

wd_lifecheck_query (string)

リモートのPgpool-IIの死活監視に使うクエリを指定します。 デフォルトは"SELECT 1"です。

wd_lifecheck_method'query'の場合のみ、wd_life_check_queryは有効です。

このパラメータは、サーバ起動時にのみ設定できます。

wd_lifecheck_dbname (string)

リモートのPgpool-IIの死活監視用の接続先のデータベース名です。 デフォルトは'template1'です。

wd_lifecheck_method'query'の場合のみ、wd_life_check_dbnameは有効です。

このパラメータは、サーバ起動時にのみ設定できます。

wd_lifecheck_user (string)

リモートのPgpool-IIの死活監視用の接続先のユーザ名です。 デフォルトは'nobody'です。

wd_lifecheck_method'query'の場合のみ、wd_life_check_userは有効です。

このパラメータは、サーバ起動時にのみ設定できます。

wd_lifecheck_password (string)

リモートのPgpool-IIの死活監視用の接続先のパスワードです。 デフォルトは''(空文字)です。

wd_lifecheck_passwordが空白のままであった場合、Pgpool-IIは空のパスワードを使用する前にpool_passwdファイルからwd_lifecheck_userのパスワードの取得を試みます。

wd_lifecheck_passwordにAES256-CBCで暗号化されたパスワードも指定することができます。 AESで暗号化されたパスワードを指定するためには、パスワード文字列は暗号化(aes-256-cbcアルゴリズムを使用)およびbase64でエンコードした後、AESを接頭辞として付けなければいけません。

暗号化されていないクリアテキストパスワードを指定するためには、TEXTをパスワード文字列の前に付けます。 例えば、パスワードとしてmypassを設定したい場合、パスワードフィールドにTEXTmypassと指定すべきです。

正しくフォーマットされたAESで暗号化されたパスワード文字列をpg_encコマンドを使用して作成することもできます。

注意: Pgpool-IIは暗号化されたパスワードを使うために起動時に有効な復号鍵を要求します。 Pgpool-IIに復号鍵を提供する方法の詳細は項6.4.2を参照してください。

wd_lifecheck_method'query'の場合のみ、wd_life_check_passwordは有効です。

このパラメータは、サーバ起動時にのみ設定できます。

デフォルトは''(空文字)です.

5.14.10. Watchdogサーバの設定

other_pgpool_hostname0 (string)

リモートのwatchdogノードに対するPgpool-IIサーバのホスト名を指定します。 パラメータ名の最後にある数字は「サーバ番号」で、0から始まります。

このパラメータは、サーバ起動時にのみ設定できます。

other_pgpool_port0 (integer)

リモートのwatchdogノードに対するPgpool-IIサーバのポート番号を指定します。 パラメータ名の最後にある数字は「サーバ番号」で、0から始まります。

このパラメータは、サーバ起動時にのみ設定できます。

other_wd_port0 (integer)

リモートのPgpool-IIサーバにおけるwatchdogのポート番号を指定します。 パラメータ名の最後にある数字は「サーバ番号」で、0から始まります。

このパラメータは、サーバ起動時にのみ設定できます。