ゲリラ雨・雷と停電対策に無停電電源装置(UPS): APC ES725設定編

APC ES725にはDELLのサーバー1台を接続します。サーバーはLinux(Fedora Core)が動作しており、フリーのUPS制御daemon(デーモン) apcupsdを使い、USB接続でUPSを制御します。

【スペック】
無停電電源装置(UPS)、APC ES 725 725VA(450W)
本番サーバー DELL PowerEdge 500 (定格420W)

【本番サーバー】
・linuxシャットダウン
・本体分解、掃除(ほこりを取る)

DSC_6799

・UPS接続、USBケーブル接続

DSC_6804

・(ネットワークケーブル接続)
・UPS ON
・(サーバーの電源ケーブルをUPSへ挿入)
・サーバーON
・sshを確認
・apacheの起動確認
(以降、私の環境のみ。詳細後述)
・(ログチェック(tail -fする))
・(ルーターのアドレス変換を元に戻す)
・(ログ確認、本番サーバーへのアクセスを確認)

【USBデバイスの確認】
USBなので自動認識するはずですが、念のため確認。

# dmesg | grep usb
usbcore: registered new driver usbfs
usbcore: registered new driver hub
usbcore: registered new driver hiddev
usbcore: registered new driver usbhid
drivers/usb/input/hid-core.c: v2.01:USB HID core driver
usb 4-1: new low speed USB device using uhci_hcd and address 2
hiddev96: USB HID v1.10 Device [APC APC ES 725 FW:821.y2 .A USB FW:y2 ] on usb-0000:00:1d.2-1

# /sbin/lsusb
Bus 005 Device 001: ID 0000:0000
Bus 004 Device 002: ID 051d:0002 American Power Conversion Back-UPS Pro 500/1000/1500
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000

USBを認識し、APCが見えていることを確認。

【APCUPSDの設定】
apcupsdとはAPC社のUPSを操作するdaemonです。

【参考URL】
WAVE ログ: UPS(無停電電源装置) カテゴリー
apcupsd(停電対策)/Fedora Core4
ITmedia エンタープライズ:How-To:特別企画:UPSを利用した電源対策

私が利用しているlinux(Fedora Core)が古いため、すでに最新版でのビルドはありません。ソースからビルドしようとしたところ、ビルドはできるもののインストール(make install)で失敗。

仕方ないのでFedora Coreのバージョンに合致し、USBサポートをしているrpmを検索。

例)apcupsd-usb-3.12.2-1.fcX.i386.rpm

これをftpでダウンロードし、インストール
# rpm -ivh apcupsd-usb-3.12.2-1.fcX.i386.rpm

/etc/apcupsd/以下の設定ファイルが展開されるので、少々手直し。

UPSCABLE usb
UPSTYPE usb
DEVICE /dev/hiddev0 (指定しない場合は自動認識)
LOCKFILE /var/lock
ONBATTERYDELAY 6
BATTERYLEVEL 5
MINUTES 3 (バッテリーのruntimeが残り3分以下になったらシャットダウン動作)
TIMEOUT 300 (バッテリー駆動後300秒でシャットダウン動作)
ANNOY 300 (シャットダウンする300秒前にユーザーにサインオフを促す)
ANNOYDELAY 60 (電源障害後、ユーザーにログアウト警告するまでの時間)
NOLOGON disable (電源障害時でも、ユーザーのログオンを許可する)
KILLDELAY 0
NETSERVER on
NISIP 0.0.0.0
NISPORT 3551
EVENTSFILE /var/log/apcupsd.events
EVENTSFILEMAX 10
UPSCLASS standalone
UPSMODE disable
STATTIME 0
STATFILE /var/log/apcupsd.status
LOGSTATS off
DATATIME 0

結果的には参考リンク先とまったく同じに(苦笑)。
DEVICEは記述しなくても認識していました。

【cgiによるモニタリング】

