障害にも柔軟に対応できるWebサーバーの構成

カテゴリー:WebコンサルティングWeb制作ブログ

ECサイトを運営していたり、集客をWebサイトに依存している場合、サーバーの障害などによってWebサイトが表示されなくなってしまうとビジネスに大きな影響を与えてしまいます。レンタルサーバーなどではSLA (Service Level Agreement) としてサービス品質が保証されているケースが多いですが、補償についてはサービス料金の減額となる場合が多く、障害によって発生した逸失利益の補償などは行われないのが普通です。

そのため、Webサイトの停止によって大きな損失が見込まれる場合はWebサイトの運営者側で対策を講じる必要があります。

SLAについて

ところで、レンタルサーバー事業者はどれくらいの稼働率を保証しているのでしょうか。多くの場合、これはSLA (Service Level Agreement) というもので記載されています。

例えば、SLAで保証されている稼働率が99.99%の場合、年間で52.6分まではサーバーが停止しても保証されないということになります。99.95%の場合は年間262.8分、約4.4時間となります。意外と長い時間、保証されないということがわかると思います。さらに、1回5分以内に復旧した場合は障害時間に含まない、などの条件がある場合もあります。

SLAに記載されている稼働率を下回った場合、利用料金の10%〜30%程度が返金されるケースが多いようです。前述の通り、障害が発生していた期間に失った売上や利益は保証されません。

Webサイトが表示される仕組み

Webサイトを表示する際、ブラウザは以下のような通信を行なっています。

通常、Webサーバーへアクセスする際には「blueclip.jp」というような「ドメイン名」でサーバーを指定しますが、実際に通信を行うためにはそのドメイン名に対応するIPアドレスを調べる必要があります。IPアドレスとはインターネット上で通信を行う際に相手を識別するための番号です。携帯電話に例えると、ドメイン名が電話帳の登録名、IPアドレスが電話番号のようなものだと言えます。

IPアドレスを調べるためには、DNSサーバーに問い合わせを行います。通常は、インターネットプロバイダに指定されたDNSキャッシュサーバーに問い合わせを行なってIPアドレスを調べます。このIPアドレスを調べる行為を「名前解決」と呼びます。

WebサーバーのIPアドレスが分かったら、そのIPアドレスに対して「https://blueclip.jp/」の内容をリクエストします。サーバーは、自身の設定に基づいてリクエストされたコンテンツを返します。

ここまでが一連の流れですが、DNSキャッシュサーバーは全てのドメイン名に対するIPアドレスを知っているわけではありません。知らないドメイン名についてはそれを知っているサーバーに問い合わせを行なっていきます。これは以下のような手順で行われます。

ここではWebサーバーを例に説明しましたが、メールも同じような仕組みで通信されます。

Webサイトが表示されなくなる障害

Webサイトが表示されなくなる原因には、サーバーの障害、サーバーが接続されているネットワークの障害などがあります。

サーバー障害の原因としては、故障による停止やプログラムの暴走によるフリーズ、アクセス急増に対するスペック不足による応答の大幅な遅延、悪意のある攻撃を受けた、サーバー運営会社の運用ミスなどがあります。

ネットワーク障害の原因としては、経路上の機器の故障、他のサーバーが大量の通信を行なったことによる渋滞、悪意のある攻撃を受けた、などが考えられます。

この内、どれか一つでも障害が発生するとWebサイトは表示されなくなります。そのため、停止することが問題になるようなサービスではサーバーを冗長化して対策したりします。冗長化とは、同じ役割をもつサーバーを複数用意し、どこかで障害が起きた場合には切り替えられるようにすることです。冗長化する場合は、ネットワークも別の場所に分散させることもあります。

一般的なレンタルサーバーの場合、Webサーバー、メールサーバーが同じサーバーで稼働している場合があります。このような場合、1つのサーバーの障害でWebサイトもメールも利用できなくなってしまいます。DNSサーバーは物理的に違うサーバーになっていることが多いですが、いずれにしても同じネットワークに接続されているため、レンタルサーバーのネットワークで障害が発生するとどのサーバーにも接続できなくなってしまう場合があります。

つまり、1つのレンタルサーバーでWebもメールも運用していると、Webサイトが見られなくなった場合、障害が発生していることを顧客へメールで連絡することさえできなくなってしまうリスクがあります。

障害へ事前に対策する

サーバーやネットワークを冗長化する

もっとも良いのは前述の通りサーバーやネットワークを冗長化することです。障害に強く、急なアクセス増にも柔軟に対応できる仕組みを構築できます。

