Power Unit Inc. | 想像力のない者に翼はない | Elastic Load Balancing
15807
page-template,page-template-full_width,page-template-full_width-php,page,page-id-15807,qode-quick-links-1.0,woocommerce-no-js,ajax_fade,page_not_loaded,,side_area_uncovered_from_content,columns-4,qode-theme-ver-16.2,qode-theme-bridge,wpb-js-composer js-comp-ver-5.4.7,vc_responsive
 

Elastic Load Balancing

Elastic Load Balancing (ELB) & Auto Scaling

受信アプリケーショントラフィックを複数の Amazon EC2 インスタンス間で自動的に分散します

Elastic Load Balancing のメリット(可用性・伸縮自在性・安全)とユースケース。

Elastic Load Balancing を使用して、アプリケーションのために高レベルの耐障害性を実現したい時は、複数のインスタンス間で自動的にトラフィックをルーティングするようにします。Elastic Load Balancing により、異常なインスタンスを検出し、トラフィックを残りの正常なインスタンスに再ルーティングすることによって、正常な Amazon EC2 インスタンスのみがトラフィックを受信するようにします。

Elastic Load Balancing は「ネットワーク」に関するサービスですが、Amazon EC2 の Auto Scaling 機能、アベイラビリティーゾーンの概念、Amazon VPC のエンドポイントの機能などと密接に連携しているので本セクションで紹介します。Amazon VPC の詳細については「ネットワーク」のセクションを参照してください。

下の図では、Amazon EC2 インスタンスのうち一つが障害を起こすと、自動的に新しいインスタンス(Replacement Instance)が障害を起こしたインスタンス(Dead Instance)に置き換わります。

複数の利用可能ゾーンに Amazon EC2 インスタンスを配置することによって、耐障害性のあるアプリケーションを構築できます。手動介入を少なくして耐障害性を高めるために、Elastic Load Balancing を使用することができます。処理インスタンスを Elastic Load Balancer の背後に配置することにより、耐障害性を改善することができます。なぜなら複数のインスタンス全体と複数の利用可能ゾーンにおいて、これが自動的にトラフィックのバランスをとり、健全な Amazon EC2 インスタンスだけがトラフィックを受け取るようにできるからです。

つまり、より強固な可用性を備えたい時は、複数のインスタンスと複数のアベイラビリティーゾーン内で自動的にトラフィックをルーティングするようにします。1 つのアベイラビリティーゾーンにある EC2 インスタンスすべてに不具合があり、複数のアベイラビリティーゾーン内で EC2 インスタンスを設定している場合、Elastic Load Balancing は、その他のゾーン内で正常な EC2 インスタンスに対してトラフィックのルート割り当てを行います。

アベイラビリティーゾーンとは、同じ東京リージョンのデータセンターでも、耐障害性を確保するために、物理的に隔離され、収容サーバー。ネットワーク、空調、電源などが全て異なる領域を指します。

下の図では、Amazon EC2 インスタンスが、異なるアベイラビリティゾーン(AZ Aと AZ B)で Auto Scaling するように設定されています。万が一に、AZ A全体に致命的な障害が発生したとしても、ELB はトラフィックを AZ B の EC2 インスタンスに自動的にルーティングします。

Elastic Load Balancing は、アプリケーショントラフィックの要求を満たすように、要求処理容量を自動的に縮小/拡大します。さらに、Elastic Load Balancing は、Auto Scaling と統合して、手動の介入を必要とせずに、さまざまなトラフィックレベルを満たすバックエンド容量を確保します。

下の図で、例えば Elastic Load Balancer の影響下にある正常な Amazon EC2 インスタンスの数が、常に2つ以下にならないようにしたいとします。Auto Scaling を使用して、こうした条件を設定することができます。また Auto Scaling が適合する条件を検出すると、必要数の Amazon EC2 インスタンスを自動的に Auto Scaling グループに追加します。

さらに実践的なケースでは、下の図のように、ELB がクラスターに配置されている EC2 インスタンスのヘルスチェックをした結果、ワークロードがある一定以上の閾値を超え、Auto Scaling が適合する条件に達した時は Amazon CloudWatch に通知が送信されます。Amazon CloudWatch は 通知を受けAmazon S3 に保存されている EC2 インスタンスの実行イメージ(EC2 AMI)をクラスタノードとして自動的に Auto Scaling グループに追加します。こうすることによって、クラスタ内部の個々の EC2 インスタンスの負荷が分散するので、ワークロードが下がり、クライアントからのリクエストに対するサーバーからのレスポンスをより高速かつ安定して返信することができます。

