一つのALBでマルチホストの実現方法紹介


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

皆さま、こんにちは!協栄情報の陳です。

やりたいこと

今回は、一つのALBを利用して、2サーバで2サイトを作成し、高可用性を実現したいです。

ALBは、リクエストを受信すると、優先度順にリスナールールを評価し、適用するルールを決定し、ルールアクションのターゲットグループからターゲットインスタンスを選択します。ロードバランサーの1つとして、アプリケーションの可用性と耐障害性が向上します。

構成図

  • サーバが2台しかない
  • 2台サーバが2サイトにして、高可用性に設計
  • サーバ毎にの別々のポートで複数のサイトを構築
  • ALBからリスナールールを作成し、アクセストラフィックを分別
  • 1つのALBで複数のサイトを実現
  • サーバ毎にのバックアップや、オンライン保守で実現可能

file

作業ステップ

VPCとサブネットの作成

ALBは、2つ以上のアベイラビリティーゾーンからサブネットを指定しないといけないですので、1つのVPCを作成して、別のアベイラビリティーゾーンで2つのサブネットを作成しておきます。
file

インスタンスの作成

構成図によって、EC2を二台作成しておきます。
file

インスタンスのセキュリティグループにポート81を追加します。
file

ALB検証用なウェブサーバーのインストール

こちらはApache ウェブサーバーをインストールします。
file

ウェブサーバーをインストールした後で、ポート81を追加設定します。
file

バーチャルホストとして、複数ポートのアクセス設定をconfファイルの末尾に追加します。
file

ディレクトリ「/var/www/html80」に簡単なテスト検証用index.htmlを作成します。

EC2-A

  <div class="mainbox">
    <div class="msgr">Web Server 1</div>
    <div class="msgr">EC2-A port:80</div>
    <div class="msg">ようこそ</div>
  </div>

EC2-B

  <div class="mainbox">
    <div class="msgr">Web Server 1</div>
    <div class="msgr">EC2-B port:80</div>
    <div class="msg">ようこそ</div>
  </div>

ディレクトリ「/var/www/html81」に簡単なテスト検証用index.htmlを作成します。
EC2-A

  <div class="mainbox">
    <div class="msgr">Web Server 2</div>
    <div class="msgr">EC2-A port:81</div>
    <div class="msg">ようこそ</div>
  </div>

EC2-B

  <div class="mainbox">
    <div class="msgr">Web Server 2</div>
    <div class="msgr">EC2-B port:81</div>
    <div class="msg">ようこそ</div>
  </div>

例として、ホストEC2-Aのポート81へアクセスできることを確認します。
file

ターゲットグループの作成

先ずはウェブサーバー1のターゲットグループを作成します。target typeはIP addresses、Protocol:PortはHTTP:80と選択します。
file

IPアドレスはインスタンスのプライベートIPアドレスを入力して、「Include as pending below」を押下して、ターゲットグループを作成します。
file

次はウェブサーバー2のターゲットグループを作成します。target typeはIP addresses、Protocol:PortもHTTP:81と選択します。
file

IPアドレスはインスタンスのプライベートIPアドレスを入力して、「Include as pending below」を押下して、ターゲットグループを作成します。
file

ALBの作成

ALBを選択して、下図のようにロードバランサーを設定します。
file

HTTPSを利用していないので、セキュリティグループの設定に進めて、インスタンスのセキュリティグループと同じ設定しておきます。

ルーティングの設定は後で行いますので、とりあえず既存なターゲットグループを選択します。

ロードバランサーの詳細を確認して、ALBを作成します。
file

Route53にレコードを作成

ドメイン名を入力して、ホストゾーンを作成します。
file

ホストゾーンにレコードを作成する

上記作成したALBをルーティング先として、バーチャルホストウェブサーバー1へアクセス用のドメイン名を作成します。
file

上記作成したALBをルーティング先として、バーチャルホストウェブサーバー2へアクセス用のドメイン名を作成します。
file

作成したレコードが下記のようです。
file

リスナールールの設定

上記作成したALBを選択して、リスナータブより、「ルールの表示/編集」をクリックします。
file

上記作成したレコードをIF条件のホストヘッダとして、下図のように、ルールを設定します。
file

ルーティングの検証

ALBでウェブサーバー1へアクセスします。
file
画面を再読み込みして、EC2-Bに切り替えます。
file

ALBでウェブサーバー2へアクセスします。
file
画面を再読み込みして、EC2-Bに切り替えます。
file

ルーティングされないリクエストを行います。
file

最後に

ルーティング設定はホストヘッダ以外にも条件にパス、HTTPヘッダ、HTTPリクエストメソッド、文字列のクエリ、送信元IPアドレスを設定可能です。皆さまは場合によって、選択してください。ちなみに、ロードバランサーのプロトコルは、本番作業の場合、HTTPSがお勧めです。

それでは、今回も読んでいただきありがとうございました!!

Last modified: 2024-02-05

Author