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
負荷分散
EC2の負荷を見て、負荷が均等になるようにリクエストを分散する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追加
作成
インスタンスにAutoScalingで作成したインスタンスが2つ作成されている
ロードバランシングのターゲットグループにもAutoScalingで作成したインスタンスが2つ登録されているAutoScalingで作成したインスタンスに負荷をかける
yes > /dev/null &
負荷が設定したCPU使用率40%を超えるとインスタンスが2つ増え、Auto Scalingグループの作成で設定したインスタンスが最大4つになる。