watchdog を構成する諸機能の内部動作

watchdog を構成する
諸機能の内部動作
pgpool-II day 2015
2015/05/15
長田 悠吾
pgpool-II Global Development Group
自己紹介
●
長田 悠吾 (Yugo Nagata)
●
pgpool-II 全般の対応
●
●
なんとなく watchdog 周りを担当することが多い
●
2
開発、バグ修正、解析、ドキュメント、リリース、yum レポジトリサーバ、ビルド
ファーム、RPM、 pgpoolAdmin、・・・
たまたま、最初に担当したのが watchdog 機能のテスト&
デバッグだった
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
今日のお話
●
Watchdog = pgpool-II 組み込みのHA機能
–
●
●
pgpool-II 自体が単一障害点(SPoF)になることを防ぐ
主な機能
–
pgpool-II の死活監視
–
仮想 IP の制御
–
pgpool-II 間の情報共有
その内部動作について、少しだけ詳しく話します
–
–
–
どんなプロセスで構成されるか
どんな情報をやりとりしているのか
どんな処理をしているのか
注意) pgpool-II 3.4 を前提にしています。
3
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
watchdog 機能概要
クライアント
クライアント
クライアント
クエリ
スタンバイ(待機系)
アクティブ(稼働系)
仮想IP
仮想IP
クエリ
制御
pgpool-II
監視
制御
相互監視
watchdog
watchdog
監視 pgpool-II
情報共有
クエリ
PostgreSQL
PostgreSQL
PostgreSQL
4
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
watchdog 機能概要
クライアント
クライアント
クライアント
障害発生
クエリ
ダウン
仮想IP
アクティブ(稼働系)
仮想IP
クエリ
制御
pgpool-II
監視
制御
相互監視
watchdog
watchdog
監視 pgpool-II
情報共有
クエリ
PostgreSQL
PostgreSQL
PostgreSQL
5
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
プロセス構成
pgpool-II 親プロセスから複数
の子プロセスが fork される
●
クライアント
仮想IP
pgpool
pgpool
pgpool
pgpool
child
child
child
child
pgpool
parent
制御
watchdog
監視
pgpool
parent
クエリ
ヘルスチェック
フェイルオーバ
制御
通知(受信)
lifecheck
lifecheck
通知(送信)
heartbeat
heartbeat
sender
sender
heartbeat
heartbeat
receiver
receiver
相互監視
PostgreSQL
PostgreSQL
PostgreSQL
6
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
watchdog
heartbeat
heartbeat
receiver
receiver
heartbeat
heartbeat
sender
sender
クライアント
クライアント
クライアント
死活監視
クエリ
スタンバイ(待機系)
アクティブ(稼働系)
仮想IP
仮想IP
クエリ
制御
pgpool-II
監視
制御
相互監視
watchdog
watchdog
監視 pgpool-II
情報共有
クエリ
PostgreSQL
PostgreSQL
PostgreSQL
7
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
死活監視(life check):概要
●
pgpool-II の障害発生の有無を監視する機能
●
●
「ハートビート信号」を互いに交換することで、他の pgpool-II の障
害を検知
– 定期的にハートビートを送信
– これが一定時間以上途切れたら、相手の pgpool-II は死んで
いる
自分自身の pgpool-II プロセスが生きているかも、定期的に確認
watchdog
プロセス
監視
pgpool-II
8
watchdog
ハートビート信号
プロセス
監視
pgpool-II
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
死活監視:障害が発生した場合の挙動
●
自分自身の障害を検出した場合
●
自分に障害が発生したことを他の pgpool-II に通知
watchdog
watchdog
障害通知
監視
pgpool-II
●
自分以外のアクティブ pgpool-II の障害を検出した場合
●
スタンバイのうち1つが、新しいアクティブに昇格する
アクティブ
pgpool-II
9
pgpool-II
検出 / 通知
スタンバイ
pgpool-II
昇格
スタンバイ
pgpool-II
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
アクティブ
pgpool-II
死活監視:全体像
仮想IP
仮想IP
制御
制御
pgpool
parent
監視
heartbeat
receiver 1
定期的にチェック
ハートビート信号
最終受信時刻
lifecheck
更新
heartbeat
sender 1
heartbeat
receiver 2
heartbeat
sender 2
10
通知
ハートビート信号を
定期的に送受信
(UDP パケット)
192.168.10.0/24
watchdog
heartbeat
sender 1
heartbeat
receiver 1
heartbeat
sender 2
192.168.20.0/24
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
heartbeat
receiver 2
死活監視:ハートビート通信(相互監視)
仮想IP
ハートビート信号受信
が一定時間途ない・・・
→ 相手 pgpool-II に
障害が発生!
ハートビート信号
最終受信時刻
11
更新
仮想IP
制御
watchdog
lifecheck
heartbeat
receiver 1
定期的にチェック
アクティブに昇格
仮想 IP を起動
ハートビート信号を
定期的に送受信
(UDP パケット)
heartbeat
sender 1
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
heartbeat
sender 1
heartbeat
receiver 1
死活監視:プロセス監視(自己監視)
仮想 IP を起動
仮想 IP の停止
仮想IP
制御
pgpool
parent
監視
自分自身に障害
が発生したこと
を通知
制御
watchdog
lifecheck
定期的に pgpool-II 親プロセスが
存在しているかをチェックする
通知を受けて
アクティブに昇格
親プロセスが存在しない場合には
自分自身に障害が発生したとみなす
12
仮想IP
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
死活監視:ハートビート通信の多重化
ハートビート経路
の多重化
(経路の数だけ
プロセスを生成)
heartbeat
receiver 1
定期的にチェック
ハートビート信号
最終受信時刻
更新
heartbeat
sender 1
heartbeat
receiver 2
heartbeat
sender 2
13
watchdog
lifecheck
192.168.10.0/24
heartbeat
sender 1
heartbeat
receiver 1
heartbeat
sender 2
192.168.20.0/24
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
heartbeat
receiver 2
クライアント
クライアント
クライアント
仮想 IP 制御
クエリ
スタンバイ(待機系)
アクティブ(稼働系)
仮想IP
仮想IP
クエリ
制御
pgpool-II
監視
制御
相互監視
watchdog
watchdog
情報共有
クエリ
PostgreSQL
PostgreSQL
PostgreSQL
14
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
監視 pgpool-II
仮想 IP の制御
●
仮想 IP 起動:
●
●
スタンバイ pgpool-II がアクティブに昇格するとき
仮想 IP 停止
●
アクティブ pgpool-II がダウンするとき
仮想IP
制御
制御
障害通知
lifecheck
監視
pgpool
parent
15
watchdog
heartbeat
heartbeat
sender
sender
他の pgpool-II
相互監視
heartbeat
heartbeat
receiver
receiver
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
仮想 IP の制御:コマンド
●
仮想 IP の起動 / 停止の際に呼ばれるコマンド
●
デフォルトでは ifconfig コマンドを使用
(次期バージョンからは ip コマンドを使用するよう変更されている)
●
仮想 IP 起動
if_up_cmd = 'ifconfig eth0:0 inet $_IP_$ netmask 255.255.255.0'
●
仮想 IP 停止
if_down_cmd = 'ifconfig eth0:0 down'
●
仮想 IP 起動後はネットワーク内のARP キャッシュを更新する
arping_cmd = 'arping ­U $_IP_$ ­w 1'
●
AWS の CLI などを実行するカスタムコマンドを設定することも可能
●
16
クラウドでの利用のためには、さらなる検証 & 改良が必要
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
クライアント
クライアント
クライアント
情報共有
クエリ
スタンバイ(待機系)
アクティブ(稼働系)
仮想IP
仮想IP
クエリ
制御
pgpool-II
監視
制御
相互監視
watchdog
watchdog
情報共有
クエリ
PostgreSQL
PostgreSQL
PostgreSQL
17
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
監視 pgpool-II
情報共有:pgpool-II サーバ情報
●
pgpool-II 間で互いの情報を共有している
●
ホスト名、ポート番号
–
●
ステータス
–
●
新アクティブを決める際に利用される
起動時に、他の pgpool-II に対して自分のサーバ情報を送信する
●
18
全ての pgpool-II で同じである必要がある
起動時刻
–
●
アクティブ / スタンバイ / ダウン など
仮想 IP 設定
–
●
通信の他、各 pgpool-II の ID 情報として使われる
再起動時には、そのサーバに関する情報が更新される
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
情報共有:DBノード情報の共有
●
DB ノード情報
●
各バックエンド DB が pgpool-II の管理下にあるか or ないか、
プライマリ DB か or スタンバイ DB か、などといった情報
●
DB のフェイルオーバやフェイルバックなどが発生した時
●
他の pgpool-II にイベントの内容を通知する
●
通知の種類:「切り離し」「復帰」「昇格」「オンラインリカバリの開始/終了」
DB #1 の切り離し処理
pgpool
parent
ファイルオーバ発生!
DB #1 の切り離し処理を実行
watchdog
通知
ヘルスチェック
フェイルーバ
PostgreSQL
PostgreSQL
PostgreSQL
19
signal
pgpool
parent
DB #1 の切り離し処理を実行
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
参考情報
●
●
pgpool-II オフィシャルサイト
●
http://www.pgpool.net/
●
http://www.pgpool.net/jp/
SRA OSS, Inc. 日本支社
●
セミナー資料、事例情報、技術情報
http://www.sraoss.co.jp/
●
●
20
Let's Postgres
●
PostgreSQL 情報のポータルサイト
●
http://lets.postgresql.jp/
メーリングリスト
●
[email protected][email protected]
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
最後に
●
watchdog の動きが何となくイメージできたでしょうか?
●
死活監視
●
仮想 IP 制御
●
情報共有
クライアント
仮想IP
クライアント
クライアント
クライアント
クエリ
スタンバイ(待機系)
アクティブ(稼働系)
仮想IP
仮想IP
pgpool
pgpool
pgpool
pgpool
child
child
child
child
pgpool
parent
制御
watchdog
制御
通知
lifecheck
クエリ
制御
pgpool-II
監視
制御
相互監視
watchdog
watchdog
情報共有
監視
pgpool
parent
監視 pgpool-II
クエリ
ヘルスチェック
フェイルオーバ
lifecheck
通知
heartbeat
heartbeat
sender
sender
heartbeat
heartbeat
receiver
receiver
クエリ
PostgreSQL
PostgreSQL
PostgreSQL
●
21
相互監視
watchdog
heartbeat
heartbeat
receiver
receiver
heartbeat
heartbeat
sender
sender
PostgreSQL
PostgreSQL
PostgreSQL
分からないことがあれば、後で直接でもメールでもご質問ください
(可能な範囲で)お答えいたします!
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
予備スライド
22
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
watchdog ステータス
●
ステータス
●
アクティブ(稼働系)
–
●
●
スタンバイ(待機系)
–
仮想 IP を保持していない pgpool-II
–
アクティブに昇格することができる
ダウン
–
●
23
仮想 IP を保持している pgpool-II (全体で1つのみ存在)
障害が発生したとみなされている pgpool-II
pgpool-II 起動時の動作
●
最初に起動した pgpool-II がアクティブとして起動する
●
2番目以降に起動した pgpool-II はアクティブに対してクラスタ参加申請
●
これが受理されるとスタンバイとして起動できる
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
死活監視(life check):概要
pgpool-II の障害発生の有無を監視する機能
●
死活監視には2種類のモードがある
●
●
クエリモード(非推奨)
●
●
「SELECT 1」などのクエリを
発行して pgpool-II の応答を
チェック
watchdog
watchdog
SELECT 1
SELECT 1
pgpool-II
SELECT 1
pgpool-II
ハートビートモード(標準)
●
「ハートビート信号」の交換
によって、他の pgpool-II の
障害を検知
watchdog
プロセス
監視
watchdog
ハートビート
信号
pgpool-II
プロセス
監視
pgpool-II
以降は、ハートビートモードの使用を前提に進めます。
24
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
死活監視:障害が発生した場合の挙動
●
自分自身の障害を検出した場合
●
自分に障害が発生したことを他の pgpool-II に通知
watchdog
watchdog
監視
障害通
知
pgpool-II
障害発生
●
pgpool-II
自分以外のアクティブ pgpool-II の障害を検出した場合、あるいは、アク
ティブ pgpool-II から障害通知(上述)を受け取った場合
●
スタンバイのうち1つが、新しいアクティブに昇格する
–
最も起動時間の早い pgpool-II
アクティブ 障害発生
pgpool-II
検出 / 通知
スタンバイ
pgpool-II
(0:00 起動)
比較
新アクティブに昇格
25
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
スタンバイ
pgpool-II
(1:00 起動)
仮想 IP の制御: root 権限
●
「仮想 IP の制御には root 権限が必要」
1. root ユーザで pgpool-II を起動する
2. sudo 権限のあるユーザで pgpool-II を起動する
●
仮想 IP 制御コマンドを “sudo ifconfig ...” などに設定
3. ifconfig コマンド等に setuid を設定する
# chmod 4755 /usr/sbin/ifconfig
●
●
26
一般ユーザが root 権限でコマンドを実行可能になる
実際には「pgpool-II 実行ユーザ専用の ifconfig コマンド」を用意す
るのがよい
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
情報共有:セキュアな通信
●
セキュリティの問題
●
●
watchdog 通信のプロトコルを知っていれば、pgpool-IIになり
すまして他の pgpool-II に影響を与えることができる
対応策
●
全ての pgpool-II で共通の「認証キー」を設定
–
認証キーの異なる pgpool-II からの通信は無視する
受信パケット
送信パケット
通信
パケット本文
認証情報
パケット本文
認証情報
比較
送信側
認証キー
27
md5ハッシュ化
受信側
認証キー
Copyright © 2015 SRA OSS, Inc. Japan All rights reserved.
md5ハッシュ化