pgpool-II watchdog チュートリアル

# チュートリアルの概要

このチュートリアルでは、watchdog 機能を試す方法を説明します。

Linux マシン 2 台にそれぞれ pgpool-II がインストールされているものとします。 また、いずれかのマシンか第 3 のマシンに、PostgreSQL がインストールされて稼働しているものとします （backend ノードは 1 台でかまいません）。 なお、pgpool-II はどのモードで稼働していても、watchdog を利用することができます。

この文書では、Active を「osspc16」、Standby を「osspc20」とします。 また psql などを実行するサーバを便宜上「someserver」と表記していますが、Active、Standby のサーバで構いません。

△ back to top

# 基本設定

## pgpool.conf 設定

### Active / Standby 共通

2 台の pgpool-II でそれぞれ設定します。

#### watchdog の有効化

まず、watchdog 機能を有効にするフラグ「use_watchdog」を on にします。

    use_watchdog = on
                                        # Activates watchdog

#### 上位サーバ

アプリケーションサーバなど上位のサーバを指定する「trusted_servers」を記述します。

ここでは空欄にしておきます。

    trusted_servers = ''
                                        # trusted server list which are used
                                        # to confirm network connection
                                        # (hostA,hostB,hostC,...)

#### watchdog

watchdog を起動するポートを「wd_port」」を指定します。

ここではデフォルトのままにしておきます。

    wd_port = 9000
                                        # port number for watchdog service

#### 仮想 IP

仮想 IP を「delegate_IP」に指定します。まだ使われてない IP アドレスを記述します。

    delegate_IP = '133.137.177.143'
                                        # delegate IP address

### 監視対象サーバ関連

以下は、それぞれの pgpool-II で設定します。

監視対象とする pgpool-II が稼働する ホスト名「other_pgpool_hostname0」、 その pgpool-II のポート番号「other_pgpool_port0」、 その watchdog のポート番号「other_wd_port0」を、それぞれで記述します。

なお、ホスト名は hostname コマンドの実行結果どおりのものを記述します。

#### Active (osspc16)

    other_pgpool_hostname0 = 'osspc20'
                                        # Host name or IP address to connect to for other pgpool 0
    other_pgpool_port0 = 9999
                                        # Port number for othet pgpool 0
    other_wd_port0 = 9000
                                        # Port number for othet watchdog 0

#### Standby (osspc20)

    other_pgpool_hostname0 = 'osspc16'
                                        # Host name or IP address to connect to for other pgpool 0
    other_pgpool_port0 = 9999
                                        # Port number for othet pgpool 0
    other_wd_port0 = 9000
                                        # Port number for othet watchdog 0

## pgpool-II の起動

両方のサーバで pgpool-II を root で起動します。 なお、ログで動作確認するため、-n オプションをつけて非デーモンモードで起動し、 出力されるログメッセージを pgpool.log ファイルにリダイレクトします。

### Active サーバの pgpool-II の起動 (osspc16)

Active サーバで pgpool-II を起動します。

    [user@osspc16]$ su -
    [root@osspc16]# {installed_dir}/bin/pgpool -n -f {installed_dir}/etc/pgpool.conf > pgpool.log 2>&1

ログから、仮想 IP アドレスを使用し、また watchdog プロセス起動したことが確認できます。 （なおこのログでの ERROR は、まだ起動していない Standby サーバの watchdog に接続しようとして失敗した、 というものなので、無視して構いません。）

    ERROR: wd_create_send_socket: connect() is failed(Connection refused)
    LOG:   wd_escalation: eslcalated to master pgpool
    ERROR: wd_create_send_socket: connect() is failed(Connection refused)
    LOG:   wd_escalation:  escaleted to delegate_IP holder
    LOG:   wd_init: start watchdog
    LOG:   pgpool-II successfully started. version 3.2beta1 (namameboshi)

### Standby サーバの pgpool-II の起動 (osspc20)

Standby サーバで pgpool-II を起動します。

    [user@osspc20]$ su -
    [root@osspc20]# {installed_dir}/bin/pgpool -n -f {installed_dir}/etc/pgpool.conf > pgpool.log 2>&1

「other_pgpool_hostname*」等に指定したすべての watchdog が起動していると、 死活監視（lifecheck）が開始します。 ここでは osspc16 しか指定していないので、この時点で開始したことがログからわかります。

    LOG:   wd_init: start watchdog
    LOG:   pgpool-II successfully started. version 3.2beta1 (namameboshi)
    LOG:   watchdog: lifecheck started

すると、Active でも、死活監視を始めたというログメッセージが出力されます。

    LOG:   watchdog: lifecheck started

△ back to top

