手を動かしながら2週間で学ぶ AWS 基本から応用まで Day6

Day6 ELBを用いてWebレイヤの可用性を高める

AWSの設計の考え方

基本的に、単一障害点(single point of failure、SPOF)を作らない=冗長化すること

・DB層はRDSで、master - slave構成で障害に備える。
・Web層はELBを使う。

Elastic Load Balancing は受信したアプリケーションまたはネットワークトラフィックを、Amazon EC2 インスタンス、コンテナ、IP アドレス、複数のアベイラビリティーゾーンなど、複数のターゲットに分散させる。

・ELBの主要機能
https://aws.amazon.com/jp/elasticloadbalancing/features/#compare

  1. 負荷分散
    EC2の負荷を見て、負荷が均等になるようにリクエストを分散する

  2. ヘルスチェック
    正しい動きをしているインスタンスのみにリクエストを振る

  3. Auto Scaling
    条件を決めてEC2の数を増減させる

ALB Application Load Balancer
アプリケーション層

NLB Network Load Balancer
ネットワーク層

負荷分散とヘルスチェック

  • EC2インスタンスのAMIを作成する
    Web-1aをコピーする
    アクション→イメージ→イメージの作成

RDSインスタンスを起動させておく

  • VPC
    EC2を作成したときに自動的にパブリックのIPを割り当てるようにする
    public-subuet-1a
    public-subuet-1c
    自動割当IP設定の変更→パブリック IPv4 アドレスの自動割り当てを有効にする

  • EC2インスタンス Web-1aを起動する

  • AMIからweb-1cを作成する
    サブネット:public-subnet-1c
    タグ:Name Web-1c
    セキュリティグループ:Web-sg
    インスタンスの作成

/var/www/html/index.phpの中身をWeb-1aとWeb-1cのインスタンスで中身を変えておく

  • ロードバランサーの設定 EC2→ロードバランサー→作成→ALB
    スキーム:インターネット向け
    IPアドレスタイプ:ipv4
    リスナー:HTTP
    アベイラビリティーゾーン
    ap-north-1a public-subnet-1a
    ap-north-1c public-subnet-1c

  • セキュリティグループの設定
    新しいセキュリティグループを設定する
    セキュリティグループ名:ELB-sg
    タイプ:HTTP
    プロトコル:TCP
    ポート:80
    ソース:カスタム 0.0.0.0/0, ::/0

  • ルーティングの設定
    ターゲットグループの設定:デフォルト
    ヘルスチェック:しきい値を低くする

  • ターゲットの登録
    起動済みのWeb-1a, Web-1cを選択→登録済みを押して追加

作成

ロードバランサーが起動後
ターゲットグループ→登録済みターゲットがhealtyになっていることを確認
ロードバランサーDNS名をコピーしてアクセスすると、Web-1a/Web-1cのどちらかに割り振られることがわかる

Web-1aのapacheを止めてみる

sudo service httpd stop

ロードバランサーのステータスがunhealthyになり、Web-1cにのみ割り振られるようになる

オートスケーリング

EC2→AUTO SCALING→起動設定→起動設定の作成
AMIの選択:マイAMI
起動設定の作成:デフォルト
セキュリティグループ:Web-sgを選択
作成

  • Auto Scalingグループの作成
    グループサイズ:開始時2インスタンス
    サブネット:public-1a,public-1c

  • 高度な詳細
    ロードバランシング:一つまたは複数のロードバランサーからトラフィックを受信する
    ターゲットグループ:さっきつくったターゲットグループを選択
    自動起動したインスタンスがターゲットグループに紐付けられるようになる
    ヘルスチェック:ELBの単位で行う
    スケーリングポリシーの設定

  • Auto Scalingグループの作成
    スケーリングポリシーを使用して、このグループのキャパシティを調整する
    スケーリングの範囲:2~4
    グループサイズの増加→新しいアラームの作成
    しきい値の設定
    アクションを設定:インスタンスを2追加
    作成
    f:id:kyamashiro:20190118222744p:plain インスタンスにAutoScalingで作成したインスタンスが2つ作成されている
    f:id:kyamashiro:20190117235214p:plain ロードバランシングのターゲットグループにもAutoScalingで作成したインスタンスが2つ登録されている

  • AutoScalingで作成したインスタンスに負荷をかける

yes > /dev/null &

負荷が設定したCPU使用率40%を超えるとインスタンスが2つ増え、Auto Scalingグループの作成で設定したインスタンスが最大4つになる。

ELBの設計ポイント

  1. AZをまたがったサーバ配置
    AZの障害があっても他のAZが正常なら動作できる

  2. アプリケーションをステートレスに構築する
    どのWebに振られても問題なく動作できるようにする セッションなどをElastic Cacheに保存するなど、あるインスタンスから別のインスタンスに振られても問題なくアプリケーションが動作するように設計する