Webサーバの高可用性と負荷分散
これまでの紹介した手順で、簡単にWebサーバの構築や運用ができることがお分かりいただけたかと思います。
一方、業務システムの中には、24時間365日稼働し続けることが求められているものが少なくありません。クラウドを導入すると、これから紹介する高可用性システムが容易に構築でき、かつ非常に低コストで運用できます。
高可用性システムとは
システムにおける可用性とは「システムが継続して稼動できる能力のこと」です。可用性が高いシステムをつくるための代表的な技術要素に「冗長化」があります。システムの冗長化とは、万が一障害が発生しても、システム全体を停止させないようにする技術要素のことです。
ここでシステムの冗長化構成を構築するときに、基礎知識として理解しておきたい用語を説明します。
■ コールドスタンバイ
構成や設定が同じサーバやネットワーク機器を、あらかじめバックアップ機として用意しておき、本番環境に近い場所に設置し、電源を停止しておきます。もし、本番環境で動作している機器に障害が発生したら、バックアップ機の電源を入れ、本番環境の機器をまるごと取り替えます。電源を停止した状態で待機させるので「コールド(冷えた)スタンバイ」と呼ばれています。
コールドスタンバイでは、本番環境の機器とバックアップ機の設定を全く同じにしておくことが必要です。なぜなら、障害が発生したときに、機器ごと取り替えるため、OSやミドルウェアの設定やアプリケーションのバージョンなどが異なっていると、正しい動作をしなくなる恐れがあるからです。
なお、本番の機器/システムのことを現用機や正系 、バックアップ機/システムのことを予備機・待機系や 副系などと呼ぶことがあります。
■ ホットスタンバイ
同一構成のサーバを2台同時に稼働させ、メインのサーバで障害が発生したときは、電源入れて待機しているもう1台が肩代わりして処理を引き継ぐ構成のことをホットスタンバイといいます。どちらも、稼働している状態ですので、データの更新がリアルタイムにでき、また、障害発生時の切り替え時間も短くなります。
■ フェールオーバー
障害が発生したサーバやネットワーク機器をシステムから自動で切り離し、予備機に切り替えることをフェールオーバーといいます。フェールオーバーには、現用機のサーバのIPアドレスを引き継ぐものやサーバのセッション情報を引き継ぐものもあり、利用者からシステム障害を意識させないようにしています。
■ ヘルスチェック
障害時に迅速に切り替えを行うために、現用機で障害が発生したことを検知するしくみを「ヘルスチェック」といいます。つまり、サーバが健康かどうかをチェックするものです。ヘルスチェックは、サーバに対して一定間隔ごとに、何らかの応答要求を出し、返事(リプライ)が返ってくるかどうかで稼働の状態(正常/異常)を判断します。
ヘルスチェックの要求には、次のようなものがあります。当然、レイヤーが高くなるほど正確なヘルスチェックができますが、サーバに対しての負荷も高くなります。
| 監視内容 | レイヤー | 説明 |
|---|---|---|
| ICMP監視 | レイヤー3 | pingなどの応答を確認 |
| ポート監視 | レイヤー4 | HTTP通信の場合、80番ポートからの応答を確認 |
| サービス監視 | レイヤー7 | HTTP通信の場合、特定のページが正しく表示されるかを確認 |
負荷分散システムとは
コールドスタンバイなどで冗長化構成をとると、システムの可用性が向上しますが、予備系のサーバを利用せずにただ保有しておくだけでは無駄になります。そのため、システムの可用性の向上と処理速度向上を同時に行う技術に「負荷分散」があります。
サーバの処理を複数の機器に割り振ることで、特定の機器に負荷が集中するのを防ぐ(負荷を分散させる)ことができます。負荷分散はWebアプリケーションサーバなど、トラフィックが集中する箇所などで良く利用されている技術です。
代表的な負荷分散技術には次の2つがあります。
■ DNSラウンドロビン
1つのドメイン名に複数のサーバのIPアドレスを割り当てる方式です。たとえば、Webサーバのドメイン名に、複数のサーバのIPアドレスを割り当てておけば、リクエスト時にアクセス先のサーバのIPアドレスが分散されます。これはDNSサーバの基本機能で実現できるので、安価に構築できます。
ただし、負荷を均等に分散することは難しく、またサーバの障害を検知するしくみがないので、別途検討する必要があります。
■ ロードバランシング
ロードバランサと呼ばれる専用の機器で、リクエストをアルゴリズム基づいて処理を分散させる方式です。リクエストを均等に割り振るアルゴリズム(ラウンドロビン)やリクエストの内容ごとに割り振り先を決めるアルゴリズムなどがあります。サーバのヘルスチェックも行い、障害のあるサーバにはリクエストを割り当てないため、システムの可用性と処理速度が向上します。
ただし、ロードバランサ専用の機器は一般的には高価です。また、ロードバランサ自身がシングルポイントになってしまうため、冗長化しておかないとシステムの可用性は向上しません。シングルポイントとは、その箇所で障害が発生すると、システムが利用できなくなる部分(単一障害点)のことです。
