Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS研修 ELBを使った負荷分散(とAutoScalingを使った自動スケーリング)

Recruit
August 17, 2021

 AWS研修 ELBを使った負荷分散(とAutoScalingを使った自動スケーリング)

2021年度リクルート エンジニアコース新人研修の講義資料です

Recruit

August 17, 2021
Tweet

More Decks by Recruit

Other Decks in Technology

Transcript

  1. Private subnet Public subnet ELB(Elastic Loadbalancing) 1. よりスケーラブルなシステムの実現を⽀援 2. より⾼い可⽤性の実現を⽀援

    4 よりスケーラブルなシステムの実現を⽀援 より⾼い可⽤性の実現を⽀援 複数バックエンドにリクエストを分散 (= スケールアウトの⽀援) 複数のAZへリクエストを分散することで AZ障害に対応できるようにする Application load balancer VPC Private subnet Instance Instance Instance VPC AZ-1 AZ-2 AZ-3 Public subnet Application load balancer Instance Instance Instance 内部的には複数LBで⾼可⽤性構成
  2. Public subnet ELB(Elastic Loadbalancing) ハードウェアEOLなどを意識する必要なし 5 Application load balancer VPC

    Private subnet Instance Instance Instance 裏側のハードウェア含めてAWS側で 管理しているため、ユーザ側はEOLや資産管理 といった作業は実施する必要なし
  3. Private subnet Public subnet ELB(Elastic Loadbalancing) 他のサービスと連携して運⽤タスクの削減が可能 6 Application load

    balancer VPC Instance Instance Instance 証明書 AWS Certificate Manager Instance Instance Instance Auto Scaling group ScaleOut/In SSL/TLS証明書管理との連携 AWS AutoScalingとの連携によるスケール管理
  4. ELBの種類 ⽤途に合わせた複数種類のロードバランサが提供されています ① ALB(Application Loadbalancer) Ÿ L7(HTTP/HTTPS)ロードバランサ Ÿ L7レイヤでの柔軟なリクエストの取り扱いが可能 ②

    NLB(Network Loadbalancer) Ÿ L4(TCP/UDP)ロードバランサ Ÿ IPアドレスを固定可能*1 Ÿ 毎秒数百万リクエストを暖機運転なし*2に処理可能 ③ CLB(Classic Loadbalancer) Ÿ AWSで提供している古いタイプのロードバランサ Ÿ 基本的には過去との互換性のために残っています 7 *1 ALBでもAWS GlobalAcceleratorを使ったIPアドレス固定は可能です 参考) https://blog.serverworks.co.jp/2020/08/04/global-accelerator *2 ALB, CLBでは突発的な⼤量アクセスが予測される場合は予めサポートに 依頼してロードバランサそのものをスケールアウトさせておく必要があります。
  5. ⾼可⽤性のための機能 9 https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/how-elastic-load-balancing-works.html Availability Zone VPC Availability Zone xxxx.elb.amazonaws.com Internet

    client Loadbalancers ①DNSラウンドロビンで振り分け ⼆段階で振り分けを⾏っている ②負荷が均等になるようにバックエンドに ルーティングアルゴリズムで振り分け クロスゾーン負荷分散を有効化すると、 LB-バックエンド間をゾーンをまたがって 振り分けするようになる ③振り分け先はターゲットグループまたはIP アドレスで指定可能(複数ポートも対応することで、 プロセス負荷分散も対応) 様々なレイヤでの⾼可⽤性構成を実現してSPOFの発⽣を可能な限り排除している
  6. モニタリング・ロギングのための機能 10 ヘルスチェック メトリクスモニタリング アクセスロギング LBからインスタンスへのヘルスチェック*1結果を CloudWatchに連携 ロードバランサから⽣成される各種メトリクス*2を CloudWatchに連携 LBへのインバウンドアクセスログをS3バケットに保管*3

    health- check CloudWatch *1 実施可能なヘルスチェックの内容は LBの種類に依存します ALB: https://docs.aws.amazon.com/ja_jp/ elasticloadbalancing/latest/application /target-group-health-checks.html NLB: https://docs.aws.amazon.com/ja_jp/ elasticloadbalancing/latest/network/t arget-group-health-checks.html リクエスト数 レイテンシ エラー数(種類別) など CloudWatch *2 ⽣成されるメトリクス種別はLBの種類に依存します Inbound access S3 Bucket Log *3 ログのフォーマットはLBの種類に依存します ALB: https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balancer-access-logs.html NLB: https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/network/load-balancer-access-logs.html
  7. ② 証明書管理・SNI*1対応 ①SSL/TLS終端 セキュリティ機能 ① SSL/TLS終端 Ÿ SSL/TLSによる暗号化を終端させる機能を持ちます。 Ÿ 個別のバックエンドサーバーでのSSL/TLS終端や証明書管理を不要にできます。

    ② 証明書管理・SNI対応 Ÿ AWS Certificate Manager(証明書管理のマネージド・サービス)と連携させることで SSL/TLS証明書の管理を容易化できます。 11 証明書 AWS Certificate Manager HTTPS HTTP *1 https://www.idcf.jp/rentalserver/user-support/knowledge/ssl/sni.html
  8. ELBにおける独⾃ドメインの使い⽅ 基本的にはELBに割り当てられたFQDNへのエイリアスをRoute 53*1で作成して 対応する 13 xxxx.ap-northeast-1.elb.amzonaws.com (AWSからELBに与えられたドメイン名) Route 53 xxxx.ap-northeast-1.elb.amzonaws.comのエイリアスとして

    www.example.com を登録(CNAMEでも可) client 1. www.example.comの 名前解決リクエスト 2. xxxx.ap-northeast-1.elb.amzonaws.com のIPアドレスを返す 3. 2で受け取った IPアドレスでアクセス *1 AWSが提供するマネージドDNSサービス https://aws.amazon.com/jp/route53/
  9. ALBのコンポーネント ALBでは負荷分散のために以下を指定する必要がある 14 Application Load balancer リスナー (リスナー)ルール ターゲットグループ ターゲットグループ

    注⽂決済機能 在庫管理機能 • リスナー • ロードバランサのListenポートとプロトコルを定義 • リスナールールを内部にもつ • リスナールール • リクエストの内容に応じて転送先を決めるためのルールを定義 • ターゲットグループ • EC2インスタンスなどの転送先の集合 • 公開ポートやプロトコル、ヘルスチェックルールを指定 • ターゲット • トラフィック転送先インスタンス (基本的にはEC2などのコンピュートインスタンス, Lambda関数やIPアドレスも指定可能) ターゲット
  10. ELBと他サービスの連携 • バックエンドサーバーのスケーラビリティ・可⽤性を⾼めたい • Auto Scaling(後述)と連携させます • ECS(on EC2)でプロセス負荷分散を実現したい •

    動的ポートマッピングを利⽤します • SQLインジェクションなどの脆弱性対応を⾏いたい • AWS WAFとの連携 • ALBでIPアドレスを固定したい • AWS Global Acceleratorの活⽤ 15
  11. ELBとAuto Scalingの連携 • 負荷に応じてELBだけではなく、実際にリクエストを処理するバックエンドのイ ンスタンスのスケールアウト、インスタンス障害時の⾃動復旧などを⾏うことが できます • (注意) AWSでAuto Scalingといった場合、実際には以下の2種類があるので注意してください

    17 AWS AutoScaling EC2インスタンスのオートスケーリングを管理 Amazon EC2 Auto Scaling EC2インスタンス以外のオートスケーリングを管理 e.g. ECSクラスタ・スポットフリート・EMRクラスタ・Auroraレプリカ・DynamoDBテーブルなど Application Auto Scaling
  12. Auto Scalingの基本的考え⽅ • Desired Capacity(希望容量, DC)と実際に稼働中の コンピューティングリソースの容量の差が0になるように調整を⾏います。 18 容量 静観

    Desired Capacity 容量 スケールアウト Desired Capacity スケール アウト 容量 スケールイン Desired Capacity スケール イン DC > 現在の容量 DC = 現在の容量 DC < 現在の容量
  13. Auto Scaling group Desired Capacityの活⽤ 19 容量の維持 ⼿動スケーリング ⾃動スケーリング インスタンスの異常終了時に

    ⾃動で容量を維持するよう 新規インスタンスを起動 ⼿動で容量をスケールアウト/イン させて必要な計算キャパシティを確保 ⾃動で容量をスケールアウト/イン させて必要な計算キャパシティを確保 基準となるメトリクスが必要 DC = 2 容量 = 2 Auto Scaling group DC = 2 容量 = 1 Auto Scaling group DC = 2 容量 = 2 インスタンスが 異常で停⽌ DCと容量が⼀致するよう ⾃動でインスタンスを起動 Auto Scaling group DC = 2 容量 = 2 Auto Scaling group DC = 4 容量 = 2 Auto Scaling group DC = 4 容量 = 4 ⼿動で容量を変更 DCと容量が⼀致するよう ⾃動でインスタンスを起動 ⼿動でDCを変更 Auto Scaling group DC = 2 容量 = 2 Auto Scaling group DC = 4 容量 = 2 Auto Scaling group DC = 4 容量 = 4 DCと容量が⼀致するよう ⾃動でインスタンスを起動 予めスケーリングポリシー (アラーム発報でDCを4に変更) を定義 CloudWatchアラーム発報 & スケーリングポリシーを実⾏ スケーリングポリシー に従ってDCが変更されます
  14. スケーリングの種類 スケーリングの種類には、⼤きく3つあります ① 動的スケーリング Ÿ 特定のメトリクスの値などに応じて容量を変更します ② 予測スケーリング(EC2 Auto Scalingのみ)

    Ÿ 過去2週間のメトリクスを分析して次の2⽇間の需要を予測して、 その予測に合わせて⾃動スケールします Ÿ ⼀旦は予測だけ試⾏してみて、納得できる内容であればスケーリングまで有効化することを推奨 ③ スケジュールスケーリング Ÿ キャパシティの増減スケジュールを組みます Ÿ MinCapacityとMaxCapacityの間に収まるようにコンピューティング容量を変更します (EC2 AutoScalingのみ、DisiredCapacityを指定可能) Ÿ 事前に⼤量の処理が必要となる場合に最適(広告キャンペーンを実施するなど) 20