AWSを使ってみる. ( ELB 編 )
ELB*1は aws の構成の中で一般的にロードバランサ(負荷分散装置)と呼ばれるものを提供する機能です。
- ELB配下のロジックサーバ(インスタンス)に対して適切にトラフィックを分散して流すことができる
- 配下のサーバのヘルスチェックを行うことでサーバ障害等の発生時に自動的に障害サーバを切り離すことができる
- AZを分散して配下のサーバを配置した場合はまずAZ単位で分散した後にAZ内のサーバに分散することが可能。AZレベルの障害も回避可能。
- ELB自体の耐障害性を高めるためにRoute53 (DNSラウンドロビン) も併用するとさらによし。
- VPCと併用することでユーザのアクセスするサーバをELBとしてVPC内のサーバーを隠ぺいすることが可能。
ELBの構成手順
前回構成したVPCの中にプライベートIPのみを持つ複数のHTTPDサーバに対して外部からELB経由でアクセスしてみます。
User <====> ELB ( Public Subnet ) <----> EC2 ( Private Subnet ) x2
上のような構成をしてみます。ただしこの構成を実現する場合はプライベートサブネットをパブリックサブネットと同一のAZにする必要があります.
設定はEC2のマネージメントコンソールの左カラムのNETWORK & SSECURITY 内の Load Balancers が ELB の設定です。
まずはELBの管理上の名称を決めるのと、どのプロトコルの通信を転送するかを決定します。VPC内に設置するのでそれを選択します。
HTTPSをサポートする場合はこの間にSSL証明書関連の設定が挟まりますが、今回はHTTPでしたので次の項目であるヘルスチェック関連の設定を行います。今回はすべてデフォルトとしときます。
次にサブネットを指定します。配下にするEC2の属するサブネットではなくELBの属するパブリックサブネットを指定します。ELBは外部からのアクセスに利用する場合(一般的)はパブリックなセグメントに配置する必要があります。
次にELBに対するセキュリティグループを定義します。HTTPを外部から接続なのでデフォルトのままでOKとします
ELBに割り当てるインスタンスを指定します。ここでプライベートセグメントに属するインスタンスが選択肢に現れない場合はELBが配置されたAZと異なるパブリックセグメントでプライベートサブネットを定義している可能性が高いです。
同一AZという条件に沿っていればアサインするインスタンスはプライベートなセグメントに配置してあるものでもOKになります。
最後確認画面が出ますのでCreateでELBの作成完了です。
挙動確認
ELBに割り当てたインスタンスにhttpdをインストールして適当な /index.html を配置します。access_log を tail しているとELBのヘルスチェックアクセスがきて200応答をしていることがわかります
[root@ip-10-0-1-190 httpd]# tail -f access_log 10.0.0.87 - - [03/Mar/2014:10:36:22 +0000] "GET /index.html HTTP/1.1" 200 85 "-" "ELB-HealthChecker/1.0" 10.0.0.87 - - [03/Mar/2014:10:36:52 +0000] "GET /index.html HTTP/1.1" 200 85 "-" "ELB-HealthChecker/1.0" ..
ELBのマネージメントコンソールからヘルスチェックステータスを確認することが可能です。
ELBのDNS Nameをしらべて http でブラウザでアクセスしたらアクセスできると思います。
リロードするとアクセス元のインスタンスが切り替わっているのも確認できます。
便利な世の中になったもんだと実感しました。