2009/03/05

[Server]Apcupsd で UPS(APC Smart-UPS) を制御する



UPS(無停電電源装置) とは、停電や瞬断(瞬間停電)などの電力障害時でも、パソコンやサーバなどのコンピュータに電力を安定供給するための装置です。


UPS がない場合、システムの稼働中に停電が発生するとシステムが強制シャットダウンされ、ファイルが破損したり機器が故障したりする可能性があります。


そんなわけで、サーバには欠かせない UPS ですが、 通常、UPS とシリアルケーブルでつないだ 1台のサーバしか安全にシャットダウンすることができません。しかしながら、1台の UPS を複数のサーバで共有している場合、それでは困ります。


そこで、Apcupsd というソフトを使い、ネットワークでつながっている他のサーバも安全にシャットダウンできるようにします。



Apcupsd とは


Apcupsd とは、APC SmartUPS を制御、監視するソフトウェアで、Linux, Mac OC/X, Windows などの OS で動作可能です。



Apcupsd のインストール


今回は、NIS (Network Information Server) mode で構成します。この構成は、UPS と接続された NIS Server と、ネットワーク経由で情報を共有する NIS Client で構成されます。

従来の Master/Slave mode に置き換わるものです。


今回は、CentOS 4 の Linux サーバを NIS Server に、Windows マシンを NIS Client として構成します。



CentOS 4 へのインストール


SourceForge.net から、rpm パッケージをダウンロードします。CentOS 4 は、Red Hat Enterprise Linux (RHEL) のクローンですので、el4 の rpm をダウンロードし、インストールです。



$ wget http://jaist.dl.sourceforge.net/sourceforge/apcupsd/apcupsd-3.14.5-1.el4.i386.rpm
$ sudo rpm -ivh apcupsd-3.14.5-1.el4.i386.rpm


Windows へのインストール


SourceForge.net から、Windows バイナリをダウンロードします。インストールは、画面の指示に従い、すべてデフォルトでOKです。




Apcupsd の設定


設定ファイルである、 /etc/apcupsd/apcupsd.conf (Windows は C:\apcupsd\etc\apcupsd\apcupsd.conf) を各モードに合わせて編集します。


UPSTYPE や、UPSCABLE の設定は、各環境により異なります。詳しくはマニュアルを参照してください。


NIS Server/Client 共通の設定




UPSNAME SMART-UPS_700

ログ等に使用される UPS 識別名

UPSMODE net

ネットワーク機能を有効

NETACCESS true

ネットワークアクセスを有効



NIS Server の設定





UPSCABLE 940-0024C

SmartUPS 付属のケーブルを指定

UPSTYPE apcsmart

UPS の接続タイプを指定

DEVICE /dev/ttyS0

シリアルポートのデバイス名

KILLDELAY 180

apcupsd がシステムの再起動をコントロールできない時、UPS 自体をシャットダウンさせる

NETSERVER on

NIS を有効

NISIP 0.0.0.0

リクエストを受け付ける IP アドレス

NISPORT 3551

NIS Server の Port 番号
Firewall の設定で指定ポート(TCP)を開いてください

UPSCLASS standalone

APC ShareUPS を使用している場合以外は、通常 standalone

UPSMODE disable

APC ShareUPS を使用している場合以外は、通常 disable



NIS Client の設定





UPSCABLE ether

ネットワーク経由の設定

UPSTYPE net

UPS の接続タイプを指定

DEVICE 192.168.0.80:3551

NIS Server の IP:Port を指定

NETSERVER on

NIS を有効

UPSCLASS standalone

APC ShareUPS を使用している場合以外は、通常 standalone

UPSMODE disable

APC ShareUPS を使用している場合以外は、通常 disable



Apcupsd の起動および、動作確認



NIS Server の確認


起動は下記コマンドから。ついでに自動起動も設定します。


$ sudo /etc/rc.d/init.d/apcupsd start
$ sudo /sbin/chkconfig apcupsd on


設定の確認は、下記コマンドを実行します。下記のようにズラズラと出てくれば接続成功です。


$ apcaccess status
APC : 001,052,1243
DATE : Fri Feb 06 17:40:30 JST 2009
HOSTNAME : example
RELEASE : 3.14.5
VERSION : 3.14.5 (10 January 2009) redhat
UPSNAME : UPS_IDEN
CABLE : APC Cable 940-0024C
MODEL : SMART-UPS 700
.
.
.


NIS Client の確認


Windows の場合は、自動的に起動時に apcupsd サービスが起動するようになっています。


タスクトレイにあるアイコンをダブルクリックすると、状態を確認できます。



Apcupsd をブラウザから管理


Apcupsd には、CGI で UPS の状態を参照できるスクリプトが用意されています。このスクリプトを利用し、Web 経由で状態を確認できるようにします。


SourceForge.net から、rpm パッケージをダウンロードします。apcupsd-multimon-x.x.x.rpm をダウンロードし、インストールです。



$ wget http://jaist.dl.sourceforge.net/sourceforge/apcupsd/apcupsd-multimon-3.14.5-1.el4.i386.rpm
$ rpm -ivh apcupsd-multimon-3.14.5-1.el4.i386.rpm


次のようなエラーが出た場合は、gd を更新 します。


エラー: Failed dependencies:
gd >= 2.0 is needed by apcupsd-multimon-3.14.5-1.i386
libgd.so.2 is needed by apcupsd-multimon-3.14.5-1.i386
Suggested resolutions:
/home/buildcentos/CENTOS/en/4.0/i386/CentOS/RPMS/gd-2.0.28-5.4E.i386.rpm

