12
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[AWS]Webレイヤを冗長化する方法

Last updated at Posted at 2020-02-11

2020年2月11日現在の内容です。

構成イメージ
スクリーンショット 2020-02-08 16.03.54.png

用語説明

単一障害点(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=サービス提供に必要な台数)

サーバー構成のベストプラクティス

基本的な構成
1台のサーバーでWebとDBを運用する
スクリーンショット 2020-02-08 22.03.44.png

パターン:Webサーバー×1、DBサーバー×1 構成
1台のサーバースペックが足りなくなった時に、DBを別のサーバーに切り出す
スクリーンショット 2020-02-08 22.09.14.png

パターン:Webサーバー×2、DBサーバー×1 構成
Web側の性能が足りない時に、Webサーバーを複数台使うことで、Web側の冗長化と負荷分散を行う
スクリーンショット 2020-02-08 22.12.03.png

パターン:Webサーバー×2、DBサーバー×2 構成
DBをマスタースレーブ方式にすることで、DBの冗長化を行う
(Webの冗長化と負荷分散、DBの冗長化ができる)
スクリーンショット 2020-02-08 22.25.48.png

AMIからEC2を起動

負荷分散用Webサーバーを構築する

パブリックサブネットを作成
スクリーンショット 2020-02-09 9.11.40.png
スクリーンショット 2020-02-09 9.13.04.png
スクリーンショット 2020-02-09 9.20.19.png

ルートテーブルを関連付ける
スクリーンショット 2020-02-09 9.14.41.png
スクリーンショット 2020-02-09 9.18.07.png
スクリーンショット 2020-02-09 9.21.52.png

EC2 → インスタンスから負荷分散元のEC2インスタンスを選択
アクション → イメージ → イメージの作成をクリック
スクリーンショット 2020-02-09 9.24.54.png

イメージ名、イメージの説明に任意の名前を入力し、「イメージの作成」をクリック
スクリーンショット 2020-02-09 9.28.09.png

イメージの作成を確認
スクリーンショット 2020-02-09 10.04.05.png

サイドバーから「AMI」をクリック
スクリーンショット 2020-02-09 10.06.55.png

作成したAMIを選択し、「起動」をクリック
スクリーンショット 2020-02-09 10.09.07.png

タイプは「t2.micro」を選択し、「次のステップ」をクリック
スクリーンショット 2020-02-09 10.11.35.png

以下の通り設定し、「次のステップ」をクリック
ネットワーク:作成したVPC
サブネット:作成したサブネット
自動割り当てパブリックIP:有効
キャパシティーの予約:なし
プライマリIP:10.0.11.10
スクリーンショット 2020-02-09 10.13.52.png
スクリーンショット 2020-02-09 10.19.29.png

ストレージは変更せずに、「次のステップ」をクリック
スクリーンショット 2020-02-09 10.21.13.png

タグを任意追加し、「次のステップ」をクリック
スクリーンショット 2020-02-09 10.22.39.png

既存のセキュリティグループ → 負荷分散元のEC2インスタンスと同じセキュリティグループを選択し、「確認と作成」をクリック
スクリーンショット 2020-02-09 10.25.54.png

設定内容に問題がないことを確認し、「起動」をクリック
スクリーンショット 2020-02-09 10.28.19.png

既存のキーペアを選択し、「インスタンスの作成」をクリック
スクリーンショット 2020-02-09 10.30.03.png

EC2インスタンスが作成されていることを確認
スクリーンショット 2020-02-09 10.36.00.png

ELBの作成

サイドバーから「ロードバランサー」をクリック
スクリーンショット 2020-02-11 10.05.25.png

「ロードバランサーの作成」をクリック
スクリーンショット 2020-02-11 10.06.19.png

Application Load Balancerの「作成」をクリック
スクリーンショット 2020-02-11 10.09.27.png

以下の通り設定し、「次の手順」をクリック
名前:任意名
VPC:EC2インスタンスを配置しているVPC
サブネット:EC2インスタンスを関連付けているパブリックサブネット
スクリーンショット 2020-02-11 10.12.06.png

「次の手順」をクリック
スクリーンショット 2020-02-11 10.30.56.png

新しいセキュリティグループを作成するを選択し、「次の手順」をクリック
セキュリティグループ名,説明:任意名
スクリーンショット 2020-02-11 10.33.02.png

以下の通り設定し、「次の手順」をクリック
名前:任意名
詳細設定:適宜設定
スクリーンショット 2020-02-11 10.44.41.png

ELBの対象とするインスタンスを選択し、「登録済みに追加」をクリック
スクリーンショット 2020-02-11 10.48.22.png

登録済みターゲットにインスタンスが追加されていることを確認し、「次の手順」をクリック
スクリーンショット 2020-02-11 10.51.25.png

設定内容に問題がないことを確認し、「作成」をクリック
スクリーンショット 2020-02-11 10.55.10.png

ロードバランサーが作成されていることを確認
スクリーンショット 2020-02-11 11.03.33.png

DNS名をブラウザでアクセスし、ELBにアクセスできることを確認
スクリーンショット 2020-02-11 11.05.28.png
スクリーンショット 2020-02-11 11.08.27.png

独自ドメインからELBにアクセス

AWSコンソールからRoute 53を検索し、クリック
サイドバーから「ホストゾーン」をクリック
対象のドメイン名をクリック
スクリーンショット 2020-02-11 11.21.28.png
スクリーンショット 2020-02-11 11.14.49.png
スクリーンショット 2020-02-11 11.16.32.png

Aレコードを選択
スクリーンショット 2020-02-11 11.24.24.png

以下の通り設定し、「レコードセットの保存」をクリック
エイリアス:「はい」
エイリアス先:作成したELB
スクリーンショット 2020-02-11 11.26.40.png

レコードセットが保存されていることを確認
スクリーンショット 2020-02-11 11.30.38.png

ヘルスチェックの確認

アベイラビリティゾーン「1a」のApacheを停止させる
スクリーンショット 2020-02-11 11.38.24.png
ssh -i test-ssh-key.pem ec2-user@18.179.167.73
sudo systemctl stop httpd.service

サイドバーから「ターゲットグループ」をクリック
スクリーンショット 2020-02-11 11.44.50.png

「ターゲット」をクリック
スクリーンショット 2020-02-11 11.46.48.png

アベイラビリティゾーン「1a」のステータスが「unhealthy」になっていることを確認
スクリーンショット 2020-02-11 11.48.25.png

ELBを運用する際のポイント

  1. サーバーはアベイラビリティゾーンを分けて配置する
  2. Webサーバーはステートレスに構築する

おまけ(ELBからEC2インスタンスを削除)

EC2 → ターゲットグループ → ターゲット → 編集をクリック
スクリーンショット 2020-02-11 12.11.16.png

削除対象のEC2インスタンスを選択し、「削除」をクリック
スクリーンショット 2020-02-11 12.12.11.png

EC2インスタンスが削除されたことを確認し、「保存」をクリック
スクリーンショット 2020-02-11 12.14.27.png

参考

AWS:ゼロから実践するAmazon Web Services。手を動かしながらインフラの基礎を習得

12
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?