watchdogに外部死活監視を組み込む

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

# 2.2. watchdogに外部死活監視を組み込む

Pgpool-II watchdogプロセスは、すべてのPgpool-IIプロセスとBSDソケットを使って通信します。 そのBSDソケットは、ローカルとリモートのPgpool-II watchdogノードをサードパーティのシステムが死活監視するために使用することができます。 IPCのためのBSDソケットの名前は、`"s.PGPOOLWD_CMD."`文字列の後にPgpool-IIのwd_portを付けたもので、そのソケットファイルはwd_ipc_socket_dirディレクトリに置かれます。

## 2.2.1. watchdogのIPCコマンドパケットフォーマット

watchdogのIPCコマンドパケットは3つのフィールドから構成されます。 以下のテーブルはメッセージフィールドの詳細な説明です。

表 2-1. watchdogのIPCコマンドパケットフォーマット

フィールド | 型 | 説明
--- | --- | ---
TYPE | BYTE1 | コマンド型
LENGTH | ネットワークバイトオーダーのINT32 | データ部の長さ
DATA | JSONフォーマットのデータ | JSONフォーマットのコマンドデータ

## 2.2.2. watchdogのIPC結果パケットフォーマット

watchdogのIPCコマンド結果パケットは3つのフィールドから構成されます。 以下のテーブルはメッセージフィールドの詳細な説明です。

表 2-2. watchdogのIPC結果パケットフォーマット

フィールド | 型 | 説明
--- | --- | ---
TYPE | BYTE1 | コマンド型
LENGTH | ネットワークバイトオーダーのINT32 | データ部の長さ
DATA | JSONフォーマットのデータ | JSONフォーマットのコマンドデータ

## 2.2.3. watchdogのIPCコマンドパケット型

watchdogプロセスに送られ、またwatchdogプロセスから返却されるIPCコマンドのパケットの最初のバイトは、コマンドまたはコマンド結果型と認識されます。

表 2-3. Watchdog IPC command packet types

名前 | バイト値 | 型 | 説明
--- | --- | --- | ---
REGISTER FOR NOTIFICATIONS | '0' | コマンドパケット | 現在の接続をwatchdog通知を受け取るために登録するコマンド
NODE STATUS CHANGE | '2' | コマンドパケット | watchdogノードの状態変化をwatchdogに通知するためのコマンド
GET NODES LIST | '3' | コマンドパケット | Command to get the list of all configured watchdog nodes
NODES LIST DATA | '4' | 結果パケット | パケット中のJSONデータにすべてのwatchdogノードのリストが含まれます
CLUSTER IN TRANSITION | '7' | 結果パケット | クラスタが遷移中なのでコマンドを処理できないときにwatchdogはこのパケットを返します
RESULT BAD | '8' | 結果パケット | IPCコマンドが失敗すると、watchdogはこのパケット型を返します
RESULT OK | '9' | 結果パケット | IPCコマンドが成功すると、watchdogはこのパケット型を返します

## 2.2.4. 外部死活監視のIPCパケットとデータ

watchdogの"GET NODES LIST"、"NODES LIST DATA"、"NODE STATUS CHANGE"IPCメッセージは、外部死活監視システムを統合するために使用できます。 pgpoolの組み込み死活監視も同じチャンネルと技術を使っていることに注意してください。

### 2.2.4.1. 構成されているwatchdogノードのリストの取得

サードパーティの死活監視システムは、wd_authkeyが設定されている時は認証キーとデータを含むJSONデータを、wd_authkeyが設定されていない時は空のパケットデータを含む"GET NODES LIST"パケットをwatchdogのIPCソケットに送ることにより、"NODES LIST DATA"結果パケットを入手できます。

"GET NODES LIST"に対するwatchdogに返却される結果パケットは、死活監視を実施する対象となる、構成されているすべてのwatchdogノードのリストを含むJSONフォーマットです。

        -- The example JSON data contained in "NODES LIST DATA"

          {
          "NodeCount":3,
          "WatchdogNodes":
            [
              {
                "ID":0,
                "State":1,
                "NodeName":"Linux_ubuntu_9999",
                "HostName":"watchdog-host1",
                "DelegateIP":"172.16.5.133",
                "WdPort":9000,
                "PgpoolPort":9999
              },
              {
                "ID":1,
                "State":1,
                "NodeName":"Linux_ubuntu_9991",
                "HostName":"watchdog-host2",
                "DelegateIP":"172.16.5.133",
                "WdPort":9000,
                "PgpoolPort":9991
              },
              {
                "ID":2,
                "State":1,
                "NodeName":"Linux_ubuntu_9992",
                "HostName":"watchdog-host3",
                "DelegateIP":"172.16.5.133",
                "WdPort":9000,
                "PgpoolPort":9992
              }
            ]
          }

        -- Note that ID 0 is always reserved for local watchdog node

構成されているwatchdogノード情報をwatchdogから入手したら、外部死活監視システムはwatchdogノードの死活監視を実施できます。 ノードの状態変化を検知したら、watchdogの"NODE STATUS CHANGE"IPCメッセージを使って、watchdogに通知できます。 メッセージには、状態変化したノードIDとノードの新しい状態を伴うJSONでデータを格納してください（ノードIDは、watchdogから返却されたWatchdogNodesリスト中のノードと同じノードIDを使わなければなりません）。

      -- The example JSON to inform pgpool-II watchdog about health check
      failed on node with ID 1 will look like

        {
        "NodeID":1,
        "NodeStatus":1,
        "Message":"optional message string to log by watchdog for this event"
        "IPCAuthKey":"wd_authkey configuration parameter value"
        }

      -- NodeStatus values meanings are as follows
      NODE STATUS DEAD  =  1
      NODE STATUS ALIVE =  2

前のページ | ホーム | 次のページ
はじめに | 上に戻る | watchdogの制限事項