# Watchdog

watchdogプロセスはpgpool-II本体から起動される、高可用性を目的としたプロセスです。 以下の機能を提供します。

- pgpoolサービスの生死監視

watchdogはpgpoolのプロセスではなく、サービスの応答を監視します。 監視対象のpgpoolからPostgreSQLに問い合わせを行い、その応答をチェックします。 またwatchdogは、pgpoolから上位のサーバ（アプリケーションサーバなど）への接続も監視します。上位サーバからPostgreSQLへの接続・応答をpgpoolのサービスとして生死監視します。

- watchdogプロセスの相互監視

各watchdogはお互いの監視対象のサーバの情報を交換します。 これにより、pgpoolサーバの情報を最新に保てるだけでなく、各watchdogプロセスの相互監視を行っています。

- 障害発生検知時のアクティブ、スタンバイ切り替え

pgpoolのサービスに障害を検知した場合、watchdogは他のwatchdogに障害検知を通知します。 故障したpgpoolがアクティブの場合、他のwatchdogは新しいアクティブを投票で決め、アクティブ・スタンバイの切り替えを行います。

- サーバ切り替えと連動した仮想IPアドレスの自動付け替え

スタンバイが新しいアクティブに昇格する際、新アクティブ機のwatchdogはアクティブ用の仮想IPインターフェースを起動します。 一方、旧アクティブ機のwatchdogはアクティブ用仮想IPインターフェースを停止します。 これにより、サーバが切り替わった後もアクティブは同じIPアドレスでサービスを継続することができます。

- サーバ復旧時、スタンバイ機としての自動登録

障害機の復旧や新規サーバを追加する場合、watchdogはサーバの情報を他のwatchdogに通知し、他のwatchdogからはアクティブや他のサーバの情報を受け取ります。これにより追加したサーバはスタンバイ機として自動的に追加されます。

## サーバ構成

watchdogプロセスを含むpgpool-IIサーバは以下の図のようなシステム構成をとります。

## watchdogの起動と停止

watchdogプロセスはpgpool-IIから自動的に起動・停止されますので、固有の起動・停止コマンドはありません。 しかし、watchdogプロセスは仮想IPインターフェースの起動・停止を行いますので、 pgpool-IIの起動は root権限で 行う必要があります。

## pgpool.confの設定

watchdogプロセスの設定項目はpgpool.confに記述します。 pgpool.conf.sampleファイルのWATCHDOGセクションにサンプルを記述していますので、参照してください。 watchdogプロセスは以下の項目すべてを指定する必要があります。

### 基本設定セクション

use_watchdog

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

trusted_servers

  上位接続を確認するための信頼できるサーバリストです。 pingの応答が得られる必要があります。 hostA,hostB,hostC...のようにカンマで区切って複数のサーバを指定できます。

delegate_IP

  （アプリケーションサーバなど）外部からの接続されるpgpool-IIの仮想IPアドレスです。 スタンバイからアクティブに切り替わる際、pgpoolはこの仮想IPを引き継ぎます。

wd_hostname

  watchdogプロセスが相互監視を受信する為のホスト名またはIPアドレスです。

wd_port

  watchdogプロセスが相互監視を受信する為のポート番号です。

wd_interval

  pgpool-IIへの生存監視の間隔（秒）です。 (1以上の数値)

ping_path

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

ifconfig_path

  IPアドレス切り替えに利用するコマンドのパスです。 /sbin　のようにパスだけを指定します。

if_up_cmd

  仮想IPを起動するために実行するコマンドです。 ifconfig eth0:0 inet $_IP_$ netmask 255.255.255.0 のようにコマンドとパラメータを指定します。 $_IP_$　はdelegate_IPで指定されたIPアドレスに置換されます。

if_down_cmd

  仮想IPを停止するために実行するコマンドです。 ifconfig eth0:0 down のようにコマンドとパラメータを指定します。

arping_path

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

arping_cmd

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

wd_life_point

  pgpool-IIの生死監視で応答が得られなかった場合のリトライ回数です。 (1以上の数値)

wd_lifecheck_query

  pgpool-II の死活監視のために発行されるクエリです。 デフォルトは "SELECT 1" です。

### 監視対象サーバ指定セクション

other_pgpool_hostname0

  監視対象のpgpool-IIサーバのホスト名を指定します。 数値の部分は監視対象サーバの番号です。 監視対象のサーバ毎に０からの連番にします。

other_pgpool_port0

  監視対象のpgpool-IIサーバのpgpool用のポート番号を指定します。 数値の部分は監視対象サーバの番号です。 監視対象のサーバ毎に０からの連番にします。

other_wd_port0

  監視対象のpgpool-IIサーバのwatchdog用のポート番号を指定します。 数値の部分は監視対象サーバの番号です。 監視対象のサーバ毎に０からの連番にします。