Amazon VPC内で内部ロードバランサーを使う

内部ロードバランサーとは

従来から提供されているELB(Elastic Load Balancer)は、インターネットからのアクセスに対して、AZ(Availability Zone)をまたがった負荷分散を行っていました。今回の発表により、VPC内において、インターネットに公開していないサブネット内部のサーバを負荷分散できるようになりました。これにより、例えば外部から接続されるWebサーバはインターネットELBを使い、内部から接続されるAPサーバは内部ELBを使うといった、多段階の負荷分散ができるようになります。今までの作法として、WebとApサーバを同じEC2インスタンスにまとめることで管理を楽にしていましたが、これからは、それぞれ別に負荷分散をすることができるようになります。

WebサーバとAPサーバそれぞれで負荷分散

以下のような形でテスト環境を作ってみます。

VPC内で2つのAZにまたがったサブネットをそれぞれ作る

まずは、VPC内で2つのAZにまたがったサブネットをそれぞれ作ります。今回は、10.0.0.0/16の中に10.0.0.0/24と10.0.1.0/24のサブネットとしました。それぞれインターネットゲートウェイに繋ぐようにルーティングしてください。

VPC内でEC2インスタンスを起動する

VPC内でEC2インスタンスを起動します。10.0.0.100と10.0.0.101、10.0.1.200と10.0.1.201としました。それぞれ起動しましたら、ELBの死活監視で正しく応答できるようにSSHでログインしてApacheのインストールとヘルスチェック用のindex.htmlを作成しておきます。ちなみに、VPC内のインスタンスは、デフォルトでインターネットからのアクセスは受け付けておりません。そのため、2段階の設定をすることでインターネットからの接続を可能にします。まずはじめに、ElasticIPで固定IPを割り当てます。次にセキュリティグループの設定で22番と80番を許可します。4つのEC2インスタンスに対して同じようにセットアップしてください。

$ sudo yum install httpd-devel -y
$ sudo service httpd start
$ sudo chkconfig httpd on
$ vi /var/www/html/index.html
hello internal

インターネット用ロードバランサーの設定

インターネット用ロードバランサーの設定を行います。ELB作成後、EC2インスタンスを登録します。この際、2つのAZのインスタンスを指定してください。例として、10.0.0.100と10.0.1.200を登録しました。

このロードバランサーは、インターネットからアクセスできる種類のため、PublicなDNS名が割り振られています。

インターナル(内部)用ロードバランサーの設定

インターナル(内部)用ロードバランサーの設定をします。作成ウィザードにてインターナル用にチェックを入れます。例として、10.0.0.101と10.0.1.201を登録しました。

このロードバランサーは、内部からのアクセスのみできる種類のため、PrivateなDNS名が割り振られています。これはインターネットからアクセスすることはできません。

インターナルなロードバランサーの動作確認をするため、インターネット側のELBに登録したEC2インスタンスにEIPを割当ててSSHでログインし、以下のようなwgetコマンドで接続を確認しました。

$ wget internal-internal-lb-729355944.ap-northeast-1.elb.amazonaws.com
$ cat index.html 
hello internal

まとめ

ELBの新機能である内部ロードバランサーによって、インターネットに公開していないサーバ群の負荷分散を実現できるようになりました。負荷に応じて内部のAPサーバを増やすなど容易にスケールアウトできるようになります。また、VPCに対応していますので、自社のネットワークからVPN接続して大量のリクエストを分散処理するといった使い方も容易に可能になりました。例えば、全国の支店から月末に締め処理用の大量アクセスがあるといったシナリオのときに効果を発揮するのではと思います。今まで、こういった構成を自前ハードウェアで組もうとした場合、初期費用だけで数千万円の見積もりになっていたのではと思います。エンタープライズ分野でもクラウドってステキですね!今日から君もインターネットとインターナルを分けて負荷分散してみよう!VPCが標準だね〜

参考資料

Creating a Basic Load Balancer in Amazon VPC