先日、クラスタ構成について記事を書きました。
(先日の記事はこちら: 【基礎】クラスタ構成の種類をまとめてみた)
今回はクラスタ構成を組む目的の1つである、高可用性を実現するためのソフトウェアツール、
pacemakerについて書きたいと思います。
注: pacemakerの機能を理解する目的の記事のため、具体的な設定方法などは書いていません。
もくじ
pacemakerとは
Linuxサーバのクラスタ構成で高可用性を実現するためのOSS。
通常、corosync(同じく高可用性実現のためのOSS。クラスタ通信層制御を行ってくれる)と一緒に使われることが多い。
corosyncの話はまた後日ということで、今回はpacemakerに絞って見ていく。
pacemakerは、クラスタ内のリソースを監視し、異常があればすぐに稼働系を切り替えることで、
サービス提供継続に貢献してくれる。
ただ、「異常」とひとことで言っても、様々な異常が考えられる。
物理サーバそのものが故障することもあれば、
サーバ上で動いているデータベースのファイルが破損することもある。
そのためpacemakerは、クラスタ内の監視対象を「リソース」として定義し、
各リソースの状態を監視する機能を持つ。
物理サーバの異常監視だけにとどまらないのがすごいところ。
リソースの種類
じゃあリソースってどんなものがあるのか?
結論、クラスタ内のほぼ全てなのだが、
詳細について、公式サイトに記載があったので、5点を引用 + 補足説明する。
■アプリケーション監視・制御機能
Apache, nginx, Tomcat, JBoss, PostgreSQL, Oracle, MySQL, ファイルシステム制御、
仮想IPアドレス制御、等、多数のリソースエージェント(RA)を同梱しています。
また、RAを自作すればどんなアプリケーションでも監視可能です。
→つまり、広く使われているアプリケーション(ミドルウェアと言ったほうが分かりやすい?)はもちろんのこと、
自社開発のアプリケーションも、
頑張ればpacemakerの監視対象としてリソース登録できるということ。
登録したミドルウェア、アプリケーションそれぞれについて細かに監視し、
例えばOracle DBに障害があれば稼働系切替を行うといったことが可能となる。
■ネットワーク監視・制御機能
定期的に指定された宛先へpingを送信することでネットワーク接続の正常性を監視できます。
→ネットワークも、監視対象としてリソース登録が可能。
pingが返ってこなければ、ネットワークに異常がある(実際はノードに異常があることもあるけど)と判断し、稼働系を切り替える。
■ノード監視機能
定期的に互いにハートビート通信を行いノード監視をします。
またSTONITH機能により通信不可となったノードの電源を強制的に停止し、両系稼働状態(スプリットブレイン)を回避できます。
→ハートビートとは、データをノード(サーバ)に送信し、一定時間内に応答が来るかどうかを確認すること。
応答がなかった場合は、送信先のサーバに異常が発生したとみなし、稼働系を切り替える。
また、スプリットブレイン(両系稼働状態)だと、サーバ2台ともサービスを提供することになるため、
各サーバが持つデータに不整合(矛盾)やデータクラッシュが起きてしまう。
そのため、異常が発生したサーバを強制的にシャットダウンすることで、更なる障害や異常を防ぐ機能を持つ。
言い換えると、pacemakerはサーバの電源を落とせるだけの力を持っている(電源管理)ということ。
pacemakerによる監視を厳しくしすぎると、シャットダウン多発でサービス停止ともなりかねないので、
過度になりすぎず、適切な監視設定にする必要がある。
■自己監視機能
Pacemaker関連プロセスの停止時は影響度合いに応じ適宜、プロセス再起動、またはフェイルオーバを実施します。また、watchdog機能を併用し、メインプロセス停止時は自動的にOS再起動(およびフェイルオーバ)を実行します。
→ここまで見てきた通り、pacemakerは、
ノード(物理サーバ) + アプリケーション(サーバ上に乗っかっているもろもろ) + ネットワーク
の監視を行うことが出来る。
それだけでもサーバリソースはほぼ網羅していると言えるが、
pacemaker自体に異常が発生する可能性もある。
そこでpacemakerは、自分がきちんと正常に動いているかセルフチェックし、
もし異常と判定すれば、自分の再起動や、自分が乗っているOS自体を再起動するといった対処を行う。
なかなかできるヤツ。
■ディスク監視・制御機能
指定されたディスクの読み込みを定期的に実施し、ディスクアクセスの正常性を監視します。
→最後に、ディスクの監視も可能。
クラスタ間で共有するディスクや、クラスタ内サーバの個々のディスクを、監視対象リソースとして登録することで、
ディスク故障などの異常を監視することができる。
監視設定はどうやるのか
pacemakerのリソースの登録先や、各リソースの監視詳細設定は、
基本的にpcsコマンドで行う(らしい。実機検証まだできてません(´・ω・`)違ったらごめんなさい)
監視詳細設定とは、例えば、
・監視間隔(ex. 10秒おき)
・監視方法(ex. pingを送信して応答確認)
・異常判定条件(ex. 2回再起動したらアウト)
など。
設定の実体は、corosync.confやcib.xmlに記載される模様。
ただし基本的にはファイルの直接編集は避け、pcsコマンドを用いる必要があるとのこと。
(参考: Red Hat公式ドキュメント)
おわりに
実際に使うところまでは理解に至っていないものの、
ひとまず概要を落とし込めたので、今回は良しとします(`・ω・´)