最近、AWSを使ったインフラタスクを簡単なものから対応することが増えてきており、
その中で調べた内容などをまとめていこうと思います。
今回はロードバランサーについての基本概要についてまとめました。
⭐️ロードバランサーの一般的な概念
前提
複数のアプリケーションサーバーがあること。
(ロードバランサーから振り分けるので。)
ロードバランサーは何をするの?
アクセスに対して、前提に書いた複数のアプリケーションサーバーへの振り分けを行います。
それによりサーバーの負荷を分散させ、高可用性を提供します。
ロードバランサーには仮想IPアドレスが割り当てられており、そこにアクセスがあると、そこから各アプリケーションサーバの状態(今ちょっと忙しいとか、負荷が低いとか)を考慮して、調子が良さそうなサーバーに振り分けます。
ロードバランサーがもつ機能
- ロードバランサー自体を冗長化する
- パーシステンス(persistence)
- 持続性。IPやクッキーで判定し、同じユーザーからのアクセスは同じサーバに振り分ける。
- ユーザー側からすると、きちんとログイン情報などを維持することができる。
- ヘルスチェック
- 振り分け先のアプリケーションサーバーが正常な状態かを確認し、問題のないサーバーのIPをリクエスト先に返します。
DNSラウンドロビンとは?
ロードバランサーについて調べると、DNSラウンドロビンとの違いを説明している情報が多くありました。そのDNSラウンドロビンとは・・・
・ロードバランサーは使わず
・DNSサーバーが順にアプリケーションサーバーのIPアドレスを返し
・アクセスを分配する
というものです。
ヘルスチェックはせずに順番に対象のIPアドレスを返すので、たとえば障害の落ちているサーバーにも振り分けたり、セッションも管理しない異なるサーバーに振り分けることもあります。とにかく無心に振り分ける。
⭐️AWSにおけるロードバランサーとは?
EC2で設定可能です。左サイドのメニューから「ロードバランサー」を選び、右上の「ロードバランサーの作成」から確認できます。
作成できるロードバランサーを選択します。ここで4種類のロードバランサーがあることを確認できます。
✅ロードバランサーの種類
◼️Application Load Balancer(ALB)
◼️Network Load Balancer(NLB)
◼️Gateway Load Balancer(GWLB)
◼️Classic Load Balancer(CLB)
これらを総称してELB(Elastic Load Balancing)と呼びます。
それぞれの特性、詳細はこちら。
https://docs.aws.amazon.com/ja_jp/autoscaling/ec2/userguide/autoscaling-load-balancer.html
それぞれのロードバランサーは、ざっくりとどんな時に使うものなのか?
以下のような認識でいるとよさそうです。
◼️ALB:HTTP/HTTPS トラフィックやルーティングが必要な場合。
Webアプリケーション(L7レベルのルーティングが必要な場合)の場合。
◼️NLB:低レイテンシ、非HTTP/HTTPSトラフィック、または固定IPが必要な場合。
高パフォーマンスかつL4レベルのトラフィック分散が必要な場合。
◼️GWLB:セキュリティ・トラフィック管理をしたい場合
◼️CLB:レガシーな設定での互換性が必要な場合。
ただし、基本的には新しいインフラには推奨されません。
◼️(もう少し噛み砕く)どのケースで、どのロードバランサーを選ぶべきか?
- Webアプリケーション(L7レベルのルーティングが必要な場合) → ALB(Application Load Balancer)を使用。
- 高パフォーマンスかつL4レベルのトラフィック分散が必要な場合 → NLB(Network Load Balancer)を使用。
- 古いシステムやシンプルな負荷分散が必要な場合 → CLB(Classic Load Balancer)を使用。新しいインフラには推奨されません。
特徴 | ALB(Application Load Balancer) | NLB(Network Load Balancer) | CLB(Classic Load Balancer) |
---|---|---|---|
OSIモデル層 | L7(アプリケーション層) | L4(トランスポート層) | L4/L7 |
対応プロトコル | HTTP、HTTPS、WebSocket | TCP、UDP、TLS | HTTP、HTTPS、TCP |
ルーティング | 高度なルーティング(パス、ヘッダー) | シンプルなポートベースのルーティング | 基本的なラウンドロビン |
WebSocket対応 | あり | なし | なし |
コンテナ対応 | あり | あり | なし |
高スループット | 中程度 | 高い | 中程度 |
固定IPアドレス | なし(ALBはDNSベース) | あり(Elastic IPが使用可能) | なし |
今までの認識としては「サーバーアクセスを平均的に振り分けて負荷を平均化する」くらいものでしたが、概念をまとめてみて、少しだけ理解ができたと思います。
◼️参考記事