Pgpool-II 4.5.4 文書 | |||
---|---|---|---|
前のページ | 上に戻る | 第 4章Watchdog | 次のページ |
watchdogはPgpool-IIの下位プロセスで、複数のPgpool-IIを調整して、高可用性を追加し、単一障害点を除きます。 (もし有効なら)watchdogプロセスはPgpool-IIが起動した際に自動的に起動されます。 watchdogは、コアシステムと死活監視システムの2つの主なコンポーネントから構成されます。
"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メインプロセスに対して分散ロック機能を提供する
watchdogはほかのすべてのノードとの通信にTCP/IPソケットを使っています。 各々のwatchdogノードはそれぞれのノードに2つのソケットを開くことができます。 ひとつはこのノードが作った出て行く(クライアント)ソケットで、他のノードとの通信を開始します。 2つ目は、リモートwatchdogノードが開いた通信から入ってくるのを待ち受けるソケットです。 リモートノードとのソケット接続が成功すると、直ちにwatchdogはADD NODE (WD_ADD_NODE_MESSAGE)メッセージをそのソケットに送ります。 ADD NODEメッセージを受信したwatchdogノードは、メッセージにカプセル化されたノード情報をそのノードのPgpool-II設定と照合し、照合テストが成功すればノードをクラスタに追加します。 照合テストが失敗すると、接続は切断されます。
watchdogプロセスはIPC通信のためにUNIXドメインソケットを公開し、JSON形式のデータを受付、また提供します。 Pgpool-IIの組み込み死活監視とメインプロセスも含めて、すべてのPgpool-IIの内部プロセスは、このIPCソケットを使ってwatchdogと通信します。 IPCソケットは、watchdogと通信する外部/サードパーティシステムも利用することができます。
外部/サードパーティシステムと統合するための、watchdog IPCインターフェイスの使い方の詳細は項4.2をご覧ください。
Watchdogにおける死活監視は、watchdogクラスタに参加しているPgpool-IIノードの健全性を監視するwatchdogの下位コンポーネントです。 Pgpool-II watchdogは、リモートノードの健全性をチェックする3つの方法、"heartbeat"と"query"と"external"モードを提供します。
"heartbeat"モードでは、死活監視プロセスはUDPを使ってリモートノードにアクセスできるかどうか確認します。 各ノード毎に死活監視の親プロセスは2つの子プロセスを起動します。 ひとつはハートビート信号の送信のため、もうひとつはハートビートの受信のためです。 "query"モードでは、死活監視プロセスはPostgreSQLのlibpqインターフェイスを使ってリモートのPgpool-IIに問い合わせを送ります。 このモードでは、各死活監視プロセスは、死活監視のために新しくスレッドを作成します。 クエリが終了すると、直ちにそのスレッドは破棄されます。 "external"モードでは、Pgpool-IIの死活監視は無効になり、代わりに外部システムがローカルノードとリモートノードを監視することを期待します。
リモートノードの死活監視以外にも、watchdogの死活監視は、上位サーバへの接続を監視することにより、インストールされたノードの健全性をチェックできます。 上位サーバへの接続を監視するために、Pgpool-IIの死活監視はexecv()を使って'ping -q -c3 hostname'コマンドを実行します。 各pingコマンドを実行するために新しい子プロセスが生成されます。 つまり、各々の死活監視のサイクルごとに、それぞれの上位サーバのために子プロセスが作られ、破棄されます。 たとえば、死活監視の設定で2つの上位サーバがあり、10秒ごとに死活監視を行うとすると、死活監視は10秒ごとに2つの子プロセスを起動し、各上位サーバ用に1個ずつプロセスが割り当てられます。 それぞれのプロセスは、pingコマンドが完了するまで生存します。