ラベル UPS の投稿を表示しています。 すべての投稿を表示
ラベル UPS の投稿を表示しています。 すべての投稿を表示

2016-04-14

Apcupsd を使用して LAN 上の複数のサーバを自動シャットダウンする

 1台のAPC社製 UPS を複数サーバで使用する場合、停電時にこれらのサーバ群を自動的かつ安全にシャットダウンしてくれる  Apcupsd というUPS 監視デーモンがフリーウェアとして配布されています。大分前に小社でこのソフトを評価したときには、当時の新しい Smart UPS に対応していなかったのですが、現在はほとんどのAPC製UPS に対応しています。本稿では備忘録を兼ねその使用方法を解説します。

※ 仮想マシンの自動シャットダウンについては、本稿末尾の「仮想マシンの自動シャットダウンについて」をご参照ください。

Apcupsd による APC Smart UPS 監視モデル


 下図のようにサーバ Aサーバ Bサーバ C という 3 台の Windows サーバ機が UPS に接続されているとします。
Apc Smart UPS 1500 へのケーブル接続例

 上図のように、複数のサーバが UPS から電力供給され(黒い矢印)、サーバ A がUSB ケーブルでUPSに接されています(青い矢印)。各サーバは同一のネットワーク上にあります(緑色の線)。
 このような状況で Apcupsd を使用すると、サーバAにUPSを監視させておき、停電などの電力遮断時に他のサーバを安全にシャットダウンさせることがことができます。以下がその構成イメージです。

Apcupsd による UPS 監視構成例

ここでは、サーバAがマスタ(Master)機になります。サーバAはUSB 信号を受け取りのために、USB ドライバのインストールも必要になります。サーバ B、およびサーバ C にも Apcupsd をインストールし、サーバ A からシャットダウン命令を受け取るためのスレーブ(Slave)設定を行います。


停電発生時のサーバシャットダウンシナリオ
  1. 停電発生時は、サーバA が USB 経由で停電状態を受信します(青い矢印)。
  2. サーバ B およびサーバ C が LAN 経由で サーバ A から停電状態を受信します(緑色の線)。
  3. 所定の時間内にサーバ Bおよびサーバ C の自動シャットダウンを実行後、サーバ A の自動シャットダウンを行います。これですべてのサーバがシャットダウンします。

 このシナリオを成功させるためには、事前に以下のことを考慮します。

考慮しておくべきこと
  1. すべてのサーバがシャットダウンするまでの所要時間はどれくらいになるか

    シャットダウン時間がかかりすぎる場合は、サーバが完全にシャットダウンする前に電力を使い切る恐れがあります。この場合はサーバが強制(異常)終了してしまいますので、バッテリー残量があるうちにすべてのサーバが完全にシャットダウンされるように計画します。

    ※ UPS の電源コードを抜き、バッテリー消費モードにしてから、シャットダウンの所要時間をそれぞれのサーバで計測し、すべてのサーバをシャットダウンさせてもバッテリーが残っていることを確認します。
    ※ UPS に接続された物理サーバで仮想マシンを運用している場合は、本稿末尾の「仮想マシンの自動シャットダウンについて」をご参照ください。
  2. シャットダウンの順番を計画する

    サーバプログラムの依存関係を調べ、バッテリー容量に余裕がある場合は、被依存のサーバは依存するサーバより後にシャットダウンするように計画します。

    ※ 今回の例では、スレーブとなるサーバ B およびサーバ C をシャットダウンさせた後で、サーバ A をシャットダウンするように計画します。


マスタとなるサーバ機に Apcupsd と USB ドライバをインストールする


 UPS 監視マスタとなるサーバ A に Apcupsd をインストールします。
 Apcupsd は以下のサイトよりダウンロードできます。ここでは WINDOWS BINARY (3.14.13) をダウンロードします。

 apcupsd サイト


 Apcupsd インストールの際は、すべての項目にチェックをつけておきます。


 
 途中、以下のような警告が表示されることがあります。これは、USB ドライバーの自動インストールができなかった場合に表示されるメッセージです。
 この後、手動インストール手順をご紹介しますので、ここでは“OK”ボタンをクリックして次へ進みます。



 さらにインストールが進むと、以下のようなメッセージが表示されます。設定ファイルを今編集するかどうかを尋ねているものです。


