LoginSignup
3
2

More than 1 year has passed since last update.

Elastic Load Balancing (ELB) のまとめ

Last updated at Posted at 2021-07-28

概要

ELB.png

Elastic Load Balancing (ELB) はトラフィックの負荷分散のサービス。例えば、Webサーバーとして機能するEC2インスタンスが複数台あり、それらへアクセスを分散させて安定稼働を図りたい場合等に用いられる。アクセスが割り当てられる先をターゲットという。リスナーにはListenするプロトコルとポート番号、ターゲットへの接続用のプロトコルとポート番号等を設定する。

また、ELBは自動的にスケールするため、ロードバランサ自体の冗長構成はユーザーは気にしなくて良い。マルチAZ構成に関してはELBの設定画面から、希望するAZとサブネットを選択する(画像)。ALB, CLBに関してはスケール時にIPアドレスが変化するので、基本的にDNS名を用いたアクセスを行うことが推奨されている。

ELB_multiaz_setting.png

VPC環境では、NLBかALBの使用が推奨されている。

機能

Health Check

設定値(プロトコル、ポート、パス、タイムアウト時間、正常の閾値、非正常の閾値、間隔、成功コード)に基づいてターゲットに対してヘルスチェックを行う正常なターゲットに対してトラフィックをルーティングする
※ 正常/非正常の閾値・・・正常/非正常を判定するまでに必要なヘルスチェックの連続成功/失敗回数

Sticky Sessions

同じユーザーから来たリクエストを同じインスタンスに送信する。アプリケーション内でセッション管理する場合等に用いる。デフォルトでは無効になっている。HTTP, HTTPSでのみ利用可能。

Connection Draining

バックエンドのインスタンスをELBから登録解除、またはヘルスチェックが失敗した際に機能する。そのような事象が起きた際には、新規のリクエストの割り振りは中止し、処理中のリクエストはリクエストが終了するまで一定時間待機する。デフォルトで300秒、最大3600秒の設定ができる。

SSL/TLS Termination

ELB側でSSL/TLS認証を行う機能。クライアント、ELB、バックエンドインスタンス間で通信を分割することができる。例えば、ELBにはHTTPSでアクセスし、ELB-バックエンドインスタンス間はHTTPでアクセスする等。

モニタリング

CloudWatchによりELBメトリクス(HealthyHostCount, RequestCount, Latency, HTTPCode_ELB_XXX, HTTPCode_Backend_XXX, BackendConnectionErrors, SurgeQueueLength, SpilloverCount...)を60秒間隔で監視できる。

ポートへの負荷分散

単一インスタンス内の複数ポートに対して負荷分散する機能。コンテナへの負荷分散等に適する。

クロスゾーン負荷分散

AZ毎にインスタンス数が不均一であったとしても、それぞれのインスタンスの負荷が均一化されるように分散される機能。

コンテンツベースルーティング

ALBで利用可能な機能。HTTPヘッダ内の情報、クエリ文字列等に基づいてトラフィックを割り振ることができる

3種のロードバランサーの比較

NLB ALB CLB
どのレイヤで機能するか 4 7 4/7
IPアドレス 静的(EIPの使用も可) 動的 動的 
セキュリティグループ なし (※1) あり あり
コネクションタイムアウト値 360秒 1-4000秒(デフォルト60秒) 1-4000秒(デフォルト60秒)
リスナーのプロトコル TCP, TLS, UDP, TCP_UDP HTTP, HTTPS HTTP, HTTPS, TCP, SSL
ルーティングアルゴリズム フローハッシュアルゴリズム ラウンドロビン ラウンドロビン(TCP), The least outstanding requests routing algorithm (HTTP/HTTPS)
クロスゾーン負荷分散のデフォルト設定 無効 有効 有効
暖気運転 (※2) 不必要 必要 必要
ポートに対する負荷分散 ×
バックエンドインスタンスのIPアドレス指定 ×
スティッキーセッション
コンテンツベースルーティング × ×
セキュリティグループの使用 × (※3)

(※1) NLB自体にはセキュリティグループの設定がない。そのためNLBのセキュリティグループIDをターゲット側のセキュリティグループで設定することができない。したがって、ターゲットインスタンスのセキュリティグループでクライアントからのインバウンドを許可する必要がある。

(※2) 暖気申請はBussiness/Enterpriseのサポートが必要。

(※3) NLBではターゲットのセキュリティグループを適切に設定する必要がある。

その他留意事項

ALB, CLBにおいてHTTP/HTTPSリスナーを用いた場合は、設定しない限りクライアントIPを取得しない。アプリケーション内でクライアントIPが必要となる場合には、X-Forwarded-Forヘッダを使用して、ヘッダ内でクライアントIP情報をバックエンドインスタンスへ渡す。なお、X-Forwarded-Protoヘッダを利用することで、クライアント-ロードバランサ間でプロトコル情報を持たせることができる。

参考

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2