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ハッシュ化
© Copyright 2024 ExpyDoc