ディスクサーバーが停電でクラッシュをしたりするとその損害ははかり知れないのでUPSを導入します。これまで,三菱やオムロンのUPSを使ってきましたが,FreeBSDでも普通に連携がとれるAPCが一番便利だというのが私の結論です。そのため,三菱の古いUPSを廃棄してかわりにAPCのBR 1000S-JPを導入しました。OSとUPSの通信はUSBを介して行い,ソフトウェアとしてはapcupsdを使います。USBケーブルはPC側は普通のA端子ですが,UPS側はRJ-45タイプのよくわからんコネクタで,普通にUSB-Bにしておいてくれれば汎用のケーブルが使えるのに専用品をつけてくるところが嫌な感じです。APCは便利だけど昔からそういうせこいところが嫌いでした。
BR 1000Sに接続しているサーバーはディスクサーバーだけではなく,バックアップ用のサーバーなどもつなぐことにします。そのため,電源が失われたことを互いにネットワーク越しに情報共有してshutdownさせなくてはなりません。
ディスクサーバーとUPSを専用のUSBケーブルで接続し,それ以外のサーバーはディスクサーバーを参照するようにします。
いずれのサーバーもpkg install apcupsdでバイナリをインストールすることができます。古いサーバーでは古いOS (FreeBSD 11とか12!)が動いていて,いまさらpkgではインストールできません。FreeBSD 12のサーバーにはgmakeをインストール済みだったので,portsから簡単にインストールできました。
cd /usr/ports/sysutils/apcupsd/
make
make install
オプションがいろいろ表示されますが,デフォルトのままコンパイルしました。
一方,FreeBSD 11のサーバーにはgmakeもインストールしていなかったのでgmakeのインストールからやらねばなりませんでした。
cd /usr/ports/devel/gmake/
make
ここで,portsが古いとか危険だとか言われて止まってしまうのですが,これを回避するために,
make DISABLE_VULNERABILITIES=yes
make install
とやって無理やりインストールします。gmakeがインストールできたら,
cd /usr/ports/sysutils/apcupsd/
make DISABLE_VULNERABILITIES=yes
make install
とやることでapcupsdもインストールできました。良い子はマネをしてはいけません。
USBケーブルで直接UPSと接続しているディスクサーバーでは,/usr/local/etc/apcupsd/apcupsd.confを編集して以下のように設定しました。
## apcupsd.conf v1.1 ##
UPSNAME BR1000S
UPSCABLE usb
UPSTYPE usb
DEVICE
ONBATTERYDELAY 10
BATTERYLEVEL 10
MINUTES 5
TIMEOUT 150
KILLDELAY 600
DEVICEの値をブランクにしておかねばならないようです。電源が失われてから150秒でシャットダウンに入り,600秒でUPS自体の電源を落とす,という設定です。1行目は設定ファイルのバージョンを指定する行でたんなるコメント行ではないようです。この行を省略するとapcupsd起動時に古い設定ファイルっぽいからちゃんと内容を確認しろ,というような警告が表示されます。
ディスクサーバーで動いているapcupsdがマスターとなって,それ以外のサーバーで動くapcupsdはスレーブとして動かします。
## apcupsd.conf v1.1 ##
UPSNAME BR1000S
UPSCABLE ether
UPSTYPE net
DEVICE 192.168.xxx.yyy:3551
ONBATTERYDELAY 10
BATTERYLEVEL 10
MINUTES 5
TIMEOUT 300
KILLDELAY 0
TIMEOUTはサーバーを落とす順番を考えて設定します。DEVICEの値はマスターのIPアドレスです。3551ポートを使うので,DMZとLANの間で通信ができるようにルーターのフィルタ設定を変更して3551が通るようにしておきます。スレーブではKILLDELAYは設定しないので0を書いておきます。
サーバーをshutdownしたときにサーバーの電源が落ちるように,/usr/local/etc/apcupsd/apccontrolを編集します。doshutdown)の後に書かれているshutdownコマンドのオプションが-hになっているのでこれを-pに修正しておきます。
${SHUTDOWN} -p now "apcupsd initiagted shutdown"
というふうにします。
最後に,/etc/rc.confに
apcupsd_enable="YES"
apcupsd_program="/usr/local/sbin/apcupsd"
を追記して,/usr/local/etc/rc.d/apcupsd startとしてapcupsdを起動します。起動したら,apcaccessでステータスを確認できます。USBケーブルでつながっている場合はSTATUS : ONLINEと表示され,ネットワーク越しにつながっている場合は,STATUS : ONLINE SLAVEと表示されます。MAXTIMEの値がTIMEOUTで設定した値になっていればたぶんOKです。
コンセントを引き抜いてちゃんとshutdownするかどうかを確認しなくてはならないのですが,バックアップ作成中なのでそれが終わってから確かめることにします。
この記事へのコメント