$ wget ftp://mirror.switch.ch/pool/3/mirror/centos/4.6/os/i386/CentOS/RPMS/gd-2.0.28-5.4E.i386.rpm
$ sudo rpm -Uvh gd-2.0.28-5.4E.i386.rpm


インストール後は、 /var/www/cgi-bin にある次のファイルを、Web サーバの cgi ディレクトリにコピーします。



  • multimon.cgi

  • upsfstats.cgi

  • upsimage.cgi

  • upsstats.cgi


ブラウザから http://example/cgi-bin/multimon.cgi へ Web 経由でアクセスし、次のような画面が表示されれば成功です。



Apcupsd をテストする



最後に、実際に電源障害があった事態を想定しテストをしてみます。


テストのため、設定ファイル (/etc/apcupsd/apcupsd.conf) の下記ディレクティブの TIMEOUT を変更しておきます。

BATTERYLEVEL, MINUTES, そして TIMEOUT は、どれか早い方の条件が満たされた場合にシャットダウンが開始されます。

設定変更後は、 Apcupsd の再起動を忘れずに。


なお、電源復旧時にマシンが自動的に起動するためには、BIOS 設定が必要になります。デフォルトでは、電源復旧時に自動起動する設定は OFF になっていることが多いので、確認が必要です。



BATTERYLEVEL 5

バッテリ残量が指定値以下(%)

MINUTES 3

バッテリ駆動が可能な予想残り時間が指定値以下(分)

TIMEOUT 300

バッテリ駆動となってからの時間が指定値経過(秒)




短期停電


UPS がバッテリ駆動となり、サーバがシャットダウンが開始される前に電源が復旧した場合を想定します。



  1. UPS の電源コードを引っこ抜きます

    • UPS の警告音が鳴り響き、UPS がバッテリ駆動になります

    • ログに Power failure on UPS UPSNAME. Running on batteries. と表示されます



  2. UPS の電源コードを接続します

    • UPS が商用電源モードに復旧します

    • ログに Power is back. UPS running on mains. と表示されます




apcupsd[3505]: Power failure.
apcupsd[3505]: Running on UPS batteries.

Broadcast message from root :

Power failure on UPS SMART-UPS_700. Running on batteries.
wall[15799]: wall: user root broadcasted 1 lines (59 chars)

Broadcast message from root :

Power has returned on UPS SMART-UPS_700...
apcupsd[3505]: Mains returned. No longer on UPS batteries.
apcupsd[3505]: Power is back. UPS running on mains.
wall[15861]: wall: user root broadcasted 1 lines (44 chars)

上記の Apcupsd からのメッセージは、root 宛てにメールでも送信されます。



長期停電


UPS がバッテリ駆動となり、サーバがシャットダウンが開始された後に電源が復旧した場合を想定します。



  1. UPS の電源コードを引っこ抜きます

    • UPS の警告音が鳴り響き、UPS がバッテリ駆動になります

    • ログに Power failure on UPS UPSNAME. Running on batteries. と表示されます



  2. 設定したシャットダウン条件を満たすまで放置します

    • ログに Reached run time limit on batteries. と表示されます

    • 接続されたマシンがシャットダウンされます



  3. 接続されたマシンがすべてシャットダウンした後に、UPS もシャットダウンされるまで放置します

    • UPS がシャットダウンされます

      ※Smart-UPS では、フロントパネルの LED が連続的に点灯する状態になります



  4. UPS の電源コードを接続します

    • UPS が再起動します

    • UPS が商用電源モードに復旧します

    • 接続されたマシンが再起動します

      ※自動で再起動しない場合は、BIOS の設定を見直してください。




apcupsd[3280]: Power failure.
apcupsd[3280]: Running on UPS batteries.
wall[4761]: wall: user root broadcasted 1 lines (59 chars)
apcupsd[3280]: Reached run time limit on batteries.
apcupsd[3280]: Initiating system shutdown!
apcupsd[3280]: User logins prohibited
wall[5185]: wall: user root broadcasted 1 lines (67 chars)
wall[5188]: wall: user root broadcasted 1 lines (47 chars)
shutdown: shutting down for system halt


参考:


5 件のコメント:

匿名 さんのコメント...

コメントではなく質問です!
この場合、LinuxのほうのNIS
を起動する必要はあるでしょうか?

ishikawa.rs さんのコメント...

記事の例では NIS (Network Information Server) mode での構築ですので、NETSERVER on にし、 NIS を有効にしていますよ。

匿名 さんのコメント...

すみません。質問が言葉足りませんでした。apcupsdではNISを使うように設定していますが、/var/log/messegesには:
Feb 22 15:23:10 localhost apcupsd[14337]: NIS server startup succeeded
が出ています。
 しかし、slaveからの通信はうまくいきません。
 CentOSは独自にパスワードを認証しているため、NISサービス(ypservなど)は起動していません。このせいですか?
 御教示をください。

ishikawa.rs さんのコメント...

NIS (Network Information Server) mode は、apcupsd においてネットワーク経由で Master/Slave の UPS を管理するモードです。
ここでの NIS は ypservなどの NIS (Network Information Service) とは別物だと思います。
ですので、slave からの通信が上手くいかないのは別の問題だとおもいますよ。

匿名 さんのコメント...

naoki様:
 NISで勘違いをしてしまいました。
うまくいきました。ありがとうございました。