Apcupsd については前から知っていたが、実際に導入することはなかった。大抵の停電ならUPS (無停電電源装置)が耐えてくれるし、少し長い時間であれば落とせばよかったからだ。
しかし、東日本大震災の影響により、計画停電(輪番停電)が行われることになったが、これがたまらない。震災前からクラウド化を進めたり、商品電力を削減したりとある程度準備はしていたが、それをはるかに超える事態になっている。
外部のサーバーを利用して運用しているものについては、サービス提供者がUPS や発電機等の準備や運用を行ってくれているようで無停止で動作している。自分で運用するものについては、保護すべき機器と保護する時間から計算してUPS を選定し運用していたが、そもそもUPS は安全にシャットダウンするまでの時間稼ぎだから、数時間にも及ぶ停電となれば発電機が正しい選択だ。
ところが、発電機もとたんに品切れや価格高騰に見舞われた。仮に発電機が入手できたとしても燃料が入手困難だ。一過性のものだろうけれど、サーバーを運用する観点から見れば致命的だ。
ここではUPS を次のように連携するよう作業していく。
- スタンドアロン(単体動作)
- マスター(物理的にUPS に接続されたマシン)
- スレーブ(マスターと通信を行い、UPS の状態を取得する)
※ネットワークポートや複数の通信ポートを持っているUPS でなければ、通常、UPS と接続できる物理マシンは1つだけだから、物理接続しているマシンをサーバーにしてネットワーク通信させることで、直接接続できないマシンにも停電状態を知らせることができる。
※Apcupsd はAPC 社製UPS 「SmartUPS」を制御するためのプログラムで、オープンソース(OSS)で開発されている。ライセンスはGPL。
スポンサードリンク
環境
ここでは以下の環境にUPS 連携を設定する。
- SmartUPS 1500 (USB と RS-232C ポートが標準で付いているが、ここではRS-232C ポートを使う)
- SmartUPS 接続ケーブル(USB タイプが人気らしいが手元にあるのはRS-232C なのでこちらを使った)
- マスター:Linux サーバー (Ubuntu x64; SmartUPS に接続する; VMware Server2)
- スレーブ:Linux CentOS/Ubuntu等 VMware Server2 上の仮想マシン
- スレーブ:Windows 98/2000/Me/XP/7 等 VMware Server2 上の仮想マシン
- スレーブ:Windows 単体
※Apcupsd はオープンソースでもあるから、カスタマイズすることで例えばVMware Server2 のコマンドを利用してVMware Server2 上の仮想マシンを安全にシャットダウンすることもできるらしいが、ここでは行わない。
接続
SmartUPS には USB ポートと RS-232C ポート(と拡張スロット)がある。
手元にあった SmartUPS 接続用ケーブル 940-0024C を使ってサーバーのシリアルポートに接続した。
※サーバーとSmartUPS の電源を切ってからケーブルを接続する
※うろ覚えだが、通常のRS-232C とは結線が違った気がする
インストール
※Windows 版は別記事で解説
$ sudo aptitude install apcupsd
起動
$ sudo /etc/init.d/apcupsd start
再起動
$ sudo /etc/init.d/apcupsd restart
停止
$ sudo /etc/init.d/apcupsd stop
エラー例
$ sudo /etc/init.d/apcupsd restart Stopping UPS power management: No process in pidfile '/var/run/apcupsd.pid' found running; none killed. apcupsd. Starting UPS power management: apcupsd.
上記エラーがでた場合以下を実行する
$ sudo killall -9 apcupsd
確認する
$ sudo /etc/init.d/apcupsd restart Stopping UPS power management: apcupsd. Starting UPS power management: apcupsd.
基本設定
apcupsd.conf
$ sudo vi /etc/apcupsd/apcupsd.conf
タイムアウト
TIMEOUT 0 → TIMEOUT 10
タイムアウトは電源供給が断たれてから何「秒」後にシャットダウンを「開始」するか定義する。シャットダウンには時間がかかるから、余裕を持って開始したい。(例:5 分なら300 秒)ちなみに、デフォルトの0は無効という意味らしい。
apcupsd
$ sudo vi /etc/default/apcupsd
ISCONFIGURED=no → ISCONFIGURED=yes
設定確認
現在設定されている値が表示される。以下はその表示例と説明。
※説明は正しくない可能性がある
$ apcaccess status APC : 001,050,1205 # ? DATE : 2011-03-19 07:59:16 +0900 # 開始日付 HOSTNAME : vm130 # ホスト名 # apcupsd バージョン VERSION : 3.14.8 (16 January 2010) debian # UPS 識別名 # デフォルト UPS_IDEN # conf: UPSNAME xxx 8文字以内or空 UPSNAME : UPS_IDEN # 接続ケーブル #(表示例:APC Cable 940-0024C) CABLE : Custom Cable Smart # UPS 製品名 MODEL : Smart-UPS 1500 # 動作モード # Standalone / UPSMODE : Stand Alone # UPS起動時間 STARTTIME: 2011-03-19 06:32:55 +0900 # 状態 STATUS : BOOST ONLINE # 入力電圧 LINEV : 091.4 Volts # 負荷率 LOADPCT : 31.2 Percent Load Capacity # 充電率 BCHARGE : 100.0 Percent # 稼働可能時間 TIMELEFT : 41.0 Minutes # シャットダウン開始(バッテリ残量%) MBATTCHG : 5 Percent # シャットダウン開始(稼働可能分) MINTIMEL : 3 Minutes # シャットダウン開始(秒) MAXTIME : 10 Seconds # 最大入力電圧 MAXLINEV : 095.0 Volts # 最小入力電圧 MINLINEV : 090.0 Volts # 出力電圧 OUTPUTV : 101.5 Volts # 感度 SENSE : Medium # 復電後UPS 起動遅延 DWAKE : 000 Seconds # UPS シャットダウン時間 DSHUTD : 180 Seconds # UPS LOW バッテリ警告遅延 DLOWBATT : 02 Minutes # 低電圧調整入力電圧 LOTRANS : 092.0 Volts # 高電圧調整入力電圧 HITRANS : 108.0 Volts # UPS 復帰時充電率 RETPCT : 090.0 Percent # 温度 ITEMP : 24.3 C Internal # 警告音遅延時間 ALARMDEL : 5 seconds # バッテリ電圧 BATTV : 27.7 Volts # 入力周波数 LINEFREQ : 50.0 Hz # 最終セルフテスト LASTXFER : Automatic or explicit self test # NUMXFERS : 0 # バッテリ時間(秒) TONBATT : 0 seconds # CUMONBATT: 0 seconds # XOFFBATT : N/A # セルフテスト SELFTEST : NO # STESTI : 168 # ステータスフラグ STATFLAG : 0x0700000C Status Flag # レジスタ1(?) REG1 : 0x00 Register 1 # レジスタ2(?) REG2 : 0x00 Register 2 # レジスタ3(?) REG3 : 0x00 Register 3 # メンテナンス日付? MANDATE : 08/26/05 # シリアルナンバー SERIALNO : AS********** # バッテリ交換日 BATTDATE : 08/26/05 # 定格出力? NOMOUTV : 100 Volts # バッテリ警告値? NOMBATTV : 24.0 Volts # 増設バッテリ EXTBATTS : 0 # ファームウェア FIRMWARE : 601.12.A # APC モデル APCMODEL : FWA # 終了日付 END APC : 2011-03-19 08:00:02 +0900
※APC ネットワークカードの設定はこちらを参照
復電後の自動復帰
UPS そのもののシャットダウン処理も行ってくれる。これは最初理由が不明だったが、よく考えつつ調べると、復電後の自動復帰を期待してのことのようだ。
UPS は無停電電源装置だから、可能なかぎり給電し続ける。大抵の場合は、バッテリ残量があるうちに復電するから問題ないが、計画停電ではその時間が長いためにバッテリが持たない。
Apcupsd はUPS のシャットダウンを行ってくれる。これは給電し続けるためのUPS と逆の動作で、電源を完全に切る。復電したとき、あるいはUPS に給電が再開され、復帰定義に従って復帰したとき、各端末に電気が流れる。すると、端末のBIOS が復電後の処理を決める。
一般的に、 BIOS にある復電後の挙動は次のようなものとなる(対応BIOS の場合)。「Off」は、復電しても何もしない。「On」は、常にマシンを立ち上げる。「LastStat」は、電源が 落ちたときの状態にする。これは電源がOff だったならOff 、電源が入っていたならOn してくれる。ここで注意したいのは、Apcupsd はシャットダウン処理を行ってくれるから On の状態で電源が断たれることはない(バッテリがシャットダウンする間もなく限界になったなら別だが)。復電後に自動復帰したいならOn を選択する。
ただし、端末が一斉にOn になると負荷が一気にかかり、UPS がダウンする可能性があることも考慮しておく必要がある。(その場合、サーバーが立ち上がったら各マシンにWOL 信号を送るのも良いかもしれない)
また、注意が必要なのは、テストでも実際の停電でもApcupsd が作動したとき、Apcupsd はUPS に設定内容を伝える(たぶん。それと、設定がないときはデフォルト値を使う。たぶん)。シャットダウンが上手く行ったからといってすぐにサーバーを立ち上げてはいけない。
UPS が正常に通電しているように見えても、内部ではカウンタが動作していて、シャットダウンから指定秒数経過するとUPS をシャットダウンしてしまう。(設定次第)
※ここまででUPS の電源プラグをコンセントから引き抜き、期待した動作をするか確認する。動作したら次に進む
参考文献
- Apcupsd, a daemon for controlling APC UPSes
- Ubuntu日本語フォーラム / APC社製UPS導入
- ITmedia エンタープライズ:How-To:特別企画:UPSを利用した電源対策
- APCUPSD is not starting after migration [Archive] – Ubuntu Forums
- apcupsd (ver 3.14.8) の導入 – LWTの備忘録
- ITmedia エンタープライズ:How-To:特別企画:UPSを利用した電源対策
- Holy (K)night apcupsd でデーモンを起動できない
- 守破離でいこう!!: [Server]Apcupsd で UPS(APC Smart-UPS) を制御する
- Lipwood – Apcupsd 3.14.1~3.14.3のapcupsd.confの日本語訳
- ITmedia エンタープライズ:How-To:特別企画:UPSを利用した電源対策
- ITmedia エンタープライズ:How-To:特別企画:UPSを利用した電源対策
- 守破離でいこう!!: [Server]Apcupsd で UPS(APC Smart-UPS) を制御する
- 計画停電に伴うVMware製品の停止・起動、および省電力運用方法について
コメント