この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
お久しぶりです。株式会社協栄情報システム3部所属の寺尾です。
今回はApplication Load Balancer(ALB)からNetwork Load Balancer(NLB)へと変更する機会があったので、そこで調べた内部向けのALBとNLBの違いについてまとめていきたいと思います。
ALBからNLBへと変更した理由は、イントラネットにおいて統合Windows認証を利用するためです。
統合Windows認証ではクライアントの送信元IPとポートを利用して認証を行うため、プロキシサーバを経由したアクセスでは認証が行えず、同じくALBでも送信元IPとポートが変わるので利用できません。
そこで、IPアドレスを保持したままリクエストの振り分けが行えるNLBの出番というわけです。
ALBとNLBの違い
まず、ALBとNLBとは?
- ALB
レイヤー7でHTTP、HTTPSプロトコルでの負荷分散を行うロードバランサー。様々なリスナールールを利用した柔軟なルーティングが可能。 - NLB
レイヤー4でTCP,UDP等のプロトコルでの負荷分散を行うロードバランサー。静的なIPで機能し、クライアントIPを保持可能で、暖気不要で毎秒数百万ものリクエストに対応できる。
以上のようなものになっています。私も先日まで知っていたのは上記のことぐらいで、深くは知りませんでした。
実際にALBからNLBに変更してみると細かな設定、仕様の違いがかなりありましたので、以下にまとめていきます。
Elastic Load Balancing(ELB)基本設定
| 項目 | ALB | NLB |
|---|---|---|
| レイヤー | 7 | 4 |
| プロトコル | HTTP,HTTPS | TCP,UDP,TCP_UDP,TLS |
| 送信元ポート | ALBのものとなる | 保持することもできる |
| ELBサーバのIP※ | 指定不可能 | 指定可能 |
| セキュリティグループ | 設定可能 | 設定不可能 |
※ALBのIPアドレスは指定不可能で、スケーリングするためにサブネットに8個の空きIPアドレスが必要になります。しかしNLBはIPを指定する、しないにかかわらず常に静的なIPアドレスになります(内部向けNLBはスケールアウトをしない)
ELBリスナー設定
| 項目 | ALB | NLB |
|---|---|---|
| ALPNポリシー | 設定不可能 | 設定可能 |
| リスナールール | 詳細に設定可能※ | デフォルトアクションのみ設定可能 |
※ホスト名やHTTPヘッダーなど様々な条件でルーティングできます
ELB属性設定
| 項目 | ALB | NLB |
|---|---|---|
| HTTP/2 | 設定可能 | 設定不可能 |
| アクセスログ保管 | 全て対応 | TLSのみ対応 |
| クロスゾーンロードバランシング | 常に有効※ | 選択可能 |
| 無効なヘッダーフィールドを削除 | 設定可能 | 設定不可能 |
| Desync緩和モード | 設定可能 | 設定不可能 |
※クロスゾーンロードバランシングはそれぞれのAZに配置されているELBからAZをまたいでリクエストを振り分ける機能で、選択肢はないですが常に有効です。
といった違いがあります。
ALBとNLBのターゲットの違い
また、ターゲットグループも細かな違いがいくつかあり、ALBからNLBへの流用は不可能です。
以下にまとめていきます。
ターゲットグループ基本設定
| 項目 | ALB | NLB |
|---|---|---|
| プロトコル | HTTP,HTTPS | TCP,UDP,TCP_UDP,TLS |
| プロトコルバージョン | 指定可能 | 指定不可能 |
ターゲットグループヘルスチェック設定
| 項目 | ALB | NLB |
|---|---|---|
| ヘルスチェックプロトコル | HTTP,HTTPS | TCP,HTTP,HTTPS |
- NLBのヘルスチェックプロトコルがTCPの場合
| 項目 | ALB | NLB |
|---|---|---|
| 非正常な閾値 | 自由に設定可能 | 正常な閾値と同値になる |
| タイムアウト | 自由に設定可能 | 10秒で固定 |
| 間隔 | 自由に設定可能 | 10秒 or 30秒 |
| 成功コード | 設定可能 | 設定不可能 |
- NLBのヘルスチェックプロトコルがHTTP,HTTPSの場合
| 項目 | ALB | NLB |
|---|---|---|
| 非正常な閾値 | 自由に設定可能 | 正常な閾値と同値になる |
| タイムアウト | 自由に設定可能 | HTTPSの場合:10秒固定 HTTPの場合:6秒固定 |
| 間隔 | 自由に設定可能 | 10秒 or 30秒 |
| 成功コード | 設定可能 | 200~399で固定 |
ターゲットグループ属性設定
| 項目 | ALB | NLB |
|---|---|---|
| スロースタート期間 | 設定可能 | 設定不可能 |
| ロードバランシングルゴリズム | ラウンドロビンアルゴリズム,最小未処理リクエストアルゴリズム | フローハッシュアルゴリズム |
| スティッキーセッション | 全て利用可能 | ターゲットグループで設定したプロトコルがTLSの場合のみ利用不可能 |
| Proxy Protocol v2 | 設定不可能 | 設定可能 |
| クライアントIPアドレスの保持 | 設定不可能 | 設定可能※ |
※ターゲットがインスタンスの場合はデフォルトでオン、ターゲットがIPアドレスの場合はデフォルトでオフ。
おわりに
ここまで読んでいただきありがとうございました。
これが今回ALBからNLBに移行するにあたって調べた内容になります。
間違いなどあればぜひご指摘ください。


