高可用性クラスタを実現するソフトウェア Pacemakerの概要を学ぶ | 若手エンジニアのブログ

若手エンジニアのブログ

文系出身の若手女子エンジニアによる技術ブログ。
日々の経験や学びをアウトプットするためにブログを書いています。
バックエンド(Java+SpringFramework)を経てインフラエンジニアになりました。
今は育休中につき、本で勉強したことを中心にアウトプットしています。

先日、クラスタ構成について記事を書きました。

(先日の記事はこちら: 【基礎】クラスタ構成の種類をまとめてみた

 

今回はクラスタ構成を組む目的の1つである、高可用性を実現するためのソフトウェアツール、

pacemakerについて書きたいと思います。

 

注: 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公式ドキュメント

 

 

おわりに

実際に使うところまでは理解に至っていないものの、

ひとまず概要を落とし込めたので、今回は良しとします(`・ω・´)