SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

今さら聞けない! Amazon Web Servicesによるクラウド超入門

Amazon Web Servicesのロードバランサで負荷分散するWebサーバを構築しよう

今さら聞けない! Amazon Web Servicesによるクラウド超入門 第3回

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サーバの基本機能で実現できるので、安価に構築できます。

 ただし、負荷を均等に分散することは難しく、またサーバの障害を検知するしくみがないので、別途検討する必要があります。

DNSラウンドロビン
DNSラウンドロビン
■ ロードバランシング

 ロードバランサと呼ばれる専用の機器で、リクエストをアルゴリズム基づいて処理を分散させる方式です。リクエストを均等に割り振るアルゴリズム(ラウンドロビン)やリクエストの内容ごとに割り振り先を決めるアルゴリズムなどがあります。サーバのヘルスチェックも行い、障害のあるサーバにはリクエストを割り当てないため、システムの可用性と処理速度が向上します。

 ただし、ロードバランサ専用の機器は一般的には高価です。また、ロードバランサ自身がシングルポイントになってしまうため、冗長化しておかないとシステムの可用性は向上しません。シングルポイントとは、その箇所で障害が発生すると、システムが利用できなくなる部分(単一障害点)のことです。

ロードバランシング
ロードバランシング

次のページ
負荷分散のためにEC2インスタンスを複数生成

この記事は参考になりましたか?

今さら聞けない! Amazon Web Servicesによるクラウド超入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 阿佐 志保(アサ シホ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/7810 2014/06/19 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー