さくらのVPSの障害でいろいろ泣かされた話

さくらインターネットのVPS(仮想専用サーバー)の連日の障害発生により、私が契約していた東京や大阪のサーバでも意図せぬ停止と再起動が行われました。

その結果、自作のサービスにアクセスできない旨のお叱りを受けて、早朝からサーバの再設定という生産性もなく、責任重大な業務に負われる事態に陥り、考えうる限り最悪の気分で一日の始まりを迎えました。

これがあるから、モバイルPCを手放せないんですよ。

消えた Nginx の設定ファイル

さて、ウェブブラウザを用いて問題のドメイン名にアクセスしてみると、ページを表示できませんというエラーメッセージが出てくるばかりです(pingが通っていたかどうかは確認しましたが、結果をメモするのを忘れました)。

私はさくらの VPS 上でリバースプロキシ兼ロードバランサとして Nginx を設置していますので、エラーが表示される場合には(1)ドメインのエラー、(2) サーバのエラー、(3) Nginx のエラー、(4) アプリケーションのエラー、(5)データベースのエラーの5つの可能性を検討しなければなりません。

今回の障害が発生したサーバとは無関係なアプリケーションとデータベースは除外して、ドメインとサーバと Nginx の状態を一つづつ確認していきます。




NsLookup でドメインを確認するとドメインは正常。そもそも更新時期とも違うので念の為の確認です。サーバも SSH で正常にログインできる時点で問題なし。

システム管理デーモン (systemd) で Nginx の状態を確認すると、ここが起動できていません。OSの再起動時に自動的に立ち上がる設定になっているはずなのですが、動いていないものは仕方がないので、コマンドを実行して稼働させます。

ところが Nginx が正常に起動しません。確認してみると、設定ファイルが見当たりません。

仕方がないので新規に設定ファイルを作成して Nginx を起動させます。

ポートが開いていない問題

Nginx を起動させたら全ての問題が解決… と簡単にはいきません。

ドメイン名でアクセスしても、IPアドレスでアクセスしても依然としてウェブブラウザでウェブサイトを表示できない状態に変化はありません。

Nginx の設定で 80 番ポートのアクセスを 443 番ポートにリダイレクトしているので、開いてるポート番号を確認すると、なんと Linux ファイアウォール (iptables) 側の設定でポートが閉じられているという事態が発覚しました。

自動再起動がほとんど機能していないですね。

画面が真っ白(ブランクページ)になるやつ

ポートを開放してファイアウォールデーモンをリロードすると、ようやくドメイン名でアクセスすることが可能になりました。

ログイン認証にも無事に成功しましたので、データベース接続にも異常はありません。アプリケーションやデータベースには問題は無さそうです。

と思っていたところ、一部のページがブランクになって何も表示されません。

ブラウザの Developer Tools でソースコードを参照すると、どうやらヘッダだけは読み込んでいる様子。さらに調べていると、次のようなエラーメッセージを表示させることができました。

ERR_CONTENT_LENGTH_MISMATCH 200 (OK)

こういうのは基本的には Nginx のエラーメッセージなので、設定ファイルに以下の1行を追加して Nginx をリロードします。

ここまで来て、ようやく正常にウェブサイトにアクセスできるようになりました。

さいわいにもアプリケーションとデータベースには障害が出ていなかったので、今回はこれだけで済みましたけれども、Nginx そのものを冗長化することも真剣に考えなければならない気がしてきました。


[24時間365日] サーバ/インフラを支える技術 ‾スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

Leave a Reply

Your email address will not be published. Required fields are marked *

Contact Us