2013年5月12日日曜日

無償版ESXiで停電時の自動シャットダウンを試みた

サーバー導入を期に停電や計画停電に備えてUPSを導入しました。
導入したUPSはOMRONのBU50SW。常時インバータ方式の正弦波のタイプです。
付属している電源管理ソフトウェアはPowerActProで、VMWareESXi5.1にも対応して、価格も5万円代だったので即買しました。
簡単に自動シャットダウン出来るものだと思っていたら以外にハマッてしまったので記録に残しておきます。

まずは環境から。

サーバ機:DELL PowerEdge T100 II
OS:VMWare ESXi 5.1(無償版)
UPS:OMRON BU50SW
シャットダウンソフト:PowerActPro(BU50SWに付属)

ESXi上に、WindowsServer2012、Windows8、vMAの仮想マシンを作成しています。


まずは、マニュアル通りにマスターエージェントをインストールします。
マスターエージェントはWindowsかLinuxにしか対応していないので、今回は既に導入しているWindowsServerにインストールしました。

そして、ESXiをシャットダウンするには、スレーブエージェントをvMAにインストーする必要があるとの事なので、vMAをvmwareのサイトからダウンロードしてデプロイします。

そして、vMAに管理するESXiを登録し、スレーブエージェントをインストールします。

UPSのコンセントを抜いて、偽装停電環境を作ってみると、スレーブエージェントをインストールしたvMAとマスターエージェントをインストールしたWindowsServerはシャットダウンしますが、ESXiはシャットダウンしません。
そのうちシャットダウンするかもと思い、待ってみましたがシャットダウンせずにUPSの電源が切れてESXiが起動したままサーバ機の電源ばブチ切れました・・・。
マニュアル通りに設定しているのにです。
メーカーは、ESXi5.1にも正式に対応していると言っています。
おかしいです。

色々ググってもESXi5.1の情報がなかなかありません。

根気よく調べてたら、あることが分かりました。
ESXiの無償版ではvMAからESXiホストをシャットダウンすることが出来ないのです。
PowerActoProを使用して自動シャットダウンするには、有償版のESXiを購入する必要があるんです。
懐が寒い僕には無理です。買えません。

どうにかならないかと調べました。
調べまくりました。

そして見つけました。
ESXiには標準で仮想マシンのシャットダウンを行なってくれるスクリプトが用意されてるのです。
/sbin/shutdown.sh がそれです。

さっそくSSHでESXiにrootでログインして shutdown.sh をキックしてみました。
次々に仮想マシンがシャットダウンされていきます。
※仮想マシンにはVMWareTOOLSをインストールしておく必要があります。
 VMWareTOOLSをインストールしていない仮想マシンはシャットダウンスクリプトでシャットダウンすることも出来ます。

そして難なくすべての仮想マシンがシャットダウンされました。
あとは、ESXiのシャットダウンだけです。
ESXiはLinuxベースなので、haltでシャットダウン出来ます。

PowerActoProには、スクリプトシャットダウンという機能があります。
ここに、shutdown.sh と halt をキックする設定が出来ればいいんですが、複数のコマンドは設定できないので、ESXiホスト上にスクリプトを用意してあげます。

僕は、/vmfs/volumes/datastore1/serverShutdown.sh というスクリプトファイルを作成しました。

# vi /vmfs/volumes/datastore1/serverShutdown.sh

shutdown.sh
halt

:wq! で保存して終了します。

実行権限を与えます。
# chmod 755 /vmfs/volumes/datastore1/serverShutdown.sh

あとは、この serverShutdown.sh をスクリプトシャットダウンに設定してあげるだけです。

IPアドレスには、ESXiホストのIPを指定します。
接続機器名は何でもいいです。自分でわかる名前を指定して下さい。
一般ユーザIDに root を設定します。
一般ユーザパスワードに ESXiホストのrootのパスワードを設定します。
コマンドラインには、先ほど作成した、serverShutdown.sh をフルパスで指定します。



これで、設定は完了しました。
さて、うまく自動シャットダウン出来るでしょうか・・・ドキドキ・・・・

UPSのコンセントを抜いたら、無事シャットダウンされてUPSの電源も切れました。

続いて、停電復帰後の自動起動の確認です。

UPSのコンセントを指します。
UPSの電源が入ります。
続いて、サーバ機の電源が入りま・・・・・・せん・・・・。

はい。標準のBIOS設定のままでは電源復帰後の自動起動は無効になっています。
なので、BIOSで自動起動を有効にしてあげます。
SystemSecurity → AC Power Recovery を On に変更します。
※PowerEdge T110 II の場合です。他のマシンの場合は読み替えて下さい。
 同じような設定があると思います。

これで電源復帰後に自動起動されるようになります。

サーバを通常通り起動したあと、再度UPSのコンセントを抜きます。
正常にシャットダウンされたあと、UPSののコンセントを指します。
UPS、サーバ機とも無事起動されました。

これより、もっといい方法も有るかもしれません。

こうすれば良いよ!とか有れば教えて下さい。

5 件のコメント:

  1. お世話になります。お伺いしたいことがあります。

    シャットダウン時のシーケンスは、
    ①ゲストOSのシャットダウン
    ②ESXiのシャットダウン
    ③vMAのシャットダウン
    となると思いますが、ESXiのシャットダウンがvMAのシャットダウンより早く実行されてしまうことはありませんか?
    対策など有りましたら教えてください。
    よろしくお願いいたします。

    返信削除
    返信
    1. 私も詳細な動作までは確認してませんので、実際にどのような処理順になってるかは不明ですが、おそらく以下の順序になってると思います。
      ①ゲストOSのシャットダウン(vMAも含む)
      ②ESXiのシャットダウン

      いろいろ試行錯誤してましたのでvMAも動作していますが、不要かもしれません。
      /sbin/shutdown.sh はvMAではなく、ESXiに用意されてるスクリプトだったと思いますので。
      とりあえずシャットダウンと復帰ができているので、深く考えずに良しとしています。

      削除
  2. この記事を参考にUPSの導入を進めています。
    役に立つ記事をありがとうございます。
    現在、PowerActPro用のVMを用意しているところです。

    ところで、この記事ではシャットダウン用のスクリプトを用意されていますが、これはESXiの自動シャットダウン機能を併用すれば、halt一発で済みませんか?
    何か見落としがあるのでしょうか?

    返信削除
    返信
    1. /sbin/shutdown.sh がhalt時にシステムから呼ばれてたらhalt一発で済むと思います。
      その辺は調べきれていません・・・。

      削除
  3. 返信ありがとうございます。

    昨夜、無事動作することを確認しました。
    shutdown.shがキックされたのかはわかりませんが、haltで全VMがシャットダウンされたあとに、本体の電源が落ちました。

    返信削除