チェックをつけたままにして“Next”をクリックすると、以下のような設定ファイルが表示されます。



 APC Smart UPS に USB 接続しているのであれば特に編集する必要はありませんが、上記の conf をスクロールダウンし、 「UPSCABLE」に「usb」が指定されていれることを念のため確認します。

※このボックスのチェックを外すと、設定ファイルが開かないままインストールが進みますが、設定ファイル(apcupsd.conf)はこの後でも変更することができます。


 Apcupsd の起動オプションを選択します。ここでは両方の項目にチェックをつけた状態で“Next”をクリックします。



 インストールが成功すると、以下のメッセージが表示されます。このサービスはサーバ起動時に自動的に開始されます。


 
 システムトレイに監視アイコンを常駐させるか尋ねるダイアログが表示されますので、チェックをつけたまま“Next”ボタンをクリックします。



 Apcupsd のインストールができました。


USBドライバのインストール


 Apcupsd インストール直後のシステムトレイアイコンはこのような状態になっています。


 これは、UPS との接続が確立できていない COMMLOST 状態を示します。
 先ほどのインストールで USB ドライバのインストールに失敗したのが原因です。この場合は、手動でインストールします。

 コントロールパネルからデバイスマネージャーを開きます。
 バッテリーのセクションに、「American Power Conversion USB UPS」 という表記をみつけ、その項目を右クリックして「ドライバー ソフトウェアの更新(P)...を選択します」。



 ドライバの検索方法が表示されますので、「コンピュータを参照してドライバー ソフトウェアを検索します(R)」をクリックします。


 USB ドライバの場所を指定します。
 Apcupsd のインストール先直下の driver フォルダを指定します。



 “次へ”をクリックすると、USB ドライバがインストールされます。


 コントロールパネルより、サービスを開きます。
 Apcupsd UPS Minotor サービスを再起動します。



 アイコンが以下のように変化したら成功です。これは接続中の CONNECT 状態を示しています。

 アイコンを右クリックすると、サブメニューが開きますので、その中から「Status」を選択します。


 
 マスタサーバの UPS 監視ステータスが表示されますので、[Status] が 「ONLINE」 になっていること、[CABLE] が 「USB Cable」 になっていること、[UPSMODE]が 「Stand Alone」 になっていることなどを確認してください。



スレーブとなるサーバ機に Apcupsd をインストールする


 サーバ B、およびサーバ C にも Apcupsd をインストールします。
 インストール方法はマスタサーバと同様ですが、USB 接続はしないため、[USB ドライバ]のチェックは解除してください。



 Apcupsd インストール直後のシステムトレイアイコンはこのような状態になっています。


 これは、サーバ A との接続が確立できていない 「COMMLOST」 状態を示します。
 ここで、Apcupsd の設定ファイル apcupsd\etc\apcupsd.conf を開きます





  以下の項目を修正します。


UPSCABLE ether


UPSTYPE net
DEVICE 192.168.0.100:3551    ← サーバ A の IP アドレス、ポート番号に 3351 を指定


 ここまで設定したら、設定ファイルを保存して閉じます。


 コントロールパネルより、サービスを開きます。
 「Apcupsd UPS Minotor」 サービスを再起動します。



 アイコンが以下のように変化したら成功です。これは接続中の 「CONNECT」 状態を示しています。

 アイコンを右クリックすると、サブメニューが開きますので、その中から「Status」を選択します。


 
 スレーブサーバの UPS 監視ステータスが表示されますので、[Status] が 「ONLINE SLAVE」 になっていること、[CABLE] が 「Ethernet Link」 になっていることなどを確認してください。
 これは、マスタサーバの UPS 監視状態をスレーブサーバで取得していることを意味します。



スレーブサーバのシャットダウン待ち時間を指定する


 インストール作業が終わったら、スレーブサーバ(サーバ B および サーバ C )のシャットダウン待ち時間を指定します。

 これは、マスタ(サーバ A) 側で、停電状態が検知されてから、スレーブ側でシャットダウンを開始するまでの待ち時間となります。

 設定ファイル(apcupsd\etc\apcupsd.conf )を開き、TIMEOUT セクションの数値を変更します。
 デフォルトは 0 (シャットダウンしない)になっています。



 待ち時間は秒単位で指定します。