ただし、サーバーの台数が増える分費用も高くなりますし、設計や設定にも専門的な知識が必要になります。一般的なコーポレートサイトなどではここまでする必要もないかもしれませんが、Webサービスを提供していたり、売上の大部分をECサイトが占めているといった場合は検討した方が良いでしょう。

例えば丸一日、Webサーバーが停止してしまった場合の損害額を試算し、その金額が冗長化に必要なコストを上回るような場合は冗長化するべきです。Webサーバーが停止してしまった場合、その期間で上がるはずだった売上がなくなるのはもちろん、本来なら獲得できるはずだったリピーターも失うことになります。このようなことも考慮して試算を行いましょう。

サーバーの契約を分散する

そこまでの予算を割けない場合、それぞれのサーバーを別々の会社と契約することでリスクを分散させることができます。こうしておけば、Webサーバーやそのネットワークで障害が起きた場合でもメールで顧客に連絡することができたり、メールサーバーの障害でもWebサイトで障害を告知することができ、損害をある程度軽減することができます。

また、事前にアクセスが急増することが分かっている場合は、予めWebサーバーをスペックアップしておくことも事前の対処になります。特にテレビで自社の商品やサービスが紹介される予定がある場合はしっかり対策しておきましょう。テレビの影響力はまだまだ大きなものがあります。レンタルサーバー業者によっては予約した時間帯のみサーバーを増強するサービスなどもあるため、相談しておくといいでしょう。

DNSサーバー

DNSサーバーは、レンタルサーバーのものではなくAmazon Web Services(AWS)のRoute 53などを利用するのがオススメです。多少専門的な知識は必要になりますが、十分に冗長化されたサービスを利用することができ、Webサーバーの長期に渡る障害が起きた場合などは設定を変更することで別のサーバーに移行することが容易になります。

Webサーバーの障害発生時には、他のWebサーバーにコンテンツをアップロードした上でDNSサーバーでドメイン名に紐付けたIPアドレスを変更することで、ユーザーがアクセスするサーバーを変更することができます。ただし、DNSサーバーの設定にもよりますが、実際にユーザーがアクセスするサーバーが切り替わるのは数時間〜数日かかります。

Webサーバー

Webサーバーの停止がビジネスに深刻な影響を与える場合は、AWSなどで複数サーバー・複数リージョン(サーバーの設置場所)で冗長化する必要があります。そこまで費用をかけるほどでもない場合は、障害が発生してからオンライン契約ができる別サービスに移転させても良いでしょう。

定期的なバックアップ

Webサイトのバックアップを取っておくことは非常に重要です。特に、WordPressやMovableTypeなどCMSを利用している場合はデータベースのバックアップを定期的に取得しておかないと、データが消失してしまった場合の復旧や、障害が長引いた場合の移転ができなくなってしまいます。

バックアップを取得する頻度はそのサイトの更新頻度にもよりますが、更新頻度が低い場合は記事やページを更新する都度、取得しておいた方がいいでしょう。1日の間で何度も更新をするような場合は、1日に1回取得すると良いでしょう。

また、バックアップをする際は必ずそのサーバーの「外」にコピーを取るようにしましょう。運用しているサーバーにバックアップファイルを置いておくのは間違いです。なぜなら、サーバー障害の際にはそのバックアップにもアクセスできなくなってしまうからです。障害が発生した際にもアクセスできる場所に保管しておかなければバックアップの意味がありません。定期的にダウンロードするか、別のサーバーに転送すると良いでしょう。

WordPressの場合ならBackWPupなどのプラグインを利用すれば、Amazon S3やDropboxにバックアップを保存することができるようになります。また、コマンドラインツールですがbash-wp-deployを使えばバックアップや復旧も素早く行うことができます。

さらに万全を期すなら、取得したバックアップを使った復旧テストも定期的に行っておきましょう。バックアップしたつもりになっていたが、実はちゃんとデータが取れていなかった…というのは意外とあるケースです。復旧テストを行うことで、不完全なバックアップになっていないか確認することができ、また、復旧の手順を確認することができるので、いざという時にスムーズに復旧することができるようになります。復旧テストは本番で稼働しているサーバーではなく、テスト用のサーバーや仮想環境などで行うようにしましょう。

まとめ

レンタルサーバーではWebサーバーとメールサーバーが同じサーバーで運用されており、DNSサーバーも同じネットワークに繋がっているケースが多くなっています。そのため、レンタルサーバー事業者のネットワークで障害が発生すると、障害が復旧するまで利用者側では何の対処も行えない場合があります。

サービスの重要度に応じて、サーバーを分散させたり、冗長化させることによって障害に対応しやすい構成にすることができます。

また、障害に対応する際に必要なのは利用可能なバックアップがあることです。日頃からバックアップを取得しておき、時々バックアップの復旧テストを行うようにしましょう。