watchdogの構造

Pgpool-II 3.6.5 文書
前のページ | 上に戻る | 第 2章Watchdog | 次のページ

# 2.4. watchdogの構造

watchdogはPgpool-IIの下位プロセスで、単一障害点を除くために複数のPgpool-IIを統合します。 （もし有効なら）watchdogプロセスはPgpool-IIが起動した際に自動的に起動されます。 watchdogは、コアシステムと死活監視システムの2つの主なコンポーネントから構成されます。

## 2.4.1. watchdogコア

"watchdog"として参照されるwatchdogコアは、クラスタに存在するPgpool-IIノードとのwatchdog関連の通信を管理します。 また、Pgpool-II親プロセスと死活監視プロセスとも通信します。

watchdogプロセスの中心はステートマシンで、初期状態(`WD_LOADING`)から出発し、スタンバイ状態(`WD_STANDBY`)かマスター/コーディネーター状態(`WD_COORDINATOR`)へと遷移します。 スタンバイ状態もマスター/コーディネーター状態も、watchdogステートマシンとしては安定状態です。 ローカルのPgpool-IIノードに問題が起きるか、リモートのPgpool-IIノードがクラスタから切り離されるまでその状態を保ちます。

watchdogプロセスは以下のタスクを実行します。

- ローカルノードのwatchdog状態の管理と調停

- ローカルあるいはリモートのPgpool-IIを対象とする組み込みあるいは外部死活監視との通信

- watchdogチャンネルを通じてPgpool-II親プロセスがクラスタコマンドを実行するための機構を提供するために、Pgpool-IIメインプロセスと通信する

- 参加しているすべてのPgpool-IIノードと通信し、マスター/コーディネーターノードの選択を調停し、クラスタのクォーラムを確実にする

- マスター/コーディネーターノード上の仮想IPを管理し、ユーザが昇格と降格用のカスタムスクリプトを書けるようにする

- watchdogクラスタ中のPgpool-IIノードの設定の一貫性を検証する

- 起動時にすべてのPostgreSQLバックエンドの状態を同期する

- 複数のフェイルオーバコマンドを直列化するためにPgpool-IIメインプロセスに対して分散ロック機能を提供する

### 2.4.1.1. クラスタの他のノードとの通信

watchdogはほかのすべてのノードとの通信にTCP/IPソケットを使っています。 各々のwatchdogノードはそれぞれのノードに2つのソケットを開くことができます。 ひとつは出て行く（クライアント）ソケットで、他のノードとの通信のためにこのノードが作り初期化します。 2つ目は、リモートwatchdogノードが開いた通信から入ってくるのを待ち受けるソケットです。 リモートノードとのソケット接続が成功すると、直ちにwatchdogはADD NODE (`WD_ADD_NODE_MESSAGE`)メッセージをそのソケットに送ります。 ADD NODEメッセージを受信したwatchdogノードは、メッセージにカプセル化されたノード情報をそのノードのPgpool-II設定と照合し、照合テストが成功すればノードをクラスタに追加します。 照合テストが失敗すると、接続は切断されます。

### 2.4.1.2. IPCとデータフォーマット

watchdogプロセスはIPC通信のためにUNIXドメインソケットを公開し、JSON形式のデータを受付、また提供します。 Pgpool-IIの組み込み死活監視とメインプロセスも含めて、すべてのPgpool-II's内部プロセスは、このIPCソケットを使ってwatchdogと通信します。 IPCソケットは、watchdogと通信する外部/サードパーティシステムも利用することができます。

外部/サードパーティシステムと統合するための、watchdog IPCインターフェイスの使い方の詳細は項2.2をご覧ください。

## 2.4.2. Watchdogにおける死活監視

Watchdogにおける死活監視は、watchdogクラスタに参加しているPgpool-IIノードの健全性を監視するwatchdogの下位コンポーネントです。 Pgpool-II watchdogは、リモートノードの健全性をチェックする2つの方法、"heartbeat"と"query"モードを提供します。

"heartbeat"モードでは、死活監視プロセスはUDPを使ってリモートノードにアクセスできるかどうか確認します。 各ノード毎に死活監視の親プロセスは2つの子プロセスを起動します。 ひとつはハートビート信号の送信のため、もうひとつはハートビートの受信のためです。 "query"モードでは、死活監視プロセスはPostgreSQLのlibpqインターフェイスを使ってリモートのPgpool-IIに問い合わせを送ります。 このモードでは、各死活監視プロセスは、死活監視のために新しくスレッドを作成します。 クエリが終了すると、直ちにそのスレッドは破棄されます。

リモートノードの死活監視以外にも、watchdogの死活監視は、上位サーバへの接続を監視することにより、インストールされたノードの健全性をチェックできます。 上位サーバへの接続を監視するために、Pgpool-IIの死活監視は`execv()`を使って`'ping -q -c3 hostname'`コマンドを実行します。 つまり、各々の死活監視のサイクルごとに、それぞれの上位サーバのために子プロセスが作られ、破棄されます。 たとえば、死活監視の設定で2つの上位サーバがあり、10秒ごとに死活監視を行うとすると、死活監視は10秒ごとに2つの子プロセスを起動し、各上位サーバ用に1個ずつプロセスが割り当てられます。 それぞれのプロセスは、pingコマンドが完了するまで生存します。

前のページ | ホーム | 次のページ
watchdogの制限事項 | 上に戻る | サーバ管理