# 簡単な watchdog 動作確認

## 仮想 IP アドレスへの接続

「delegate_IP」に指定した仮想 IP アドレスに、ping が通ることを確認します。

    [user@someserver]$ ping 133.137.177.142
    PING 133.137.177.143 (133.137.177.143) 56(84) bytes of data.
    64 bytes from 133.137.177.143: icmp_seq=1 ttl=64 time=0.328 ms
    64 bytes from 133.137.177.143: icmp_seq=2 ttl=64 time=0.264 ms
    64 bytes from 133.137.177.143: icmp_seq=3 ttl=64 time=0.412 ms

先に pgpool-II を立ち上げた Active サーバが、仮想 IP アドレスを使っていることを確認します。

    [root@osspc16]# ifconfig
    eth0      ...

    eth0:0    inet addr:133.137.177.143 ...

    lo        ...

あとから pgpool-II を立ち上げた Standby サーバで、仮想 IP アドレスを使っていないことを確認します。

    [root@osspc20]# ifconfig
    eth0      ...

    lo        ...

仮想 IP アドレスを使って、PostgreSQL に接続できることを確認します。 -h オプションには「delegate_IP」の IP アドレスを、-p オプションには「port」のポート番号を指定します。

    [user@someserver]$ psql -h 133.137.177.142 -p 9999 -l

## 仮想 IP アドレスの切り替え

Active サーバがサービス供給不可な状態になったときに、Standby がそれを引き継ぐのを確認します。

Active サーバで pgpool-II が停止してしまったのを想定し、意図的に停止します。

    [root@osspc16]# {installed_dir}/bin/pgpool stop

すると Standby サーバで、仮想 IP アドレスを使用しはじめたというログメッセージが出力されます。

    LOG:   wd_escalation: eslcalated to master pgpool
    ERROR: wd_create_send_socket: connect() is failed(Connection refused)
    LOG:   wd_escalation:  escaleted to delegate_IP holder

また、Standby サーバでも死活監視が開始します。

    LOG:   watchdog: lifecheck started

「delegate_IP」に指定した仮想 IP アドレスに、ping が通ることを確認します。

    [user@someserver]$ ping 133.137.177.142
    PING 133.137.177.143 (133.137.177.143) 56(84) bytes of data.
    64 bytes from 133.137.177.143: icmp_seq=1 ttl=64 time=0.328 ms
    64 bytes from 133.137.177.143: icmp_seq=2 ttl=64 time=0.264 ms
    64 bytes from 133.137.177.143: icmp_seq=3 ttl=64 time=0.412 ms

Active で仮想 IP アドレスが使われなくなったのを確認します。

    [root@osspc16]# ifconfig
    eth0      ...

    lo        ...

今度は Standby で仮想 IP アドレスが使われるようになったのを確認します。

    [root@osspc20]# ifconfig
    eth0      ...

    eth0:0    inet addr:133.137.177.143 ...

    lo        ...

仮想 IP アドレスを使って、PostgreSQL に接続できることを確認します。

    [user@someserver]$ psql -h 133.137.177.142 -p 9999 -l

△ back to top

# 応用

## 監視についての設定

watchdog の監視方法について設定するパラメータがあります。

監視間隔秒を指定する「wd_interval」、リトライ回数を指定する「wd_life_point」、 監視に使うクエリを指定する「wd_lifecheck_query」を記述します。

    wd_interval = 10
                                        # lifecheck interval (sec) > 0
    wd_life_point = 3
                                        # lifecheck retry times
    wd_lifecheck_query = 'SELECT 1'
                                        # lifecheck query to pgpool from watchdog

## 仮想 IP アドレス切り替えについての設定

仮想 IP アドレスの切り替えコマンドについて設定するパラメータがあります。

仮想 IP を切り替える際に使うコマンドとして「if_up_cmd」「if_down_cmd」、 そのパスを指定する「ifconfig_path」を記述します。 また、仮想 IP 切り替え後の ARP リクエスト送信コマンドを指定する「arping_cmd」、 そのパスを指定する「arping_path」を記述します。

なお通常は、デフォルト値のまま変更する必要はありません。

    ifconfig_path = '/sbin'
                                        # ifconfig command path
    if_up_cmd = 'ifconfig eth0:0 inet $_IP_$ netmask 255.255.255.0'
                                        # startup delegate IP command
    if_down_cmd = 'ifconfig eth0:0 down'
                                        # shutdown delegate IP command

    arping_path = '/usr/sbin'           # arping command path

    arping_cmd = 'arping -U $_IP_$ -w 1'

△ back to top

<copyright> Copyright © 2003 – 2012 pgpool Global Development Group </copyright>