小技プログラミング

CentOSをSmartUPSからネットワーク経由でシャットダウン

SmartUPSとLAN経由で連携させて停電時にサーバーを安全にシャットダウンさせる手順です。
※SmartUPSにLANポートが無い場合は別売りのネットワークインターフェイスを追加する必要があります。

SmartUPSと連携させる為にはApcupsdを利用します。
以下、基本的な設定手順になります。

【環境】
CentOS 5.5
Smart-UPS 1400 RM

1.RPMForgeレポジトリを追加

ApcupsdはRPMForgeレポジトリに入っています。 まず、rpmコマンドを使ってRPMForgeレポジトリをインストールします。

# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

# rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

知らないうちに利用しないように無効設定をしておきます。

# vi /etc/yum.repos.d/rpmforge.repo

enabled = 1 ⇒ 0 に変更します。

2.apcupsdのインストール

RPMForgeレポジトリを利用してapcupsdをインストールします。

# yum -y --enablerepo=rpmforge install apcupsd

apcupsdのネットワーク設定をします。

# vi /etc/apcupsd/apcupsd.conf

-- 以下の項目を設定します --------------------------
UPSCABLE ether
UPSTYPE pcnet
DEVICE 192.168.1.XXX:apc:admin user phrase
NETSERVER on
NISPORT 3551
----------------------------------------------


DEVICEは ipaddr:user:passphrase 形式で環境に合わせて設定します
パスフレーズのデフォルトはadmin user phraseです。

NISPORTはUPSとの通信に利用するポートです。
デフォルトは3551になっています。iptablesで許可しておく必要があります。

3.サービス起動設定

apcupsdサービス起動

# service apcupsd start

apcupsdサービス自動起動設定

# chkconfig apcupsd on

正常に動作させる為に、シャットダウン時に network と iptables サービスを停止させないようにします。

# chkconfig --level 0 network on
# chkconfig --level 0 iptables on

4.apcupsdサービス起動状況を確認

上記までで一通り設定は完了したので、次は動作確認を行って行きます。

まずapcupsdのプロセスが正常起動している事を確認します。

# ps fax | grep apcupsd
22141 ? Ssl 0:00 /sbin/apcupsd -f /etc/apcupsd/apcupsd.conf

apcupsdのログが出力されている事を確認します

# tail /var/log/apcupsd.events
Jan 29 14:10:58 localhost apcupsd[22141]: apcupsd 3.14.10 (13 September 2011) redhat startup succeeded

5.UPS接続状況を確認

STATUSがONLINEである事を確認します。

# apcaccess status
APC : 001,050,1225
DATE : 2014-02-04 12:49:06 +0900
HOSTNAME : localhost
VERSION : 3.14.10 (13 September 2011) redhat
UPSNAME : localhost
CABLE : Ethernet Link
DRIVER : PCNET UPS Driver
UPSMODE : Stand Alone
STARTTIME: 2014-02-04 12:48:06 +0900
MODEL : Smart-UPS 1400 RM DLJ1
STATUS : ONLINE
(以下省略)
:

5.電源障害発生時のテスト

上記まで設定が完了したら、停電が起こった際に実際にシャットダウンが行われるかテストを行ってみます。

①ログの障害情報を確認します

# tail -f /var/log/apcupsd.events

UPSの電源をコンセントより外し、apcupsd.eventsに障害情報が記録されることを確認します。

Power failure on UPS XXXX. Running on batteries.
2014-01-29 14:58:20 +0900 Running on UPS batteries.

UPSの電源をコンセントに挿し、apcupsd.eventsに復旧情報が記録されることを確認します。

Power has returned on UPS XXXX...
2014-01-29 14:58:27 +0900 Mains returned. No longer on UPS batteries.
2014-01-29 14:58:27 +0900 Power is back. UPS running on mains.

②電源障害発生時のサーバーシャットダウンテスト

まず、UPSのバッテリー動作経過時間が30秒経過した時にシャットダウンされるように仮設定をします。
シャットダウン開始時刻の設定をTIMEOUTに秒単位で指定します。

# vi /etc/apcupsd/apcupsd.conf

-- 以下を設定します -----------------------------------
TIMEOUT 30
-------------------------------------------------------

UPSの電源をコンセントより外し、サーバーがシャットダウンされる事を確認します。
今回は30秒後

# tail -f /var/log/apcupsd.events
2014-01-29 17:44:54 +0900 Power failure.
2014-01-29 17:45:00 +0900 Running on UPS batteries.
2014-01-29 17:45:31 +0900 Reached run time limit on batteries.
2014-01-29 17:45:31 +0900 Initiating system shutdown!

動作確認が完了したらTIMEOUTの設定を適切な値に戻して完了です。

参考サイト:http://www.apcupsd.org/

更新日時:2014/2/10