第27回 遠隔サーバー再起動装置・リセット君
〜 眠れないサーバー管理者に贈る魔法のアイテム 〜





眠れないサーバー管理者
草木も眠る丑三つ時。
静寂を打ち破って鳴り響く警報音。
サーバーは寝ているときに限ってダウンします。

そう、世界中のサーバー管理者は日々眠れない夜を送っているのです。

そんな不幸な星の元に生まれたサーバー管理者に睡眠という安らぎを与えるべく、 遠隔操作でサーバーの電源がON/OFFできる装置を作ってみました。

遠隔で電源をON/OFFするには?
遠隔操作でサーバーの電源をON/OFFさせるには、
(1) IDCの一時保守サービスを利用する
(2) IP電源装置を使う
などの方法がありますが、(1)は対応まで時間がかかったり、あらかじめ手順の申請をしておかなければならなかったりと なかなか不便なものです。サーバーが落ちても通常はこちらから対応を依頼しなければやってくれません。
(2)の場合、たとえば明京電機の製品を使えば、 PCや携帯から電源のON/OFFができるほか、死活監視で自動リセットなんてこともできます。 しかしサーバーの台数が多くなると場所も取り、ポートあたりのコストもばかになりません。 さらにACを制御する方法では、BIOSでAC給電でONするような設定ができるサーバーに限られてしまいます。

今回はこのような不便を全て解消するために、次のような方針でいくことにしました。
・BIOSに依存せず、全てのサーバーで利用可能なこと
・PCおよび携帯から遠隔操作ができること
・PING監視により自動的に再起動できること

システム構成

サーバーの電源ボタンはマザーボードに接続されています。 だから、電源ボタンの配線をハッキングしてしまえばいいのです。 今回は電源ボタンの操作したのと同じ事を外部信号にて行わせます。
構成としては、http経由でI/Oの制御ができる装置「リセット君」から、 各サーバーの電源ボタンの端子に直接繋がっています。

「リセット君」は単純にI/Oを制御することしかできないので、PCや携帯からhttpでやりとりするための 監視サーバー(Apache+PHP)があります。 監視サーバーにはPINGを送信して一定期間応答がないと、自動的に電源のOFF→ONを行うような機能もあります。
つまり、放っておきゃ勝手に立ち上がってんです。(笑)

NAPI BASIC プログラマブルコントローラ
複数のI/Oを制御するにはいろいろ方法があります。 簡単なのはRS-232Cで制御するキットを使うことです。 秋月電子で14ポート(カスケード接続可)の制御ができる デジタルI/Oモジュール ANDDIO というものがあったので試してみたのですが、激しく動作が不安定なのです。 (最近修正版が出たらしい。今更おせーよorz) PICNICを使うという手もありますが、 ポート数が少ない上、データの取りこぼしもよくあります。


そこで今回目を付けたのはNAPI BASIC プログラマブルコントローラです。 この製品の面白いのは、NAPI BASICのインタプリタを内蔵しており、ブラウザ上でプログラミングができるのです。

NAPI BASICはTTL出力のI/Oが24ポートあり、このI/Oを制御することでそのI/Oに繋がったサーバーの電源を制御します。

回路図
マザーボードにNAPI BASICの信号を直接与えてあげても動くとは思いますが、 下手に信号を加えてサーバーを壊してしまっては意味がありません。 (そのくらいで壊れるほどヤワじゃないですが) そこで今回はフォトカプラでNAPI BASIC側とは完全にアイソレートしてやります。 TLP521はON抵抗がかなりありますが、フォトリレーを使うよりコストが格段に安く、問題なく動くのでこれにしました。


またNAPI BASICの出力が不安定な時に誤動作をしないよう、24ポート中、1ポートを出力制御に使いました。 具体的には3ステートバッファ 74HC244のイネーブル信号として使い、出力がALL LでもALL Hでも、H出力をしないようになっています。

いざ製作

74HC244の両脇にあるのはプルダウン抵抗です。 出力がOFFのときはハイインピーダンスになるので、ONのときだけH出力をするようにしています。 もっとも接続先がフォトカプラですから無意味ですが。(笑) なおイネーブル信号だけはプルアップしてあります。

裏はこんな感じ。
たったこれだけの配線でも結構しんどいです。

NAPI BASICをケースに埋め込みます。画面左にある端子はオーディオ用の3.5mmφのモノラルジャックです。

ケースの反対側にも8個のモノラルジャックを取り付けます。 そしてDSUB 9PINののケーブルで、更に小さなケースにもモノラルジャックを分岐させています。 なぜこんなことをしているのかというと、別のラックにもこれ1台で配線をのばせるようにするためです。

これがサーバー内部に組み込むフォトカプラの回路。 この回路に5Vが加わると端子間がショートし、電源がON/OFFできるというわけです。 上に付いているピンヘッダは、どちらでも操作できるように、既存のボタンを接続するためにあります。

こんな回路が23個。 気の遠くなるような作業です。 こうやって並べてみるとスターウォーズの世界のようにも見えます。(笑)

この黒いやつはモノラルジャック。オーディオ用のケーブルで配線します。 フォトカプラ回路と別々になっているのは、ラックマウントサーバーは高密度化されているためにこうゆう端子を通せるようなスペースがなく、 通気口に配線を通してフォトカプラ回路の端子台に配線を接続しているのです。

ソフトウェア
制御するためのプログラムには全部で3種類あります。
(1) I/Oを制御するためのNAPI BASICのプログラム(BASIC)
(2) PCや携帯からNAPI BASICにコマンドを送るためのプログラム(PHP)
(3) PING監視をしてNAPI BASICにコマンドを送るためのプログラム(PHP)

NAPI BASICはあまり凝ったことができません。その代わりWeb変数という変わった機能があり、 外部からその変数の値を参照したり変更したりすることができます。 今回は制御するポート番号と、制御モード(長押し、長押し→軽押し、軽押し)を選択する2つのパラメーターを 受信するような、サーバープログラムを作りました。

(2)(3)はNAPI BASICにパラメーターを設定すること以外は、普通のプログラムです。 パラメーターを設定するといっても、httpでNAPI BASICにPOSTでデータを送信しているだけです。 コマンドラインからも操作できるようになっています。

$ ./napi.php hostname command

完成〜!
こんな感じで完成で〜す。
これでゆっくり寝られますかね?w

2007.6.22 by Kaz

この記事のトラックバックURL
http://app.blog.livedoor.jp/akibade/tb.cgi/50682118
トラックバック一覧




戻る