cgi-binディレクトリに、/etc/apcupsd/cgi/*をコピー。

ローカルネットワークからのみのアクセスに変更。
- http.conf

ScriptAlias /cgi-bin/ "/usr/local/apache13/cgi-bin/"

AllowOverride None
Options None
#Order allow,deny
Order deny,allow
#Allow from all
Deny from all
Allow from 127.0.0.1
Allow from 192.168

http://192.168.xx.xx/cgi-bin/multimon.cgi

でアクセス。

Clipboard01
(メイン画面)

Clipboard02
(詳細画面)
バッテリ残量は100%、使用消費電力は22%で、バッテリー駆動で(推定)29分使用できる状態。

Clipboard03
他にもバッテリー電圧と電源入力電圧を見ることができます。ただし出力電圧は未対応のため見られません。


【コンソールによる詳細情報表示】

コンソールからも情報を取得可能。
$ /sbin/apcaccess

[tnoma@nomano apcupsd]$ /sbin/apcaccess
APC : 001,034,0861
DATE : Wed Sep 03 02:27:58 JST 2008
HOSTNAME : nomano.shiwaza.com
RELEASE : 3.12.2
VERSION : 3.12.2 (18 January 2006) redhat
UPSNAME : nomano.shiwaza.com
CABLE : USB Cable
MODEL : APC ES 725
UPSMODE : Stand Alone
STARTTIME: Tue Sep 02 01:49:57 JST 2008
STATUS : ONLINE
LINEV : 098.0 Volts
LOADPCT : 22.0 Percent Load Capacity
BCHARGE : 100.0 Percent
TIMELEFT : 29.0 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME : 300 Seconds
LOTRANS : 090.0 Volts
HITRANS : 110.0 Volts
ALARMDEL : Always
BATTV : 13.6 Volts
LASTXFER : Low line voltage
NUMXFERS : 0
TONBATT : 0 seconds
CUMONBATT: 0 seconds
XOFFBATT : N/A
STATFLAG : 0x07000008 Status Flag
MANDATE : 2007-12-02
SERIALNO : 5B0748T48258
BATTDATE : 2000-00-00
NOMBATTV : 12.0
FIRMWARE : 21.y2 .A USB FW:y2
APCMODEL : APC ES 725
END APC : Wed Sep 03 02:28:00 JST 2008

web管理画面もこの情報から表示しているため、基本内容は同じです。

【トラブル】
ここで問題発生。負荷(ロード)が0%のままで正常に表示されないことがありました。
ケーブルの接続、機器の故障を疑ったのですが、単純に一旦APC UPSをシャットダウン。APCを再起動後、サーバーを再接続して表示されるようになりました。

【感想】

サーバーの電源定格は420Wでも、実際の消費電力は22%とかなり低いので意外と余裕がありました。停電してもネットワークは使えることが多い(光ファイバやADSLは基本的に別系統)ので、ルーターや無線LAN親機もつないでおくとネットワークも使えるため良いようです。

APC ES 725 BE725JP
B0002FGFPC
エーピーシー・ジャパン 2004-07-02
売り上げランキング : 580

おすすめ平均star
star大容量・長寿命・低価格
starLinuxでも使えます
starUPSも安くなりましたね

Amazonで詳しく見る


【番外編:サーバーシャットダウンの前準備】
自分用メモ。以降は私の環境特有のものです。

うちの環境の場合、バックアップサーバーが用意してあるので本番サーバーをダウンしている間はバックアップサーバーで運用することにします。

【本番サーバー側設定】

本番サーバー、MovableType用DBのバックアップ
# /usr/bin/mysqldump -u mtuser -p mtdb > /var/mysqldump/mtdb.`date +\%Y\%m\%d`.0

バックアップサーバー側作業
# rsync -avz nomano:/var/mysqldump/ /usr/local/apache/mysqldump >> /var/log/rsync_mysql.log
# rsync -avz nomano:/var/www/html/ /var/www/html >> /var/log/rsync_archives.log

通常cronで動作させているrsyncを手動で実施。コンテンツを同期させ最新ファイルにする。

# cd /var/www/html/mt
# chmod -x mt-xmlrpc.cgi mt-comment.cgi mt-tb.cgi mt-atom.cgi

後でDBを戻すのが面倒なので、コメント、トラックバック、XMLRPC/Atomなどリビルドがかかるcgiはオフ(受け付けない)ことにするため、実行ビットを落とす。

【ルーターのアドレス変換を切り替え】

ルーターの設定で、外からの80ポートへのアクセスを本番サーバーのIPアドレスからバックアップサーバーへのIPアドレスに変更。

【切り替えを確認】

# tail -f /usr/local/apache/logs/access_log

でバックアップサーバーにアクセスが来たことを確認。