このチュートリアルでは、watchdog 機能を試す方法を説明します。
Linux マシン 2 台にそれぞれ pgpool-II がインストールされているものとします。 また、いずれかのマシンか第 3 のマシンに、PostgreSQL がインストールされて稼働しているものとします (backend ノードは 1 台でかまいません)。 なお、pgpool-II はどのモードで稼働していても、watchdog を利用することができます。
この文書では、Active を「osspc16」、Standby を「osspc20」とします。 また psql などを実行するサーバを便宜上「someserver」と表記していますが、Active、Standby のサーバで構いません。
2 台の pgpool-II でそれぞれ設定します。
まず、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 を起動するポートを「wd_port」」を指定します。
ここではデフォルトのままにしておきます。
wd_port = 9000 # port number for watchdog service
仮想 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 コマンドの実行結果どおりのものを記述します。
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
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 を root で起動します。 なお、ログで動作確認するため、-n オプションをつけて非デーモンモードで起動し、 出力されるログメッセージを pgpool.log ファイルにリダイレクトします。
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 を起動します。
[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
「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
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
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 を切り替える際に使うコマンドとして「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'