AzureのLoad Balancerへの理解を深めるために、AzureのLoad BalanecrとAWSのClassic Load Balancerをロードバランサの機能ごとに比較しました。本エントリの対象は次のサービスです。いわゆるL4ロードバランサのみを対象としています。
- AWS Classic Load Balancer(TCP/SSL)
- Azure Load Balancer
リバースプロキシである次のサービスにもさらーっと触れます。
- AWS Classic Load Balancer(HTTP/HTTPS)
- AWS Application Load Balancer
- Azure Application Gateway
同じロードバランサでもクラウドによって仕様が違いました。様々なサービスを理解するのは大変ですね。
対象プロトコル
ロードバランサを利用できるプロトコル。
Cloud | 実装 |
---|---|
AWS CLB(TCP/SSL) | TCP、SSL1 |
Azure LB | TCP、UDP2 |
リバースプロキシである次のサービスは、HTTPとHTTPSのみをサポートします。
- AWS Classic Load Balancer(HTTP/HTTPS)
- AWS Application Load Balancer
- Azure Application Gateway
負荷分散方式
クライアントからの通信を特定のロジックにしたがって負荷分散の対象となるサーバに転送する機能。
Cloud | 実装 |
---|---|
AWS CLB(TCP/SSL) | ラウンドロビン3 |
Azure LB | 5タプルハッシュ、2タプルハッシュ、3タプルハッシュ4 |
なお、AWS CLB(HTTP/HTTPS)の負荷分散方式はLeast Conn(最小の未処理のリクエスト)です。3
宛先IPアドレス変換
ロードバランサに届いたパケットの宛先IPアドレスを、ロードバランサのIPアドレスから負荷分散の対象となるサーバのIPアドレスに変換する機能。ロードバランサは、どのサーバのIPアドレスに変換するかを負荷分散の方式に応じて自動的に決定します。
Cloud | 実装 |
---|---|
AWS CLB(TCP/SSL) | あり |
Azure LB | あり。管理者による明示的な指定も可能。 |
Azureでは管理者が宛先IPアドレス変換の動作をカスタマイズできます。「受信NAT規則」を使うと、ロードバランサは宛先IPアドレスを特定のサーバのIPアドレスに変換します。5「Floating IP」を使うと、ロードバランサは宛先IPアドレスを変換せずにそのまま負荷分散の対象となるサーバに転送します。6
宛先ポート番号変換
ロードバランサに届いたパケットの宛先ポート番号を、負荷分散の対象となるサーバのポート番号に変換する機能。本機能があると、ロードバランサが使うポート番号とサーバが使うポート番号を別のものにできます。
Cloud | 実装 |
---|---|
AWS CLB(TCP/SSL) | あり |
Azure LB | あり |
送信元IPアドレス変換
クライアントからの通信をサーバに分散する際に、クライアントのIPアドレスを別のIPアドレスに変換する機能。
Cloud | 実装 |
---|---|
AWS CLB(TCP/SSL) | 着信したELBのNICのIPアドレスに変換7 |
Azure LB | 変換しない8 |
セッション維持
クライアントからの通信を同じサーバに分散し続ける機能。
Cloud | 実装 |
---|---|
AWS CLB(TCP/SSL) | なし |
Azure LB | あり。負荷分散方式を2タプルまたは3タプルにする9 |
なお、AWS CLB(HTTP/HTTPS)とAWS ALBは、Cookieを利用したセッション維持をサポートします。10ただし、AWS ALB はロードバランサが生成するCookieを利用したセッション維持のみをサポートします。アプリケーションが生成するCookieを利用したセッション維持はサポートされていません。11
ヘルスチェック
動いているサーバに通信を分散するために、負荷分散の対象となるサーバが生きているかを監視する機能。
Cloud | 実装 |
---|---|
AWS CLB(TCP/SSL) | ELB自身のIPアドレスを使って、負荷分散の対象となるサーバの生き死にを確認する。12 |
Azure LB | 168.63.129.16のIPアドレスを使って、負荷分散の対象となるサーバの生き死にを確認する。13 |
クライアントのアクセス先
Cloud | 実装 |
---|---|
AWS CLB(TCP/SSL) | FQDN。ELBのIPアドレスは変わる可能性がある。14 |
Azure LB | IPアドレス。LBをインターネットに公開する場合は、LBに設定するPublic IP AddressのFQDNでもアクセス可能。15 |
Connection Draining
負荷分散の対象となるサーバがロードバランサから手動で切り離されたときに、クライアントと切り離されたサーバ間の既存セッションを指定された時間分維持し続ける(=強制的に切断しない)機能。この機能があると、負荷分散の対象となるサーバをメンテナンスする際にユーザ影響を小さくできる。
Cloud | 実装 |
---|---|
AWS CLB(TCP/SSL) | サポートする16 |
Azure LB | サポートしない?17 |
SSL終端
クライアントとのHTTPS通信を、負荷分散の対象となるサーバではなくロードバランサで処理する機能。
Cloud | 実装 |
---|---|
AWS CLB(TCP/SSL) | サポートしない。AWS CLB(HTTP/HTTPS)とALBではサポートする。18 |
Azure LB | サポートしない。Application Gatewayでサポートする。19 |
ログ記録
通信ログと性能ログを記録する機能
Cloud | 実装 |
---|---|
AWS CLB(TCP/SSL) | アクセスログ20、監査ログ21、メトリクス22 |
Azure LB | 監査ログ、アラートイベントログ、ヘルスチェックログ23 |
クライアントアドレスの通知
負荷分散の対象となるサーバに対して、クライアントのIPアドレスを通知する機能
Cloud | 実装 |
---|---|
AWS CLB(TCP/SSL) | ProxyProtocolをサポート |
Azure LB | そもそも送信元NATしないので、本機能は不要 |
-
http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/userguide/what-is-load-balancing.html ↩︎
-
https://docs.microsoft.com/ja-jp/azure/load-balancer/load-balancer-overview ↩︎
-
http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/userguide/how-elastic-load-balancing-works.html ↩︎
-
https://docs.microsoft.com/ja-jp/azure/load-balancer/load-balancer-distribution-mode#a-namehash-based-distribution-modeaハッシュベースの分散モード ↩︎
-
https://docs.microsoft.com/ja-jp/azure/load-balancer/load-balancer-get-started-internet-arm-ps ↩︎
-
https://blogs.msdn.microsoft.com/dataplatjp/2016/08/31/azure-%E4%B8%8A%E3%81%AB-alwayson-ag-%E6%A7%8B%E6%88%90%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%99%E3%82%8B%E9%9A%9B%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%8A%E3%83%BC%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/ ↩︎
-
公式ドキュメント見当たらず ↩︎
-
公式ドキュメント見当たらず ↩︎
-
https://docs.microsoft.com/ja-jp/azure/load-balancer/load-balancer-distribution-mode#a-namesource-ip-affinity-modeaソース-ip-アフィニティ-モード ↩︎
-
http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/elb-sticky-sessions.html#enable-sticky-sessions-duration ↩︎
-
http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balancer-target-groups.html#sticky-sessions ↩︎
-
公式ドキュメント見当たらず ↩︎
-
https://docs.microsoft.com/ja-jp/azure/load-balancer/load-balancer-custom-probe-overview | ↩︎
-
https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2016-elastic-load-balancing ↩︎
-
http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/config-conn-drain.html) ↩︎
-
https://feedback.azure.com/forums/217313-networking/suggestions/8156781-provide-explicit-drain-stop-capabilities-for-load ↩︎
-
http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/elb-ssl-security-policy.html ↩︎
-
https://docs.microsoft.com/ja-jp/azure/application-gateway/application-gateway-ssl-portal ↩︎
-
http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/access-log-collection.html(http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/access-log-collection.html) ↩︎
-
http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/ELB-API-Logs.html ↩︎
-
http://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/elb-cloudwatch-metrics.html#loadbalancing-metrics-clb ↩︎
-
https://docs.microsoft.com/ja-jp/azure/load-balancer/load-balancer-monitor-log ↩︎