入力電源が途絶えた場合、接続されている機器に対して、電力を供給し続ける無停電電源装置を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.