AWS ELBを知ろう
はじめに
AWSで単一障害点を排除するELBについて学習したことについてまとめました。最後まで一読していただけると幸いです。
ELB概要
マネージド型のロードバランシングサービスで、EC2インスタンスの処理を分散する際に標準的に利用するものです。特徴はまとめると以下になります。
・インスタンス間の負荷を分散する
・異常なインスタンスを認識して対応する
・パブリック/プライベートどちらでも使用可能
・ELB自体も負荷に応じてキャパシティを自動増減するスケーリングを実施
・従量課金で利用可能
・マネージドサービスなので管理が不要
・Auto Scaling、Route53、Cloud Formationなどと連携
ELBの主要機能
①ヘルスチェック
EC2インスタンスの状態を確認して利用するEC2の振り分けを行うことを行います。例えば複数のアベイラビリティゾーンにあるEC2インスタンスのヘルスチェックを行って、1つが止まってしまえば、別の方に集中するといった処理を行います。
②負荷分散
配下のEC2の負荷に応じて、複数のAZに跨るEC2インスタンスの負荷分散を行います。例えば2台のEC2インスタンストラフィック量を3:7といったように分散させることができます。
③SSLサポート
ELBではSSL Terminationできたり、そういった操作をするサポートがついています。
④スティッキーセッション
負荷分散をしているとセッション中に同じユーザーからの2回目のアクセスで別のEC2インスタンスに飛ばされるということがあるが、この機能を有効にしていれば同じユーザーからきたリクエストは全て同じEC2インスタンスに送信することができます。
⑤Connection Draining
インスタンスが登録解除されるなどの異常が発生した場合に、切り離しを実施し処理中のリクエストは処理を続け、新規リクエスト送信を中止します。
⑥S3へのログ保管
ELBのアクセスログを指定したS3に自動保管することができます。
ELBのタイプ
現在利用できるロードバランサーは3タイプあります。それぞれについてこれから説明しますのでン用途に応じて使い分けましょう。
①CLB (Classic Load Balancer)
初期に提供されたELBであり、標準的なL4/L7におけるロードバランシングが可能でしたが、複雑な設定はできない弱点があります。特徴を以下にまとめます。
・HTTP/HTTPSとTCP/SSLプロトコルのL4とL7に対応
・Proxyプロトコルによる発信元IPアドレス識別
・ELBとバックエンドのEC2インスタンス間でHTTPS/SSL使用時にサーバ証明書認証を実施
・CLB配下のインスタンスは、全て同一の機能を持ったインスタンスが必要
・異なる機能に対してコンテントベースルーティングは出来ない
②ALB(Application Load Balancer )
レイヤー7の対応が強化された単一ロードバランサーで、異なるアプリケーションへリクエストをパスルーティングが可能です。WEBアプリケーション用のロードバランシングとしてはこちらが主要です。特徴を以下にまとめます。
・URLのパスに基いてルーティングが可能なパスベースルーティングが可能
・WebSocketとHTTP/2のリクエストを受付可能
・1インスタンスに複数ポートを登録可能
・EC2インスタンスをターゲットグループに割り当てる際、複数ポートを個別のターゲットとして登録することが可能なため、ポートを利用するコンテナをロードバランシング可能
・ターゲットグループでのヘルスチェックが可能
・アクセスログの情報追加
・EC2と同様に削除保護が可能
・ALB自体が自動的にキャパシティを増減可能
③NLB(Network Load Balancer)
NLBは超低遅延で高スループットを維持しながら秒間何百万リクエストを捌く様に設計された最新のロードバランサーです。高負荷予定されているケースに使用します。特徴を以下にまとめます。
・開放型システム間相互接続 (OSI) モデルの固定IPアドレスを持つL4ロードバランサ
・揮発性ワークロードを処理し、毎秒数百万のリクエストに対応できる能力
・VPC外のターゲットを含めたIP アドレスや静的IPアドレスでの登録可能
・複数のポートで各インスタンスまたは IP アドレスを同ターゲットグループに登録可能
・大規模アクセスが予測される際にCLBやALBで必要だったPre-warming申請が不要
・ALBやCLBはX-Forwarded-Forでアクセス元IPアドレスを判断していたが、NLBは送信元IPアドレスと送信元ポートの書き換えを行わないため、パケットからアクセス元が判
断可能
・NLBはフォルトトレランス機能を内蔵したコネクション処理を持ち、数カ月から数年のオープンなコネクションを処理できる
・コンテナ化されたアプリケーションのサポート
・各サービスの個別のヘルスステータスのモニタリングのサポート
まとめ
以上がELBについて学んだことです。ELBを使用する際は基本的にはALBで問題ないと思います。AWSなら検証もし易いですし、実際にサーバを作ってELBを使ってみましょう。
参考文献:
https://yusuke-mrmt.hatenablog.com/
https://yusuke-mrmt.hatenablog.com/entry/2020/09/18/144100