Amazon Virtual Private Cloud (Amazon VPC) で Elastic Load Balancing を使用することで安全性が高まります。Amazon VPC は単純に言えば AWS 内部にプライベートネットワークを構築するためのサービスで、 AWS のネットワーク構成におけるキーテクノロジーであり「ネットワーク」のセクションで詳細について解説します。

Elastic Load Balancing を利用すると、インターネットから VPC へのエントリポイントを作成することや、VPC 内の各アプリケーション層への負荷分散が容易になります。ELB にセキュリティグループ(ファイアーウォール)を割り当て、許可されているソースのリストに対してどのポートを開けるかをコントロールできます。Elastic Load Balancing が VPC にアタッチされているため、既存のネットワークアクセスコントロールリスト (ACL) およびルーティングテーブルのすべてが、追加のネットワークコントロールを継続的に提供します。

ロードバランサーを VPC 内に作成するときは、そのロードバランサーがインターネットに接するか(デフォルト)、内部的なものかを指定できます。「内部的」を選択した場合は、そのロードバランサーに到達するためのインターネットゲートウェイは不要であり、ロードバランサーのプライベート IP アドレスがロードバランサーの DNS レコード内で使用されます。

下の図では、AWS 内部に Internet Gateway (IGW) をアタッチした VPC がプロビジョニングされています。VPC は、障害範囲を限定的にするために複数のアベイラビリティーゾーンに分割され、それぞれのゾーンにサブネットが構築されます。図では、上段のサブネットは、インターネットに公開された「パブリックサブネット」です。下段のサブネットはインタネットからは参照できない領域で「プライベートサブネット」と呼ばれます。2つのサブネット間には、セキュリティゲートウェイ(セキュリティーグループ:ファイアーウォール)が存在し IP アドレスの変換だけでなく、上述した様々な方法で安全性を確保します。

上の図では、プライベートサブネット内の EC2 インスタンス(例えばアプリケーションサーバー)に対してロードバランサー ELB が「内部的」に作成されますが、パブリックサブネット側の Web サーバーやプロキシーサーバーに対応する ELB を追加して、下の図のような 3 層 Web アプリーケーションを構築することは、典型的なアーキテクチャー(デザインパターン)の 1 つです。

  1. ユーザーの DNS リクエストは、高可用性を備えたDNS (Domain Name System) 、Amazon Route 53 によってサービスされます。ネットワークトラフィックは、 AWS で動作しているインフラストラクチャーへと送信されます。
  2. 静的なコンテンツ、ストリーミングコンテンツ、動的コンテンツはエッジロケーションのグローバルネットワーク、Amazon CloudFront によって配信されます。
  3. Web アプリケーションで使用されるリソースと静的なコンテンツは、ミッションクリティカルで最も重要なデータストレージの用に設計された高耐久性を備えたストレージインフラストラクチャーの Amazon Simple Storage Service (Amazon S3) に保存されます。
  4. HTTP リクエストは、複数のアベイラビリティーゾーン(AZ)を横断して複数の Amazon Elastic Compute Cloud (Amazon EC2) へ入力されるアプリケーショントラフィックを自動的に分散する Elastic Load Balancing (ELB) によって最初に処理されます。ELB は、また、アプリケーションに対して強固な耐障害性を可能にし、入力されるアプリケーショントラフィックに対するレスポンスに必要なロードバランスのためのキャパシティー容量を透過的に提供します。
  5. Web サーバーとアプリケーションサーバは Amazon EC2 インスタンスに配置(デプロイ)されます。多くの組織では、既存の Amazon Machine Image (AMI) を選択して、必要に応じてカスタマイズします。このカスタマイズされた AMI は将来の Web 開発の開始ポイントになります。
  6. Web サーバーとアプリケーションサーバは Auto Scaling グループに配置(デプロイ)されます。Auto Scaling はお客様の条件設定に基づいてキャパシティ容量の増加・減少を自動的に調整します。Auto Scaling は、また、要求が急増した時のパフォーマスを維持するための透過的な追加、コストを最小化するための自動的な削減によって Amazon EC2 インスタンスの(最適な)数を保証します。
  7. 高可用性のために、アプリケーションデータが保存されたリレーショナルデーターベースは、マルチ-AZ(multiple Availavility Zones – 例では A と B)に Amazon Relational Database Service (Amazon RDS) を配置(デプロイ)することによって冗長性を提供します。