UPSによる電源断対策

LINEで送る
Pocket

入力電源が途絶えた場合、接続されている機器に対して、電力を供給し続ける無停電電源装置をUPS (Uninterruptible Power Supply) といいます。発展途上国では電力の供給が安定していないため急な停電に備えてパソコンと一緒に利用されています。また、日本でも東日本大震災を機会に社内の重要なサーバの為に購入した人もいるかと思います。

今回は、APC ES 750G を使い、どのように導入して運用すればよいか紹介します。APC ES 750G の状態は、USB 経由で知る事が出来ます。CentOS サーバに USB を挿すと以下のように自動で認識されます。

[/var/log/messages]

Jan  9 13:50:49 localhost kernel: usb 1-1.1: new low-speed USB device number 5 using ehci-pci
Jan  9 13:50:49 localhost kernel: usb 1-1.1: New USB device found, idVendor=051d, idProduct=0002
Jan  9 13:50:49 localhost kernel: usb 1-1.1: New USB device strings: Mfr=3, Product=1, SerialNumber=2
Jan  9 13:50:49 localhost kernel: usb 1-1.1: Product: APC ES 750G FW:859.K1 .A USB FW:K1 
Jan  9 13:50:49 localhost kernel: usb 1-1.1: Manufacturer: American Power Conversion
Jan  9 13:50:49 localhost kernel: usb 1-1.1: SerialNumber: 3B1107X11107
Jan  9 13:50:50 localhost kernel: hid-generic 0003:051D:0002.0004: hiddev0,hidraw3: USB HID v1.10 Device [American Power Conversion APC ES 750G FW:859.K1 .A USB FW:K1 ] on usb-0000:00:1a.0-1.1/input0

UPS の制御には、apcupsd パッケージを利用します。CentOS 6 までは、RPMforge プロジェクトが提供しているパッケージを利用すればよかったのですが、CentOS 7 では、systemctl 対応がなされていないようで、パッケージが提供されていません。そこで、Fedora 23 で使われてる、apcupsd ソースパッケージを CentOS 7 上でコンパイルして使用する方法を紹介します。
apcupsd をコンパイル、インストールする為に必要なパッケージを事前にインストールします。

# yum install desktop-file-utils gcc-c++ gd-devel glibc-devel gnome-vfs2-devel gtk2-devel mailx net-snmp-devel rpmbuild tcp_wrappers-devel

Fedora 23 の apcupsd ソースパッケージをインストールします。

# rpm -ivh http://ftp.riken.jp/Linux/fedora/releases/23/Everything/source/SRPMS/a/apcupsd-3.14.13-3.fc23.src.rpm

rpmbuild コマンドで rpm パッケージを作成します。

# rpmbuild -bb /root/rpmbuild/SPECS/apcupsd.spec

apcupsd パッケージをインストールします。

# rpm -ivh /root/rpmbuild/RPMS/x86_64/apcupsd-3.14.13-3.el7.centos.x86_64.rpm

入力電源断時、デフォルトではサーバはシャットダウンされないので、5分後(TIMEOUT 300)に自動でシャットダウンされる設定を行ってみます。
[/etc/apcupsd/apcupsd.conf]

TIMEOUT 300


機種により、UPS との接続インターフェイスが違うので、適宜変更します。
(設定ファイルのタイプの初期値は USB になっています。)
USB の場合
UPSTYPE usb
DEVICE (設定しない)

apcsmart の場合
UPSTYPE apcsmart
DEVICE /dev/ttyS0

apcupsd を起動します。

# systemctl start apcupsd

再起動時も、apcupsd が自動で起動されるようにします。

# systemctl enable apcupsd

UPS のステータスを確認します。

# apcaccess status
           :
MODEL    : APC ES 750G
STATUS   : ONLINE
MAXTIME  : 300 Seconds           <- 300 秒に設定されます。

apcupsd ビルド時に、Web経由でUPSのステータスを確認できる、apcupsd-cgi パッケージも作成されるので、そちらも利用してみます。
httpd パッケージをインストールします。

# yum install httpd

apcupsd-cgi パッケージをインストールします。

# rpm -ivh /root/rpmbuild/RPMS/x86_64/apcupsd-cgi-3.14.13-3.el7.centos.x86_64.rpm

デフォルトでは、local からしかアクセスを許可していないので、ネットワーク環境に合わせてアクスを許可します。

[/etc/httpd/conf.d/apcupsd.conf]
    Require local
          ↓
    Require ip 192.168.

httpd を restart します。

# systemctl restart httpd

再起動時も、httpd が自動で起動されるようにします。

# systemctl enable httpd

firewall に http のアクセスを許可します。

# firewall-cmd --permanent --zone=public --add-service=http

firewall の設定を再読み込みします。

# firewall-cmd --reload

以下のURLにアクセスします。
http://サーバのアドレス/apcupsd/

Web経由で UPS のステータスを確認する事ができます。
 

 
設定が完了したので、試しに UPS の電源ケーブルを抜いてみて、サーバが自動でシャットダウンされるか試してみましょう。
[/var/log/messages]

Jan  9 14:55:32 localhost apcupsd[15761]: Power failure.                <- ケーブルが抜けたのを認識します。
Jan  9 14:55:37 localhost apcupsd[15761]: Running on UPS batteries.
Jan  9 14:55:37 localhost wall[16363]: wall: user root broadcasted 1 lines (67 chars)
Battery time limit exceeded on UPS localhost.localdomain. Doing shutdown.   <- TIMEOUT 値経過後、シャットダウンされます。

Jan  9 15:38:35 localhost apcupsd[2611]: Mains returned. No longer on UPS batteries.  <- 電源ケーブルを挿すと、復旧された事を認識します。
Jan  9 15:38:35 localhost apcupsd[2611]: Power is back. UPS running on mains.
LINEで送る
Pocket

  • このエントリーをはてなブックマークに追加

コメントを残す

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください