先日引っ越して自宅サーバを移動したところ、まれにサーバの電源を取っている子ブレーカが落ちることが判明。HDD が壊れたらたまらないので、今まで自宅では使っていなかった UPS を導入することにした。
前の会社では APC の UPS ばかり使っていたので、惰性で APC にしようかなと思ったのだが、APC の個人ユースの製品はあまり評判がよろしくない感じ。使ったことはないけど評判よさげな OMRON にしてみた。
オムロン 無停電電源装置(常時商用給電/正弦波出力) 350VA/210W BY35S
- 出版社/メーカー: オムロン
- 発売日: 2009/11/27
- メディア: Personal Computers
- 購入: 1人 クリック: 17回
- この商品を含むブログ (2件) を見る
わりと省電力の PC サーバ 1台しか接続しないので、350VA モデルを¥13,992 で購入。この値段で正弦波出力だし、電池寿命が 4〜5年と長めなのも嬉しいところ。
さっそく Linux (CentOS-5.5 x86_64) で自動シャットダウンの設定。
複数台をネットワーク越しにシャットダウンできる PowerAct Pro というものもあるが、1台 (KVM 上に仮想マシンはある) だし、Apache が必要らしいけど KVM host に入れるのも大袈裟だし、ということで Simple Shutdown Software(オープンソース版) を使う。
インストールは zip を展開して shell script を叩くだけ。
$ unzip SimpleSoftwareVer210_Linux.zip $ cd SimpleSoftware_Ver210_Linux/Release/ # sh ./install.sh (ライセンス確認入力) Simple Shutdown program has been installed completely. Please run below command and setup the parameters of Simple Shutdown to meet your system. Command: /usr/lib/ssd/master/config.sh"
設定用に /usr/lib/ssd/master/config.sh を実行して、いくつか質問に答える。
1. Port Selection Mode: Auto Mode 2. AC fail Delay time (Sec): 120 3. External Command Line: /root/shutdown.sh 4. External Command needs time (Sec): 60 5. OS Shutdown needs time (Sec): 60 6. Send Message to login users: Enable
- 接続されている UPS を自動検出するか。これは自動で
- 商用電源断から何秒でシャットダウンプロセスを開始するか
- シャットダウン時に実行する外部コマンドを指定。後述する shell script を指定
- 実行した外部コマンドが完了するまでに必要な秒数
- OS がシャットダウンするのに必要な秒数
- 端末にメッセージを表示するかどうか
このように設定すると、
- 電源断から 120 秒後にプロセス開始。外部コマンド実行
- 60 秒待って (外部コマンドが終了したはず)
- OS 自身のシャットダウンを実行
- さらに 60 秒後に UPS の電源が落ちる
という動作になる。
設定は /usr/lib/ssd/master/Shutdown.cfg に書き込まれる。
[ShutdownParam] AutoMode = 1 PortType = USB PortNum = 1 ACFailDelayTime = 120 ExternalCommand = /root/shutdown.sh ExCmdNeedTime = 60 ShutdownNeedTime = 60 SendMessage = 1 [End]
さて、このサーバは KVM のホストなので、動いている仮想マシンを先に shutdown するために shell script を用意した。
#!/bin/sh LANG=C export LANG VM=`/usr/bin/virsh list --all | grep 'running$' | awk '{print $2}'` for v in $VM do echo "shutdown virtual machine $v" | logger -t "shutdown.sh" virsh shutdown $v done
仮想マシンの一覧を取得して、それぞれについて shutdown 指令を送る、というまあベタな内容。
電源を引っこ抜いたときの syslog の内容はこんなかんじ。
2011-02-16T01:37:09.871667+09:00 kvmhost SimpleShutdown[2531]: AC line failure! 2011-02-16T01:39:09.171669+09:00 kvmhost SimpleShutdown[2531]: Run External Command. 2011-02-16T01:39:09.193183+09:00 kvmhost shutdown.sh: shutdown virtual machine testvm 2011-02-16T01:40:10.407570+09:00 kvmhost SimpleShutdown[2531]: Shutdown Agent Stop. 2011-02-16T01:40:10.411646+09:00 kvmhost SimpleShutdown[2531]: Shutdown. 2011-02-16T01:40:10.435218+09:00 kvmhost shutdown[3043]: shutting down for system halt
ということで普通に動いたのだけど、1点疑問が。
どうも、「シャットダウンプロセスが開始した後に商用電源が回復した場合、UPS の電源断がキャンセルされない?」ような。
サーバがシャットダウン完了後、まだ UPS が上がっている状態で商用電源が復活しても、UPS の電源断がキャンセルされず、そのまま落ちてしまう。なので UPS が生きているうちに落ちたブレーカーを上げて、すぐサーバを起動すると、起動中に UPS が落ちて悲惨な目に遭う気がする。というか実験中に遭った。……何か変な気がするのでマニュアル読み直そう。