ThingWorx 高可用性 > Pgpool-II を使用した PostgreSQL HA の展開例 > 9. Pgpool-II マスターノードおよびスタンバイノードでのウォッチドッグサービスの設定
9. Pgpool-II マスターノードおよびスタンバイノードでのウォッチドッグサービスの設定
ステップ 1
各 Pgpool-II ノードで pgpool.conf を編集して、関連するウォッチドッグの設定と値を追加します。
設定
説明
use_watchdog
on
Pgpool-II 内でのウォッチドッグをオンにします
wd_hostname
'10.91.9.101'
または
'10.91.9.102'
このウォッチドッグのホスト名または IP アドレス
wd_port
9000
このウォッチドッグのポート番号
delegate_IP
'10.91.9.100'
(Pgpool-II を経由して) クライアントが PostgreSQL にアクセスする際に使用する仮想 IP アドレス
ifconfig_path
'/etc/pgpool2'
if_up_cmd および if_down_cmd コマンドまたはスクリプトが含まれているディレクトリの絶対パス
if_up_cmd
'ifup.sh $_IP_$ <eni id of Pgpool node>'
Pgpool-II が delegate_IP アドレスとの仮想 IP インタフェースを起動するときに発行されるコマンド。Pgpool-II ノードの eni ID は、EC2 管理コンソールにログインして自分の Pgpool-II インスタンスに移動することによって取得できます。コンソール内の説明で「Network interfaces entry」を見つけ、「eth0」をクリックしてインタフェース ID を特定します。これを $<eni id of Pgpool node> に使用します。
if_down_cmd
ifdown.sh $_IP_$ <eni id of Pgpool node>
Pgpool-II が delegate_IP アドレスとの仮想 IP インタフェースを停止するときに発行されるコマンド。Pgpool-II ノードの eni ID を取得するには、if_up_cmd を参照してください。
arping_path
'/usr/bin'
インストール iputils-arping パッケージのパス
arping_cmd
'arping -U $_IP_$ -w 1'
IP の検証に使用される arping コマンド。
heartbeat_destination0
'10.91.9.102'
または
'10.91.9.101'
ハートビートチェックが行われる IP アドレス。other_pgpool_hostname0 設定の値
heartbeat_destination_port0
9694
デフォルト値を使用します。
heartbeat_device
'eth0'
ハートビート通信用 IP アドレスの NIC デバイス
other_pgpool_hostname0
'10.91.9.102'
または
'10.91.9.101'
その他の Pgpool-II サーバーインスタンスの IP アドレス
other_pgpool_port0
5432
その他の Pgpool-II ノードが受信するポート
other_wd_port0
9000
その他の Pgpool-II ウォッチドッグ機能が受信するポート
ステップ 2
pgpool.conf ファイルの if_up_cmd 設定で使用される ifup.sh スクリプトを作成します。
1. このスクリプトを /etc/pgpool2 ディレクトリに配置します。
2. これが PostgreSQL によって所有され、postgres ユーザーに属していることを確認します。
3. そのアクセス許可が 755 に設定されていることを確認します。
4. このファイルには以下が含まれている必要があります
#!/bin/bash -x
/sbin/ifconfig eth0:0 inet $1 netmask 255.255.255.0
ステップ 3
pgpool.conf ファイルの if_down_cmd 設定で使用される ifdown.sh スクリプトを作成します。
1. このファイルを /etc/pgpool2 ディレクトリに配置します。
2. これが PostgreSQL によって所有され、postgres ユーザーに属していることを確認します。
3. そのアクセス許可が 755 に設定されていることを確認します。
4. このファイルには以下が含まれている必要があります
#!bin/bash -x
/sbin/ifconfig eth0:0 down
ステップ 4
PostgreSQL ユーザーの .ssh/authorized_keys エントリに対応する ssh 公開キーを各 PostgreSQL データベースサーバー上の /root/.ssh ディレクトリに設定します。root ユーザーは HA (ウォッチドッグ組み込み) Pgpool-II プロセスを実行し、PostgreSQL データベースサーバーのフェールオーバーが発生した場合、/etc/pgpool2/failover.sh スクリプトを実行します。
* 
フェールオーバー時にはキーに関連する Permission Denied メッセージが生成されます。
ステップ 5
ウォッチドッグ付き Pgpool-II ノードを初めて起動する前に、/var/log/postgresql ディレクトリ内の pgpool_status ファイルをクリーンアップするか破棄することをお勧めします。これにより、Pgpool-II は起動時に pgpool.conf ファイルで node0 に設定されている PostgreSQL データベースを使用するようになります。フェールオーバーが発生し、マスターノードが pgpool.conf ファイル内の node0 エントリと一致しない場合、pgpool_status ファイルには Pgpool-II プロセスが開始してから停止するまでの現在のマスターが記録されているので、このファイルを保持します。
ステップ 6
1 つ目の Pgpool-II インスタンスで root ユーザーとして pgpool プロセスを開始します。これをサービスとして開始しないでください。次のコマンドを実行します。
sudo su
/usr/sbin/pgpool -n -f /etc/pgpool2/pgpool.conf > ~postgres/pgpool.log
2>&1 &
ステップ 7
syslog で Pgpool-II のエントリを表示して、ウォッチドッグ機能が適切に初期化されていることを確認します。
more /var/log/syslog | grep pgpool
ウォッチドッグと Pgpool-II が正常に初期化および開始されていることが出力に記載されている必要があります。
ステップ 8
Pgpool-II の新規プロセスを実行する前にこのログをクリアするには、既存の syslog を履歴参照用にバックアップしてから、以下のコマンドを呼び出すことをお勧めします。
> /var/log/syslog
~postgres/pgpool.log ファイルにエラーのエントリがないことを確認します。Pgpool-II プロセスが開始したことを確認します。
ステップ 9
PostgreSQL HA セクションで指定されているデフォルトのコンフィギュレーションによって、pgpool.conf ファイル内の num_init_children 設定に値 125 が設定されます。"接続リクエスト待機中" ステータスのプロセスが 125 個あり、そのうちの 1 つには "PCP:" というプレフィックスが付いています。このほかにも pgpool-II とウォッチドッグによっていくつかのプロセスが作成されます。
ステップ 10
インタフェース config (ifconfig) をチェックして、仮想 IP が作成されていることを確認します。pgpool.conf ファイル内の delegate_IP 設定に割り当てた IP アドレスを持つ新規ネットワークインタフェースが作成されていることを確認します。これを "eth0:0" と呼びます。
ステップ 11
2 つ目の Pgpool-II サーバーインスタンスで root ユーザーとして Pgpool-II プロセスを開始します。これをサービスとして開始しないでください。ログに、一方のインスタンスがマスターにプロモートされ、もう一方は正常に開始されたことが示されます。マスターでは、非マスター Pgpool-II インスタンスから (その IP アドレスを介して) 登録リクエストを受け付けたことがレポートされます。
ステップ 12
Pgpool-II プロセスを停止するには、以下のコマンドを root として使用します。
sudo su
/usr/sbin/pgpool --mode=immediate stop