スムーズに障害から復旧するために、
- 障害別の要因予想
- 障害別の対策
- 障害切り分け時に考慮する点
をまとめます。
障害別の要因予想
Pingで応答がない
サーバ自体が動いていない
- HDD不調→自動で再起動→壊れているから起動不可 or fsckするかの入力待ち
- 電源がお亡くなりになった
- その他ハードウェアの不具合
- 負荷に耐えられずフリーズしている(例:メモリ不足)
ネットワークが死んでいる
- ネットワークの上流でハードウェアの不具合が出ている
Pingは応答するが、SSHで接続できない
SSHするほど余力がない
- メモリ不足やディスクIOの低下
SSHで接続できる
データの書き込みができなくなった
- ディスクがいっぱい
- ログファイルや一時ファイルがファイルシステム(またはミドルウェア)のデータサイズ制限を越えた
サーバ自体ではなく、各ミドルウェアの問題
- ミドルウェアがなぜか停止している
- ミドルウェアの設定上限を超えた処理要求が来ている
障害別の対策
サーバ自体が動いていない
とりあえずリブートしてみる
- 電源OFF/ONを検討
リブートしても状態がよくならない
- fsck(ディスクチェック)の入力待ち状態のときは、とりあえずfsckしてみる
- 起動しない場合は電源やその他ハードウェアが死んでいる
ネットワークが死んでいる
【同じネットワーク内のサーバで同様の症状が発生していないか】
- tracertで途中経路の疎通を確認
- 他のサーバへのPing疎通確認
SSHするほど余力がない
とりあえずリブートさせる
- SSHで何度か接続を試みる
- 駄目なら電源OFF/ON依頼を検討
- 再起動後にログを確認してみる→原因特定へ
データの書き込みができなくなった
HDDの空き容量は十分か?
- dfコマンドで空き容量を確認する
- ディスク使用率が100%となっていれば不要ファイルを削除
ログファイルなどが書き込み不可になっていないか
- サービスが停止しているミドルウェアのログファイルなどで、2GBに達しているファイルがないか確認
各ミドルウェアで問題が発生した
停止していないか確認してみる
- Listenしているかどうか見てみる(netstat -npl | grep [サービス名])
- service [サービス名] restart とか
エラーの原因を探ってみる
- ログファイルでエラー原因を特定する
メモリやリソースが不足したときの挙動
メモリが不足するタイミング
- CGIやPHPなどによりメモリリークしている
- 突然大量の接続が確立された などなど
OOM Killerによるプロセス強制停止
メモリの空きがなくなった場合に、適当にプロセスをブッKillして空きメモリを確保しようとします。
下記のようなエラーがsyslogに出てたらOOM Killerさんが働いた証拠。
/var/log/messageskernel: Out of Memory: Killed process xxx(app)
メモリの空き容量が足りなくなったときに、適当なアプリケーションを強制停止させて空きメモリを確保する Linux Kernel の機能です。
ヒューリスティック*に基づいて停止するアプリケーションを決定するため、時に無実の(重要な)アプリケーションを停止させることもあります。
※ヒューリスティック:必ずしもそれが正しいわけではないが、ある程度正解に近い解を得る手法
ということで、何らかの外的要因でメモリ使用量が増えると、勝手にプロセスをKillされてしまう可能性があります。
それによりサービスが停止して障害となる、という一連の流れが出来上がることもある模様。
改善策はメモリ(物理メモリなり、Swapなり)を増やすこと、各サービスのメモリ使用量を減らすこと。
また、OOM Killerそのものを無効化したり、重要なプロセスについてはOOM Killerの対象外とするなど。
メモリ不足によるフリーズ
これは再起動するほかなし。
リソース(接続数)不足による障害
ApacheやSQLのMaxConnections?に達したとき、サーバ監視プログラムが新規接続を確立できずエラーを吐く
Mumin やら Zabbix やらを使っている場合、確認してみると、ものすごい勢いで接続が...
落ち着くのを待つしかないかも。。。
原因の特定
OOM Killerが原因なら、/var/log/messagesに上述のメッセージが出ているはず
再起動後、freeコマンドやpsコマンドでメモリ使用量を見てみるといいかも
障害切り分け時に考慮する点
設定については考慮しない
これまで正常に動作していたなら、突然設定がおかしくなることはありえない
例:ファイルのアクセス権、ネットワーク設定など
むやみやたらと再起動すると痛い目にあうかも
立ち上がるべきサービスが自動で立ち上がらないとか