2020年2月11日現在の内容です。
用語説明
単一障害点(Single Point Of Failure)
その箇所で障害が発生すると全体が停止する箇所
冗長化
システムの構成要素を多重化すること
↓
ある構成要素で障害が発生しても処理を引き継げるようにすることで稼働率を高めることができる
(単一障害点をなくす)
プロビジョニング
アクセス数などを予測し適切にリソースを準備すること
ロードバランサー
各サーバーにアクセスを振り分け、負荷を分散させる装置
ELB(Elastic Load Balancing)
AWSクラウド上のロードバランサー
概要
- 複数のEC2インスタンスに負荷分散する
- 複数のアベイラビリティゾーンにある複数のEC2インスタンスの中から正常なターゲットにのみ振り分ける(ヘルスチェック)
特徴
- スケーラブル:ELB自体も負荷に応じて自動でスケールアウト・スケールインする
- アベイラビリティゾーンをまたがる構成:ELBを利用する場合、1つのリージョンを選び、そのリージョン内のアベイラビリティゾーン全てを対象にする
- 名前解決:ELBにはDNS名が割り当てられる。ELBへの接続へのアクセスにはDNSを使用する
- 安価な従量課金:従量課金で利用可能
- マネージドサービス:運用が楽
稼働率を上げる
稼働率を高くするための考え方
- 障害発生間隔を長くする
- 平均復旧時間を短くする
稼働率を上げる具体的な方法
- 要素単体の稼働率を高くする (AWSでは難しい)
- 要素を組み合わせて、全体の稼働率を高くする
- 負荷を適切なプロビジョニングで回避する
要素を組み合わせることで、サービスの構成を冗長化する
冗長化構成
- Active-Active:冗長化した両方が利用可能
- Active-Standby:冗長化した片方は利用不可能
- Hot Standby:スタンバイ側は普段起動しすぐに利用可能
- Warm Standby:スタンバイ側は普段起動しているが、利用するのに準備が必要
- Cold Standby:スタンバイ側は普段停止している
負荷を適切なプロビジョニングで回避する
スケールアップ
- 個々の要素の性能を向上させる
- ある程度の規模まではスケールアップはコストパフォーマンスが良いが、一定範囲を超えると悪くなる
スケールアウト
- 個々の要素の数を増やす
- ある程度の規模を超える場合、スケールアウトで対応する
- 最低限N+1構成を用意、N+2構成であれば安心 (N=サービス提供に必要な台数)
サーバー構成のベストプラクティス
パターン:Webサーバー×1、DBサーバー×1 構成
1台のサーバースペックが足りなくなった時に、DBを別のサーバーに切り出す
パターン:Webサーバー×2、DBサーバー×1 構成
Web側の性能が足りない時に、Webサーバーを複数台使うことで、Web側の冗長化と負荷分散を行う
パターン:Webサーバー×2、DBサーバー×2 構成
DBをマスタースレーブ方式にすることで、DBの冗長化を行う
(Webの冗長化と負荷分散、DBの冗長化ができる)
AMIからEC2を起動
負荷分散用Webサーバーを構築する
EC2 → インスタンスから負荷分散元のEC2インスタンスを選択
アクション → イメージ → イメージの作成をクリック
イメージ名、イメージの説明に任意の名前を入力し、「イメージの作成」をクリック
タイプは「t2.micro」を選択し、「次のステップ」をクリック
以下の通り設定し、「次のステップ」をクリック
ネットワーク:作成したVPC
サブネット:作成したサブネット
自動割り当てパブリックIP:有効
キャパシティーの予約:なし
プライマリIP:10.0.11.10
既存のセキュリティグループ → 負荷分散元のEC2インスタンスと同じセキュリティグループを選択し、「確認と作成」をクリック
ELBの作成
Application Load Balancerの「作成」をクリック
以下の通り設定し、「次の手順」をクリック
名前:任意名
VPC:EC2インスタンスを配置しているVPC
サブネット:EC2インスタンスを関連付けているパブリックサブネット
新しいセキュリティグループを作成するを選択し、「次の手順」をクリック
セキュリティグループ名,説明:任意名
以下の通り設定し、「次の手順」をクリック
名前:任意名
詳細設定:適宜設定
ELBの対象とするインスタンスを選択し、「登録済みに追加」をクリック
登録済みターゲットにインスタンスが追加されていることを確認し、「次の手順」をクリック
DNS名をブラウザでアクセスし、ELBにアクセスできることを確認
独自ドメインからELBにアクセス
AWSコンソールからRoute 53を検索し、クリック
サイドバーから「ホストゾーン」をクリック
対象のドメイン名をクリック
以下の通り設定し、「レコードセットの保存」をクリック
エイリアス:「はい」
エイリアス先:作成したELB
ヘルスチェックの確認
アベイラビリティゾーン「1a」のApacheを停止させる
ssh -i test-ssh-key.pem ec2-user@18.179.167.73
sudo systemctl stop httpd.service
アベイラビリティゾーン「1a」のステータスが「unhealthy」になっていることを確認
ELBを運用する際のポイント
- サーバーはアベイラビリティゾーンを分けて配置する
- Webサーバーはステートレスに構築する
おまけ(ELBからEC2インスタンスを削除)
EC2 → ターゲットグループ → ターゲット → 編集をクリック
EC2インスタンスが削除されたことを確認し、「保存」をクリック