概要
Elastic Load Balancing (ELB) はトラフィックの負荷分散のサービス。例えば、Webサーバーとして機能するEC2インスタンスが複数台あり、それらへアクセスを分散させて安定稼働を図りたい場合等に用いられる。アクセスが割り当てられる先をターゲットという。リスナーにはListenするプロトコルとポート番号、ターゲットへの接続用のプロトコルとポート番号等を設定する。
また、ELBは自動的にスケールするため、ロードバランサ自体の冗長構成はユーザーは気にしなくて良い。マルチAZ構成に関してはELBの設定画面から、希望するAZとサブネットを選択する(画像)。ALB, CLBに関してはスケール時にIPアドレスが変化するので、基本的にDNS名を用いたアクセスを行うことが推奨されている。
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
ヘッダを利用することで、クライアント-ロードバランサ間でプロトコル情報を持たせることができる。
参考