AWS EC2(6)Elastic Load Balancing

ELBとは

ELBとは複数のアベイラビリティゾーンのEC2インスタンスに負荷を分散させるロードバランサである。ELBには、Classic Load BalancerApplication Load BalancerNetwork Load Balancerの3種類が存在する。特段の理由がなければ、Clasic Load Balancerは使用せず、Application Load Balancer、Network Load Balancerを使用する。

ロードバランサは、登録されているEC2のうち正常なものだけを選んで負荷を分散する。Clasic Load Balancerは、EC2のインスタンスを直接登録するが、Application Load BalancerとNetwork Load Balancerは、ターゲットグループをまず生成し、その中にインスタンスを登録する形となる。クライアントから接続があった場合は、作成したリスナーがそれを確認し、EC2へとトラフィックをルーティングする。EC2にルーティングをクロスゾーン負荷分散を無効にしていると、インスタンスがどのようなバランスで配置されていたとしても、アベイラビリティゾーンの数で均等に配分されてしまうので注意が必要である。なお、Application Load Balancerでは、クロスゾーン負荷分散はデフォルトで有効になっている。

ロードバランサに紐付けられているドメイン名に紐づけられたIPアドレスは、負荷に合わせて動的に変化する。DNSエントリは、TTLが60秒に設定されている。内側のインスタンスとの通信では、EC2にKeep Aliveを設定しておくことが望ましい。

特徴

HTTPS

SSLの終端に対応している。また、同じIPアドレスには1つのドメインしか割り当てられないSSL/TLSを拡張し、複数のドメインに対応したSNIにも対応している。

 

 

 

Application Load Balancer とは

Application Load Balancerは、OSI参照モデルのレイヤー7で動作するロードバランサで、負荷に合わせて自動的にスケールする。HTTP/2やWebSocketに対応している。EC2でクライアントの送信先アドレスを取得するためには、x-forwarded-forヘッダフィールドを参照する。ALBが負荷に追従できずスケーリングが間に合わなかった場合は、503を返す。リクエストタイムアウト値は60秒

スティッキーセッション

ALB(およびClassic Load Balancer)では、スティッキーセッションを利用できる。ALBは、レスポンスにCookieを含め、 同一のCookieを受信した場合にはリクエストを同じターゲットに送信するターゲットグループ単位 で、スティッキーセッションを有効化できる。

アベイラビリティゾーン

ALBが対象とするアベイラビリティゾーンを有効化/無効化することができる。 無効化されたアベイラビリティゾーンのターゲットは、ALBに登録された状態のままであるが、トラフィックはルーティングされない

ルーティング

IPアドレスベースのルーティングに対応しているため、オンプレミス上の任意のサーバをターゲットとして指定することができる。また、Lambdaをターゲットにすることも可能。ホストベース、パスベース、ヘッダーベース、メソッドベースなどのコンテンツベースルーティングにも対応している。

ELB基本コンポーネント

Network Load Balancerとは

Network Load Balancerは、OSI参照モデルのレイヤー4で動作するロードバランサで、必要に応じて1つのElastic IPをサブネットごとに紐づけることができる。また、NLBを作成するときには耐障害性を向上させるために、複数のAZを有効にすることができる。ただし、NLB作成後にAZを有効化したり無効化したりすることはできない。また、割り当てたサブネットに1つ以上のターゲットが存在する必要がある。割り当てたサブネットには最低8個の利用可能なIPアドレスが必要となる。

送信元のIPアドレスを保持することが可能で、Pre-Warmingなしに急激なスパイク(数百万requests/秒)に対応可能。また、NGとなったAZのIPアドレスは自動的にDNSとの紐付けから削除されるなど高い可用性を持つ。

リスナーは、TCP 1-65535ポート、およびWebSocketに対応している。ログは、VPCフローログを利用する。

クロスゾーン負荷分散

NLBでクロスゾーン負荷分散を有効にすると、同一AZ(同一サブネット)のターゲットだけではなく、有効な全てのAZの登録済みのターゲットに対してトラフィックを分散することができる。