AWS(EC2インスタンス)サーバーのWordPressブログに突然アクセス出来なくなった時の対処法
先ほど、記事を更新しようとしたらこのサイトにアクセスできず(しばらく固まって、まっ白ページが表示される)、焦りました。なんにもしてないのに。。。
無事復旧できたので、原因調査から復旧までの手順をメモっておきます。
ちなみに当サイトはAWS上(EC2+RDS)で構成しており、WordPressを使っています。
今回の障害は、EC2ボリュームのI/Oエラーが原因でした。
手順①何が起きているか確認する。
WEBサイトにアクセスできない!
→インスタンスが起動しているか確認する。(AWS管理コンソールにて、EC2、RDSインスタンスが正常に起動していることを確認)
→ローカルからサーバにリモートアクセスしてみる。(コマンドはこんな感じ)
$ ssh -v xxxxxxxx.pem [email protected][your Hostname]
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
ssh: Could not resolve hostname xxxxxxxx.pem: nodename nor servname provided, or not known
ふむ。sshアクセスも出来ないと。。。
→ついでにDBにアクセスし、データが消えていないことを確認する。
SELECT * FROM [your DBName].wp_posts;
私はMySQLworkbenchを使いました。下記のSQLで記事一覧がヒットすればとりあえず安心です。データが全部消えた、という最悪の事態ではないことが確認できました。
ここまでの作業で、どうやらEC2側の問題らしいと見当がつきました。
手順②バックアップを取る。
AWS管理コンソールにログイン
→EC2インスタンスにアタッチしているEBS(ボリューム)のスナップショットを取得
→一応、RDSインスタンスのスナップショットも取得
これで、最悪復旧に失敗したとしても、簡単に復元できます。
手順③エラーログを確認する。
AWS管理コンソールにログイン
→EC2の該当インスタンスを選択し、「インスタンスの設定 > システムログの取得」でエラーログを確認します。
I/Oエラーが発生しているようです。
手順④復旧する(I/Oエラーの場合)
・EC2インスタンスを再起動してみます。
→「インスタンスの状態 > 再起動」
→ステータスが「running」になったら、再度ブラウザからアクセスしてみる。
・上記で解消しない場合は、EBS(ボリューム)をアタッチし直します。
→「インスタンスの状態 > 停止」でインスタンスを停止します。
→AWS管理コンソールの左サイドバーにある「ボリューム」をクリック
→該当インスタンスにアタッチされているボリュームを選択
→「アクション > ボリュームのデタッチ」でデタッチします。
→再度、アタッチしなおします。
→インスタンスを起動し、「running」になったら、再度ブラウザからアクセスしてみます。
→直った!!
I/Oエラーの原因はよくわかりませんが、何も特殊なことはしていなくても起こってしまうのがシステム障害というもの。独自サーバを立ててブログ運営をする以上は、復旧も自分でやらなければいけないってことを肝に銘じておかないといけませんね。