[Amazon][EC2] WEBサーバのインスタンスをロードバランサで振り分ける


あけましておめでとうございます。(っ´∀`)っ ゃーこと濱田です。本年もどうぞよろしくお願いいたします。前回お約束しました通り、今回はEC2のインスタンスにWEBサーバを建てて、ロードバランサで振り分けるところまでをやってみたいと思います。やることとしては以下の通りです。

  1. 偶数個のインスタンスを作成する
  2. セキュリティグループ(Firewall)の設定を行う
  3. ELB(Elastic Load Balancer)の設定を行う

今回作成するインスタンスは、前回同様にApacheをyumでインストールするものとします。

■ 偶数個のインスタンスを作成する

なぜ偶数個なのか、から先に簡単に説明します。今回はテスト用にインスタンスを作成したので、ゾーンを意識せずにインスタンスを作成しましたが、ELBはトラフィックのゾーン間分散アルゴリズムがラウンドロビンなので、ゾーンAとゾーンBでインスタンスの数を等数にしないといけない(もしくは1つのゾーンのみにインスタンスを作成する)のです。インスタンスの数を等数にしないと、トラフィックのバランスが不均等になってしまうので要注意です。(※ GUIでインスタンスを不均等に作成しようとするとアラートが出るようです、がアラートを無視してインスタンスを作成することもできるらしい)

それではインスタンスを作成してみましょう。

lb001

今回はインスタンスを2つ作成します。

lb002

インスタンス作成途中でファイアウォールを選ぶように促されますが、今回はロードバランサ用の設定を新たに追加するので、「Create a new Security Group」を選択します。ここではグループ名を「LB-WEB」、グループの説明を「HTTP Accept from Load Balancer」としておきます。穴開けのルールですが、SSHは0.0.0.0/0で、HTTPを10.0.0.0/8にしておきます。HTTPを0.0.0.0/0にしない理由ですが、ELBを介さずに直接アクセスされることを防ぐ意味があります。

lb003

インスタンス作成時、単一のインスタンス作成と違うところはこれくらいです。

 

■ ELB(Elastic Load Balancer)を作成する

それでは早速ロードバランサを作成してみましょう。画面中央部の「Create Load Balancer」をクリックします。

lb004

ロードバランサの名前をつけて、以下のパラメータを確認して「Continue」をクリックします。

  • Load Balancer Protocol : HTTP
  • Load Balancer Port : 80
  • Instance Protocol : HTTP
  • Instance Port : 80

lb005

次の画面では、ELBのヘルスチェックオプションを設定します。デフォルトでは以下の画面の通りです。配下のインスタンスに対して、80番ポート(HTTP)でindex.htmlを監視します。詳細設定ですが、以下のような動きをします。

  • レスポンスに5秒以上かかったら応答なしとしてカウントする
  • 0.5m(30秒)間隔で、ELB配下のEC2インスタンスに対してヘルスチェックを行う
  • 2回連続で応答がないインスタンスは異常とみなす
  • 10回連続で応答コード200のインスタンスは正常とみなす

lb006

次の画面で、ELBの配下におくインスタンスを選択します。どのインスタンスがWEBサーバかを確認して選択しましょう。

lb007

次の確認画面で問題なければ「Create」をクリックします。

lb008

以下の画面になればELBが作成されたので、「Close」をクリックします。

lb009

ELBが作成されました。「DNS Name」に記載されたFQDNにブラウザでアクセスするURLとなります。

lb010

作成したELBを選択すると、説明文が表示されます。独自ドメインなどで運用する場合は、DNS Nameに対してCNAMEを設定しましょう。

lb011

インスタンスが停止しているかWEBサーバが立ち上がっていないなど、ロードバランサからのヘルスチェックに失敗すると、Statusが「Out of Service」と表示されてしまいます。

lb012

以下のように、Statusが「In Service」になっていれば、ELBからインスタンスへのヘルスチェックは成功しています。

lb013

それでは、ブラウザからアクセスして振り分けられているか確認しましょう。

lb014 lb015

 

■ Apacheの設定

ELBに限らずロードバランサ配下のWEBサーバは、デフォルトの設定だとログに記録されるアクセス元はロードバランサのアドレスになってしまいます。これでは正確なロギングができないので、httpd.confなどのログ設定を以下のようにします。

LogFormat "%{X-Forwarded-For}i %l %u %t %D "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined

このように、X-Forwarded-Forの設定を入れてあげましょう。

 

いかがでしたでしょうか。AWS EC2では簡単にロードバランサを構築することができます。ELBの運用には、もっとELBの特性を理解する必要がありますが、簡単手軽に負荷分散、冗長化を行いたい場合は、この手順で大丈夫です。