| Pgpool-II 4.1.0 文書 | |||
|---|---|---|---|
| 前のページ | 上に戻る | 第 8章設定の例 | 次のページ | 
ここではwatchdogの機能を簡単に試す方法を説明します。 Linux マシン2台にそれぞれ Pgpool-II がインストールされているものとします。 また、いずれかのマシンか第 3 のマシンに、PostgreSQL がインストールされて稼働しているものとします。 バックエンドノードは1台でかまいません。 Pgpool-II がどのモードで稼働していても(レプリケーションモードでもマスタースレーブモードでも)、watchdogを利用することができます。
この例では、「osspc16」をActiveノードとして、「osspc20」をStandbyノードとして使います。 「someserver」は、これらのどちらかということを意味しています。
アクティブとスタンバイの両サーバで以下を設定します。
上流のサーバ(アプリケーションサーバなど)を指定します。 空欄にしておいても構いません。
     trusted_servers = ''
     # trusted server list which are used
     # to confirm network connection
     # (hostA,hostB,hostC,...)
    
仮想IPをdelegate_IPに設定します。
      delegate_IP = '133.137.177.143'
      # delegate IP address
     
注意: 仮想IPに設定されるIPアドレスは空いており他のマシンで使用されていないことを確認してください。
次に、それぞれのPgpool-IIで以下のパラメータを設定します。 other_pgpool_hostname、other_pgpool_port、other_wd_portを他のPgpool-IIの値で設定します。
     other_pgpool_hostname0 = 'osspc20'
     # Host name or IP address to connect to for other pgpool 0
     other_pgpool_port0 = 9999
     # Port number for other pgpool 0
     other_wd_port0 = 9000
     # Port number for other 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 other pgpool 0
     other_wd_port0 = 9000
     # Port number for other 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プロセス起動したことが確認できます。
     LOG:  I am announcing my self as master/coordinator watchdog node
     LOG:  I am the cluster leader node
     DETAIL:  our declare coordinator message is accepted by all nodes
     LOG:  I am the cluster leader node. Starting escalation process
     LOG:  escalation process started with PID:59449
     LOG:  watchdog process is initialized
      LOG:  watchdog: escalation started
      LOG:  I am the master watchdog node
     DETAIL:  using the local backend node status
    
次に、StandbyサーバでPgpool-IIを起動します。
     [user@osspc20]$ su -
     [root@osspc20]# {installed_dir}/bin/pgpool -n -f {installed_dir}/etc/pgpool.conf > pgpool.log 2>&1
    ログメッセージからPgpool-IIがwatchdogクラスタにスタンバイとして参加したことがわかります。
     LOG:  watchdog cluster configured with 1 remote nodes
     LOG:  watchdog remote node:0 on Linux_osspc16_9000:9000
     LOG:  interface monitoring is disabled in watchdog
     LOG:  IPC socket path: "/tmp/.s.PGPOOLWD_CMD.9000"
     LOG:  watchdog node state changed from [DEAD] to [LOADING]
     LOG:  new outbound connection to Linux_osspc16_9000:9000
     LOG:  watchdog node state changed from [LOADING] to [INITIALIZING]
     LOG:  watchdog node state changed from [INITIALIZING] to [STANDBY]
           LOG:  successfully joined the watchdog cluster as standby node
      DETAIL:  our join coordinator request is accepted by cluster leader node "Linux_osspc16_9000"
      LOG:  watchdog process is initialized
     
    
仮想 IP アドレスに、pingが通ることを確認します。
    [user@someserver]$ ping 133.137.177.143
    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を立ち上げたStandbサーバは、仮想IPアドレスを使っていないことを確認します。
    [root@osspc20]# ifconfig
    eth0      ...
    lo        ...
   仮想IPアドレスを使って、PostgreSQL に接続をできることを確認します。
[user@someserver]$ psql -h 133.137.177.143 -p 9999 -l
Activeサーバがサービス供給不可な状態になったときに、Standbyがそれを引き継ぐのを確認します。 ActiveサーバのPgpool-IIを停止します。
    [root@osspc16]# {installed_dir}/bin/pgpool stop
   するとStandbyサーバで、仮想IPアドレスを使用しはじめたというログメッセージが出力されます。
         LOG:  remote node "Linux_osspc16_9000" is shutting down
     LOG:  watchdog cluster has lost the coordinator node
    
    LOG:  watchdog node state changed from [STANDBY] to [JOINING]
    LOG:  watchdog node state changed from [JOINING] to [INITIALIZING]
    LOG:  I am the only alive node in the watchdog cluster
    HINT:  skipping stand for coordinator state
    LOG:  watchdog node state changed from [INITIALIZING] to [MASTER]
    LOG:  I am announcing my self as master/coordinator watchdog node
    LOG:  I am the cluster leader node
    DETAIL:  our declare coordinator message is accepted by all nodes
         LOG:  I am the cluster leader node. Starting escalation process
     LOG:  watchdog: escalation started
    
    LOG:  watchdog escalation process with pid: 59551 exit with SUCCESS.
   仮想 IP アドレスに、pingが通ることを確認します。
    [user@someserver]$ ping 133.137.177.143
    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.143 -p 9999 -l
watchdog の監視方法について設定するパラメータがあります。 監視間隔秒を指定するwd_interval、死活監視のタイプを指定するwd_lifecheck_methodを記述します。 heartbeat方式では、障害と判断する秒数を指定するwd_heartbeat_deadtime、受信ポート番号を指定するwd_heartbeat_port、ハートビート信号の送信間隔秒を指定するwd_heartbeat_keepalive、送信先heartbeat_destination<emphasis>0</emphasis>、heartbeat_destination_port<emphasis>0</emphasis>を記述します。
	    wd_lifecheck_method = 'heartbeat'
	    # Method of watchdog lifecheck ('heartbeat' or 'query' or 'external')
	    # (change requires restart)
	    wd_interval = 10
	    # lifecheck interval (sec) > 0
	    wd_heartbeat_port = 9694
	    # Port number for receiving heartbeat signal
	    # (change requires restart)
	    wd_heartbeat_keepalive = 2
	    # Interval time of sending heartbeat signal (sec)
	    # (change requires restart)
	    wd_heartbeat_deadtime = 30
	    # Deadtime interval for heartbeat signal (sec)
	    # (change requires restart)
	    heartbeat_destination0 = 'host0_ip1'
	    # Host name or IP address of destination 0
	    # for sending heartbeat signal.
	    # (change requires restart)
	    heartbeat_destination_port0 = 9694
	    # Port number of destination 0 for sending
	    # heartbeat signal. Usually this is the
	    # same as wd_heartbeat_port.
	    # (change requires restart)
	   
IP アドレスの切り替えコマンドについて設定するパラメータがあります。 仮想 IP を切り替える際に使うコマンドとしてif_up_cmd、if_down_cmd、そのパスを指定するif_cmd_pathを記述します。 また、仮想IP切り替え後のARPリクエスト送信コマンドを指定するarping_cmd、そのパスを指定するarping_pathを記述します。
if_cmd_path = '/sbin' # path to the directory where if_up/down_cmd exists if_up_cmd = 'ip addr add $_IP_$/24 dev eth0 label eth0:0' # startup delegate IP command if_down_cmd = 'ip addr del $_IP_$/24 dev eth0' # shutdown delegate IP command arping_path = '/usr/sbin' # arping command path arping_cmd = 'arping -U $_IP_$ -w 1'
wd_escalation_commandおよびwd_de_escalation_commandパラメータに指定した任意のスクリプトで仮想IPの起動・停止を行うこともできます。