はじめまして!ソリューションアーキテクト部の河合です。
今回は、7月に正式リリースされたサービスILBを使ってWebサーバー3台のバランシングをしてみたいと思います!また、ILBを用いた構成の事例もあわせてご紹介します。
IDCFクラウドでは、標準提供として仮想ルーターのロードバランサー機能があります。
こちらの機能ではポート単位によるシンプルな負荷分散環境を構築することができますが、より高性能なロードバランサーが欲しい!というケースもありますよね。
たとえば、
・イベントで突発的に増えるアクセスをさばきたい
・同時セッション数が多い
・SSL証明書をロードバランサーで処理したい
などなど。
ILBには次の3つの特長があり、こういったお悩みを解決することができます!
1. 最速60秒でロードバランサーがオートスケール
2. SSL証明書のターミネーションが可能
3. 標準提供のロードバランサーと比べて約10倍の性能
詳しい性能については、ILBのサービスサイトをご覧ください。
では、さっそくILBを使って分散環境を構築してみましょう!
ILBを用いた負荷分散環境の構築
今回はWebサーバー3台をバランシングします。構成は次の通りです。
この構成図のようにILBは仮想ルーターと独立して動くので、すでに仮想ルータ―を使っている場合も影響なく導入することができます。また、Webサーバー側でデフォルトゲートウェイの設定変更も必要なく、シームレスに接続することが可能です。
バランシングの対象となるWebサーバー3台ですが、今回はIDCFクラウドの標準提供テンプレート「AppTemplate CentOS 6.5 64-bit」を使って構築しています。
AppTemplateを使うとLAMP環境が簡単に構築できるので、こういったサービスを試す環境を構築する際などに便利ですね!詳しい作成方法はこちらをご参照ください。
それではILBの設定を行っていきましょう。まずはIDCFクラウドのコンソール画面からILBを選択し、有効化されていない場合はポップアップが表示されるので「有効にする」をクリックします。
ILBの設定画面が表示されるので、右上の「ILB作成」をクリックしてロードバランサーを作成します。
ここから設定に入ります。ILBを作成するネットワークを選択し、任意のFQDNを記入します。ILBはDNSラウンドロビンでActive/Activeの冗長構成を実現しているので、外部からのアクセス先はIPアドレスではなくFQDNとなります。
続いて、Configurationを設定します。
まず「プロトコル」と「ポート番号」を設定して「+」をクリックします(下図①)。これは外部とILB間の通信に対する設定です。今回はプロトコルをHTTP、ポート番号を80としています。
するとHTTPの設定項目が開くので、次に バランシング対象の仮想マシンを指定します。
指定方法として「仮想マシンを指定」をクリック(下図②)し、対象の仮想マシンを選択します。右側の「+」をクリック(下図③)すると設定が追加されます。
今回はWeb-1、Web-2、Web-3を選択しました。
ここで2点補足です。
1)「IPアドレスを入力」ではグローバルIPが対象となります
2)仮想マシンを選択する際に「ポート番号」の項目がありますが、これはILBと仮想マシン間の通信で使用されます
また、ILBではさらに詳細な設定もできます!
指定した仮想マシン一覧の右下に「詳細設定」というボタンがあり、クリックすると詳細な設定項目が表示されます。
最初の項目「バックエンドプロトコル」では、ILBと仮想マシン間の通信プロトコルを設定することができます。
今回はすべてデフォルトの値で構築しますが、このようにバランシングの方法からSorryサーバーの指定まで、環境や目的に合わせてカスタマイズすることができます。標準提供のロードバランサ―よりも機能が充実していますよね!
必要な設定項目を入力し、ページ下部の「確認画面へ」をクリックして作成します。ILBのステータスが「Running」になったら作成完了です!
では、指定したFQDNをブラウザのアドレスバーに入力して動作を確認してみましょう。
バランシング先として指定している仮想マシンWeb-1のページが表示され、アクセス可能なことが確認できました。
続いてブラウザのリロードをすることでWeb-1、Web-2、Web-3のページが切り替わることも確認してみましょう。
作成したILBがしっかり動作していますね!以上でILBを用いた負荷分散環境の構築は終了です。正式サービス時は、最後にDNSの設定でサービス用ドメインとILBのFQDNをCNAMEしましょう。
今回の構成で仮想ルーターとILBを同時に利用していますが、仮想マシン側の設定は特に必要ありません。デフォルトゲートウェイは従来通り仮想ルータ―を向いています。通信の流れは以下のようになります。
・外部からILB宛ての通信は戻りの通信もILB経由
・仮想マシンから外部への通信は仮想ルータ―経由
また、オプションとして「Firewallグループ」を指定することもできます。これは外部からILBの通信に対して、通信の許可/拒否を制御できる機能です。ロードバランサ―の作成時に設定することもできますし、作成後のILBに追加で設定することも可能です。
ILBを用いた事例紹介
冒頭でご紹介した通りILBはサーバーのトラフィック量に応じて自動でスケールするサービスなので、ゲームなど急なイベントでアクセス増が見込まれるシステムの構成に最適です!そこで、今回はゲーム会社の事例をご紹介したいと思います。
某ゲーム会社構成例
こちらはネイティブアプリで、DAU50万を想定した環境です。この構成ではフロントのWebサーバー100台をILBでバランシングしており、Photonのroomサーバー100台以上の接続もILBを通して通信しています。ILBの最大性能は30,000tps*1ですので、ボトルネックにならず負荷分散を実現しています。また、SSL終端もしているので仮想マシン側の負荷が軽減されています。
同時に、アプリの配信にはIDCFクラウドのコンテンツキャッシュを利用することで、サーバー負荷と帯域逼迫への対策も行っています。
おわりに
ここまでILBを用いた負荷分散環境の構築と事例をご紹介してきました。現構成の設定に影響なく導入できて設定もとても簡単でしたね!SSL終端ができたりヘルスチェックをカスタマイズできるなど、ユーザーの利用用途に合わせた使い方ができるのも魅力のひとつですので、ぜひこの機能性を試してみてはいかがでしょう?
ここまでお付き合いいただき、ありがとうございました!
*1:計測ツール:Apach Bench 2.3 / リクエスト回数:100,000回 / 同時コネクション数:2,000 / ファイルサイズ:32KB