15
AWS EC2 ののののののの 株株株株株株株株 株株株株株株株 株株株株 2012/1/6 rebootWatch 株株

AWS EC2の自動リブート

Embed Size (px)

Citation preview

Page 1: AWS EC2の自動リブート

AWS EC2の自動リブート

株式会社アイビス代表取締役社長 神谷栄治

2012/1/6

rebootWatch 開発

Page 2: AWS EC2の自動リブート

自己紹介• 株式会社アイビス 代表取締役社長• ハンドル:かみやん• Twitter : @kamiyan• 好きな言語: Java, C++, Objective-C• 代表作: – ibisBrowser (アイビスブラウザ)– ibisMail (アイビスメール)– ibisPaint (アイビスペイント)

Page 3: AWS EC2の自動リブート

AWS 最高~~~! (^_^)/

Page 4: AWS EC2の自動リブート

rebootWatch 開発経緯

• 物理サーバでは発生していなかったが、 AWS へ移行後、過負荷時に AP(Application Server) が、フリーズ!!• SSH もつながらない!!• AWS 管理画面から EC2 インスタ

ンスを reboot するしかない!

Page 5: AWS EC2の自動リブート

寝られない!!! (^_^)/

Page 6: AWS EC2の自動リブート

監視プログラムrebootWatch を緊急開発せよ!

Page 7: AWS EC2の自動リブート

要件• 1 分に 1 回 cron で起動し、全 AP と

通信ができるか確認し、 5 回連続で通信できない場合は、 EC2 インスタンスをリブートする

• リブート依頼を投げたら管理者にメールで知らせる

• リブート完了し通信が復帰したらリブートにかかった時間を管理者に報告

Page 8: AWS EC2の自動リブート

仕様• AP 追加や AP 削除の度に監視プログラム

を修正するのは面倒!• EC2 インスタンスのタグ付け機能を使っ

て、「 rebootWatch 」タグがついているインスタンスを自動的に監視対象にする

• rebootWatch タグの値を「 8080/ping.jsp 」などのような値とし、「 http://{ 対象の IP}:{ タグの値 } 」にアクセスできるかチェックする

Page 9: AWS EC2の自動リブート

監視対象とするかどうかの ON/OFF が超簡単!(^_^)/

Page 10: AWS EC2の自動リブート

仕様詳細• 言語: Perl ( Ruby にしとけばよかった)• 設置場所:小さめの EC2 ホストか、社内のマ

シン(どっちでもよい)• リブート依頼の連投にならないように 1 度リ

ブート依頼を投げたら 15 分は再依頼しないようにする

• 監視の HTTP リクエストのタイムアウトは 30秒

• 複数台 AP への HTTP リクエストはマルチスレッドとして同時にリクエストして 1 分以内に死活の判断ができるようにする

Page 11: AWS EC2の自動リブート

ファイル設計 – 状態ファイル• 状態ファイルは、 /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 レコードは、リブート依頼を投げると追加され、

リブートが完了して復旧するとレコードが削除される

Page 12: AWS EC2の自動リブート

ファイル設計 – ログファイル• 一応、後で調べられるように状態ファイ

ルと同じフォーマットでログファイルを保存しておく

• ログファイルは、「 { インスタンス名 }-YYYYMMDD.txt 」というファイル名で 1 日1 ファイル

Page 13: AWS EC2の自動リブート

実装楽勝~ (^_^)/

Page 14: AWS EC2の自動リブート

試行錯誤• 当初の設計では、「今はメンテナンス中なので、

サービスを停止( Apache や Tomcat を stop )する」などのときに、うっかりホストがリブートすると面倒なので、サービスが立って( LISTEN して)いないときは、リブート依頼を投げない仕様だった

• しかし、実装してみたら AP が過負荷のときにLISTEN しているのに LISTEN していないと応答が来る場合があり、仕様を変更して、 LISTEN してない場合も、リブート依頼を投げることにした

Page 15: AWS EC2の自動リブート

備えあれば憂いなし!これで寝られる~ (^_^)/

• ダウンロード: http://bit.ly/104LVnC