ELBとAuto Scalingとは ― EC2の負荷分散と台数の自動調整
ELBは
ELBとAuto Scalingとは、EC2を複数台で動かすための負荷分散と台数調整
EC2を1台だけで動かしていると、アクセスが増えたときやサーバが止まったときに、サービスに影響が出ます。複数台に分けて動かし、台数を自動で増減させるために使うのが、ELBとAuto Scalingです。
ELB(Elastic Load Balancing)は、届いた通信を複数のEC2インスタンスなどに自動で振り分けるサービスです。AWS公式ドキュメントの説明では、登録したターゲットの状態を確認し、正常なターゲットだけに通信を送ります。こうして複数のターゲットに通信を分散します。Auto Scalingは、負荷の処理に必要な数のEC2インスタンスを確保するサービスです。正式名はAmazon EC2 Auto Scalingです。
振り分けの方式やヘルスチェックといった、負荷分散そのものの仕組みは、ロードバランサの記事で説明しています。
ALB・NLB・GWLBの違いは、どの層までを見て振り分けるか
AWSのELBには複数の種類があります。AWS公式ドキュメントは、現行の種類としてALB・NLB・GWLBの3つを挙げています。CLBは旧世代の種類で、現行の種類への移行が推奨されています。
| 種類 | OSI参照モデルの | 扱う | 向いている |
|---|---|---|---|
| ALB(Application Load Balancer) | L7(アプリケーション層) | HTTP・HTTPS | URLのパスやヘッダの内容で振り分け先を変えたいWebアプリケーション |
| NLB(Network Load Balancer) | L4(トランスポート層) | TCP・UDP・TLSなど | 大量の接続を低い遅延でさばく処理、ロードバランサに固定IPアドレスが必要な場合 |
| GWLB(Gateway Load Balancer) | L3(ネットワーク層) | すべてのIPパケット(GENEVEでカプセル化) | ファイアウォールなど仮想アプライアンスにトラフィックを通す場合 |
| CLB(Classic Load Balancer) | L4またはL7(旧世代) | HTTP・HTTPS・TCP・SSL/TLS | 旧世代のため、現行の種類への移行が推奨されている |
3つの種類は、L4とL7の違いの節で説明したOSI参照モデルの層のどこまでを見るかで分かれます。ALBはHTTPリクエストの中身まで読む代わりに、処理が重くなります。NLBはIPアドレスとポート番号しか見ない代わりに、1秒あたり数百万件という規模の要求を処理できます。GWLBはさらに下の第3層で動き、受け取ったIPパケットを丸ごと仮想アプライアンスへ転送します。仮想アプライアンスとは、ファイアウォールなどの機能をソフトウェアとして動かす仮想マシンです。ALBにはAWS WAFのWeb ACLを付けられます。仕組みはWAFとShieldの記事で説明しています。
ALB・NLB・GWLBは、ターゲットグループという単位で設定を管理します。ヘルスチェックの設定や振り分け先のEC2インスタンスを、ターゲットグループごとに決めます。GWLBは、IPパケットをGENEVEというプロトコルでカプセル化し、ポート6081で仮想アプライアンスに転送します。カプセル化とは、パケット全体を別のパケットの中に入れることです。ターゲットグループには、Amazon ECSの記事で説明するコンテナのタスクも登録できます。
ターゲットグループのヘルスチェックは、既定値が決まっている
ALBのターゲットグループは、登録したEC2インスタンスに定期的にヘルスチェックを送ります。ヘルスチェックの一般的な仕組みは、AWSでも同じです。確認する間隔や、異常と判定するまでの回数には、次のような既定値があります。
| 設定項目 | 既定値 |
|---|---|
| 確認方法(プロトコル) | HTTP |
| 確認間隔 | 30秒 |
| 応答を待つ時間 | 5秒 |
| 正常と判定するまでの連続成功回数 | 5回 |
| 異常と判定するまでの連続失敗回数 | 2回 |
登録したターゲットは、最初のヘルスチェックに合格するまで「healthy」になりません。異常と判定されたターゲットには新しい通信を送りませんが、登録そのものは残ります。
Auto Scalingグループは、最小・希望・最大の3つの台数で動く
Auto Scalingグループとは、同じ設定で動かすEC2インスタンスのまとまりです。グループには、最小・希望・最大という3つの台数を設定します。
最小は、グループがこの台数を下回らないようにする値です。最大は、グループがこの台数を超えないようにする値です。希望(desired capacity)は実際に動かす台数で、Auto Scalingはこの台数を維持しようとします。
Auto Scalingグループには、複数のアベイラビリティゾーン(AZ)を指定できます。すると、台数が増減しても、インスタンスがAZ間で均等になるように分散します。AZの考え方自体は、リージョンとAZの記事で説明しています。
台数を自動で増減させる規則は、スケーリングポリシーで決めます。たとえば、CPU使用率などの指標が目標の値から外れたときに台数を調整する方式があります。指標にはCloudWatchのメトリクスを使い、判定にはアラームを使います。仕組みはCloudWatchの記事にまとめています。SQSのキューにたまったメッセージの数をもとに、台数を変える方法もあります。ポリシーの種類ごとの細かい計算方法は省略します。
ELBとAuto Scalingの連携は、登録と登録解除が自動で行われること
Auto ScalingグループにはELBを組み合わせられます。Auto Scalingが起動したインスタンスは、自動でターゲットグループに登録されます。Auto Scalingが終了を決めたインスタンスは、終了する前に自動でターゲットグループから登録解除されます。
この自動化で、台数が増えても減っても、ロードバランサ側の設定を手動で直す必要がありません。Auto Scalingが既定で使うのは、EC2のヘルスチェックの結果だけです。ELBのヘルスチェックを有効にすると、ELBが異常と判定したインスタンスも入れ替えるようになります。
Elastic Beanstalkを使うと、コードを渡すだけでELBとAuto Scalingグループをまとめて作れます。
動かして確かめる:要求した台数と、実際に起動する台数
スケーリングポリシーが「この台数にしたい」と要求しても、Auto Scalingグループの最小・最大の範囲は守られます。次の図は、最小2台・最大10台の例です。要求する台数を変えて、実際の台数を確かめられます。
要求は最小の2台を下回っています。Auto Scalingは最小を下回らないようにするため、実際は2台のままです。
要求は最小2台・最大10台の範囲内です。そのまま3台になります。
要求は最小2台・最大10台の範囲内です。そのまま10台になります。
要求は最大の10台を超えています。Auto Scalingは最大を超えないようにするため、実際は10台までしか増えません。
要求が最小を下回れば、実際の台数は最小に合わせられます。要求が最大を超えれば、実際の台数は最大までしか増えません。範囲内の要求だけが、そのまま実際の台数になります。
参考にした資料
- AWS「What is Elastic Load Balancing?」(ELBの定義、Auto Scalingとの連携、CLBの位置づけ)
- AWS「What is an Application Load Balancer?」(ALBの層・ターゲットグループ・振り分け方式)
- AWS「What is a Network Load Balancer?」(NLBの層・対応プロトコル・静的IP)
- AWS「What is a Gateway Load Balancer?」(GWLBの層・用途・GENEVE)
- AWS「Health checks for your Application Load Balancer target groups」(ヘルスチェックの既定値)
- AWS「What is Amazon EC2 Auto Scaling?」(Auto Scalingグループの最小・希望・最大、ヘルスチェック、AZへの分散)
練習問題(全6問)
正解:複数の
AWS公式ドキュメントは、
正解:ALBは
AWS公式ドキュメントは、
正解:ファイアウォールなどの
AWS公式ドキュメントは、
正解:台数が
AWS公式ドキュメントは、
正解:Auto Scalingが
AWS公式ドキュメントは
正解:ELBは
ELBは、
選んでから「採点する」を押すと、解説つきで答え合わせができます。