上図では 2 分を示す 120 が指定されています。5 分なら 300 のように指定しますが、あまり長すぎるとそれだけ停電時のバッテリーを消耗し、シャットダウン処理が完了する前にバッテリを使い切り異常終了してしまう可能性があるので、本稼働前に計画・テストするようにします。

 設定が終わったら、ファイルを保存します。
 その後、「Apcupsd UPS Minotor」 サービスを再起動すると、設定が有効になります。

マスタサーバのシャットダウン待ち時間を指定する


 これは、マスタ(サーバ A) 側の待ち時間設定もスレーブの場合と同様です。ただし、スレーブがシャットダウンを開始するのを確認した後でマスタサーバのシャットダウンが始まるようにしますので、スレーブの待ち時間よりも長めに設定しておきます。

 この待ち時間設定は、先述の「考慮しておくべきこと」セクションの内容を考慮したうえで行うようにします。


 設定が終わったら、ファイルを保存します。
 その後、「Apcupsd UPS Minotor 」サービスを再起動すると、設定が有効になります。


停電発生時のサーバシャットダウンのシミュレーションを行う


 ここでは、停電が発生したときのシミュレーションを行います。
 手順は以下のとおりです。

  1. それぞれのサーバの UPS 接続状態が ONLINE 状態になっていることを確認してから、UPS の電源コードを抜きます。UPS がバッテリーモードに切り替わり、アラート音が鳴り始めます。

  2. スレーブサーバ(サーバ B およびサーバ C)の待ち時間終了と同時に、スレーブサーバのシャットダウンが開始することを確認します。

  3. マスタサーバ(サーバ A)の待ち時間終了と同時に、マスタサーバのシャットダウンが開始することを確認します。

  4.  すべてのサーバが完全にシャットダウンするまで待ちます。バッテリーが十分余っていれば成功です。

  テストが終わったら UPS の電源コードを忘れずにコンセントに挿しましょうね><
 


尚、停電復旧後はサーバ機を起動する必要がありますが、無人のサーバセンターや夜間などスタッフが不在の場合に備え、WakeOnLAN (WOL)も検討しておくとよいでしょう(参考記事)。



仮想マシンの自動シャットダウンについて


 UPSに接続されたサーバがHyper-V等で仮想マシンをホストしている場合、そのホスト機がシャットダウンする際の仮想マシンの扱いに気をつける必要があります。

 仮想マシンの停止アクションは仮想マシンの設定画面で指定できます。



 自動停止アクションには 3 つのオプションが用意されています。
  1. 仮想マシンの状態を保存する(S) --- 稼働中の仮想マシンの状態を一時保存(起動ボタンを押すと稼働状態が復元される)

  2. 仮想マシンを停止する(T) --- 強制終了させる

  3. ゲストオペレーティングシステムをシャットダウンする(D) --- 仮想マシンをシャットダウンする

 通常はUPS の蓄電量に応じて、「仮想マシンの状態を保存する(S)」または「ゲストオペレーティングシステムをシャットダウンする(D)」を選択します。UPSの蓄電量が少なく、できるだけ早くシャットダウンする場合は前者を選択します。蓄電量が多く余裕をもってシャットダウンできるのであれば後者を選択したほうがいいかもしれませんが、 シャットダウン中に電池切れにならないように計画してください。

 すべての仮想マシンの自動停止アクションの設定が終わったら、ホストサーバのシャットダウン時を実行し、完全にシャットダウンして電源が切れるまでの時間を測定し、これを参考に Apcupsd のシャットダウン待ち時間(TIMEOUT)を算出してください。

仮想マシンの自動起動について


 ホストサーバ起動時に仮想マシンを自動起動するかどうかを決めます。仮想マシンの開始アクションは仮想マシンの設定画面で指定できます。



 自動開始アクションには 3 つのオプションが用意されています。
  1. 何もしない(N) --- アクションなし。仮想マシンが落ちていれば落ちたまま。
  2. 仮サービスが停止したときに実行されていた場合は自動的に起動する(U) --- 前回サーバがシャットダウンしたときに仮想マシンが稼働していた場合は稼働状態が復元される
  3. 常にこの仮想マシンを自動的に起動する(W--- 仮想マシンが停止していた場合にも自動的に起動する
CPU の性能とメモリ割り当てを考慮して、自動開始アクションを設定するとよいでしょう。




参考情報


Apcupsd User Manual --- Apcupsd のユーザマニュアル(英語)

Network UPS Tools --- いろんなネットワーク UPS ツールの情報サイト(英語)


(亀)