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 がバッテリ駆動となり、サーバがシャットダウンが開始される前に電源が復旧した場合を想定します。
- UPS の電源コードを引っこ抜きます
- UPS の警告音が鳴り響き、UPS がバッテリ駆動になります
- ログに Power failure on UPS UPSNAME. Running on batteries. と表示されます
- 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 がバッテリ駆動となり、サーバがシャットダウンが開始された後に電源が復旧した場合を想定します。
- UPS の電源コードを引っこ抜きます
- UPS の警告音が鳴り響き、UPS がバッテリ駆動になります
- ログに Power failure on UPS UPSNAME. Running on batteries. と表示されます
- 設定したシャットダウン条件を満たすまで放置します
- ログに Reached run time limit on batteries. と表示されます
- 接続されたマシンがシャットダウンされます
- 接続されたマシンがすべてシャットダウンした後に、UPS もシャットダウンされるまで放置します
- UPS がシャットダウンされます
※Smart-UPS では、フロントパネルの LED が連続的に点灯する状態になります
- UPS がシャットダウンされます
- 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
参考: