AWS EC2の自動リブート
- 2. 自己紹介
? 株式会社アイビス 代表取締役社長
? ハンドル:かみやん
? Twitter:@kamiyan
? 好きな言語:Java, C++, Objective-C
? 代表作:
– ibisBrowser(アイビスブラウザ)
– ibisMail(アイビスメール)
– ibisPaint(アイビスペイント)
- 7. 要件
? 1分に1回cronで起動し、全APと通信
ができるか確認し、5回連続で通信で
きない場合は、EC2インスタンスを
リブートする
? リブート依頼を投げたら管理者に
メールで知らせる
? リブート完了し通信が復帰したらリ
ブートにかかった時間を管理者に報
告
- 8. 仕様
? AP追加やAP削除の度に監視プログラムを
修正するのは面倒!
? EC2インスタンスのタグ付け機能を使って、
「rebootWatch」タグがついているインス
タンスを自動的に監視対象にする
? rebootWatchタグの値を「8080/ping.jsp」
などのような値とし、「http://{対象の
IP}:{タグの値}」にアクセスできるか
チェックする
- 10. 仕様詳細
? 言語:Perl (Rubyにしとけばよかった)
? 設置場所:小さめのEC2ホストか、社内の
マシン(どっちでもよい)
? リブート依頼の連投にならないように1度
リブート依頼を投げたら15分は再依頼し
ないようにする
? 監視のHTTPリクエストのタイムアウトは
30秒
? 複数台APへのHTTPリクエストはマルチス
レッドとして同時にリクエストして1分以
内に死活の判断ができるようにする
- 11. ファイル設計 – 状態ファイル
? 状態ファイルは、/root/rebootWatch/ に「{インス
タンス名(tag:Name)}.txt」のファイル名で置か
れるテキストファイル
? 1レコードは、「Time Type Message」の3フィール
ドで、フィールドはスペース区切り、レコードは
改行区切り。Messageはオプション。
? Typeは、OK, Timeout, Error, Rebootの3種
? OK or Timeout or Errorレコードが最大10件、
Rebootレコードが最大1件保存される。HTTPリク
エストするたびに上書き保存する
? Timeout or Errorが5回連続するとリブート依頼を
投げる
? Rebootレコードは、リブート依頼を投げると追加
され、リブートが完了して復旧するとレコードが
- 12. ファイル設計 – ログファイル
? 一応、後で調べられるように状態ファイ
ルと同じフォーマットでログファイルを
保存しておく
? ログファイルは、「{インスタンス名}-
YYYYMMDD.txt」というファイル名で1日1
ファイル
- 14. 試行錯誤
? 当初の設計では、「今はメンテナンス中な
ので、サービスを停止(ApacheやTomcatを
stop)する」などのときに、うっかりホスト
がリブートすると面倒なので、サービスが
立って(LISTENして)いないときは、リブー
ト依頼を投げない仕様だった
? しかし、実装してみたらAPが過負荷のとき
にLISTENしているのにLISTENしていないと応
答が来る場合があり、仕様を変更して、
LISTENしてない場合も、リブート依頼を投げ
ることにした