VMware HA でハングした仮想マシンを自動再起動する

VMware HA は、ESXi ホスト障害時にクラスタ内の他の ESXi ホストで仮想マシンを起動しなおしてくれます。そのほかに、仮想マシンが単体でくたばってしまった場合にその仮想マシンだけ再起動してくれます。

VMware vSphere のドキュメント ページにある「可用性ガイド」に詳しい説明があるのでそれを見るのが確実です。

いわゆるOSがハングした状態である場合、仮想マシンvmware-tools からの応答が無いとハングしたと見なして仮想マシンにリセットがかかります。

または仮想マシン内の個別アプリケーションの状態を見て問題ありとなった場合に仮想マシンのリセットがかかるといったようなこともできます。これは作り込みが必要です。VMware HA はハートビートの有無で動作を決定するようですので、仮想マシン内でアプリを監視しつつハートビート信号を出すように作るのです。

VMware GuestAppMonitor SDK に含まれるライブラリを使って監視の仕組みを作れます。プログラムとかできないし、っていう場合でも、アーカイブに含まれる vmware-appmonitor を使えば自作のチェックプログラム(バッチファイルやシェルスクリプト)内から HAのハートビートをハイパーバイザ側に送れます。

仮想マシンのOSが生きてるのなら仮想マシンOSの中でアプリの問題を解決する手法をとった方が良いような気もしますが。仮想マシンそのものがハングったら通常の仮想マシン監視の枠内で再起動してくれるし。再起動するしかない状況が発生しうる環境で、かつその状態を生きてるOSの中から検知できるのなら使えますね。

動作テストするにあたってアプリ監視ならプロセスを kill するなりすればわりと簡単にテストできます。

仮想マシンがハングした場合というのをテストするには。最近のOSはかなりしっかりしているのでなかなかくたばらないんですよ。

でも大丈夫、くたばらせる仕組みがあります。

Linux なら、/proc/stsrq-trigger に対して echo c などとすればカーネルがクラッシュします。ガツンとCPUを食い尽くします。

Windows なら、sysinternal が提供する NotMyFault で様々なクラッシュを再現できます。

HA さんが正常に働いていれば設定した感度に応じて検知しリセットしてくれるでしょう。

障害時に勝手に再起動されたら困る、状況を分析するまで何もしてくれるなそのままにしておいてくれ、という現場がそこそこ有りそうな気もしますけども。