SLBを使ってWebの負荷分散を試してみる

Alibaba Cloudでは、複数のECSにトラフィックを振り分けることによってアプリケーションなどのシステムの可用性を高めるSLBという仕組みを導入することができます。SLBの基本的な仕組みと導入方法についてご紹介していきます。

#SLBとはどのようなシステムなのか？
通常のシステムでは、サーバひとつにつきひとつのIPアドレスが割り当てられる形のため、システムに大きなトラフィックがかかったり、物理的な障害が発生したりするとシステム全体の動作に問題が起きてしまいます。

このような問題に対処するために作り出されたのがSLB（サーバロードバランサ）という仕組みです。

SLBを導入すると、今までひとつのサーバで処理していたトラフィックを複数のサーバに分散して処理することができるようになります。

これにより、単体のサーバでは処理が難しかったトラフィックでも安定した動作が可能となり、システム全体の可用性が向上するのです。

また、SLBを導入すると、サーバの物理的な障害についても可用性を高めることができます。

SLBでは負荷分散装置（ロードバランサ）によってトラフィックを分散させているため、もし物理的な障害で一部のサーバが停止したとしても、稼働中のサーバにトラフィックを振り分けることで問題なくシステムを稼働させることができるのです。

#Alibaba CloudでSLBを導入する際の注意点
Alibaba CloudでもSLBを使用することができますが、前提条件として複数のECSインスタンスの作成を行っておく必要があります。

そこで、今回はECSインスタンスの作成から実際にSLBを導入するまでの一連の流れについて説明していきたいと思います。

#前提条件となるECSインスタンスの作成方法

ECSインスタンスの作成を行う場合には、まず「ECS管理コンソール」にログインします。

![WS000000.JPG](https://qiita-image-store.s3.amazonaws.com/0/251354/0ebb883a-89b5-a9e2-3eff-cb61c1b63c5c.jpeg)

ECS管理コンソールへのログインについては、管理コンソールにログインし、「Elastic Compute Service」をクリックしてください。

##ECSインスタンスの基本構成を設定する

![WS000001.JPG](https://qiita-image-store.s3.amazonaws.com/0/251354/1ae2135c-ec51-19e5-3129-d09bdec761a0.jpeg)

ECS管理コンソールにアクセスするとこのようなページが表示されますので、画面左のメニューから「インスタンス」を選択し、新しいECSインスタンスを作成していきます。

![WS000002.JPG](https://qiita-image-store.s3.amazonaws.com/0/251354/cf90bf08-eafd-eea5-f477-6ee6d7161c05.jpeg)

今回は日本リージョンでECSインスタンスの作成を行いますので、表示されたページで「Asia Pacific NE 1（Japan）」を選択し、右上の「インスタンスを作成」をクリックします。

![WS000003.JPG](https://qiita-image-store.s3.amazonaws.com/0/251354/c13a4256-dd78-9f4f-6f8b-959707722521.jpeg)

「インスタンスの作成」では、利用する目的に合わせて項目を設定して行く必要がありますので、構築予定のシステムに合ったスペックを選択していきましょう。

今回はSLBの基本的な導入方法についてテストする目的ですので「コミュニケーションタイプsn2」の「ecs.sn2.medium」を選びました。

リージョンについては先ほど日本リージョンを選択していれば「アジア東北1（東京）」となっていますので、そのままにしておきましょう。

「インスタンスタイプ」の設定では、最下部に「インスタンス数」を設定する項目があります。

これは、作成するECSインスタンスの台数を設定する項目ですので、SLBを用いた負荷分散を行う場合には2台以上を選択しておいてください。

![WS000004.JPG](https://qiita-image-store.s3.amazonaws.com/0/251354/6ef27d0e-d233-a45d-8f13-b43d2b3bf22a.jpeg)

基本的なサーバスペックを選択したら、イメージとストレージについても設定していきます。

「イメージ」とは、使用するOSのことで、Alibaba CloudではBSD、Linux系OSとWindowsServerから選択可能です。

Linuxディストリビューションについては「CentOS」、「Ubuntu」、「Debian」、「SUSE Linux」、「Open SUSE」といったものの他に、Alibaba独自のディストリビューションである「Aliyun Linux」を選択することができます。

また、ディストリビューションごとにバージョンを選択することもできますので、導入予定のシステムに合わせてイメージを選択しておきましょう。

Windows Serverについても、2008R2、2012、2016といったバージョンの選択が可能です。

今回は「Cent OS」のバージョン7.4、64bit版を選択しておきます。

「ストレージ」項目では、ECSインスタンスで使用するシステムディスクとデータディスクについて設定を行います。

ストレージについては、「Ultraクラウドディスク」と「SSDクラウドディスク」の2種類を選ぶことができますので、より高速なディスクアクセスが必要な場合には「SSDクラウドディスク」を選択すると良いでしょう。

全項目について入力が完了したら、ページ下部にある「次のステップ：ネットワーク」をクリックして次の設定に進みます。

##ECSインスタンスのネットワーク設定

![WS000005.JPG](https://qiita-image-store.s3.amazonaws.com/0/251354/490e8809-d78f-f417-121e-e46610e82880.jpeg)

ネットワークの設定については、以前の記事でVPCを作成していますので、デフォルトのVPCとVSwitchを利用します。

もし、別のネットワークを利用したい場合には、「ネットワークの選択方法」項目にある「コンソールに移動して作成する」を選択してください。

「ネットワーク課金タイプ」項目では、パブリックIPの割り当てと帯域に関する設定を行うことができます。

パブリックIPの割り当てについては自動で割り当てが行われますが、静的パブリックIPを利用したいという場合には個別に設定を行うことも可能です。

帯域については1Mbpsから200Mbpsまで1Mbps単位で設定できますので、システムのトラフィック量に合わせて帯域を選んでおきましょう。

注意点として、Alibaba Cloudでは外部への送信トラフィックに従量課金が行われる仕組みとなっており、単価は1GBあたり12.30円です。

帯域を多くとっているとそれだけトラフィックに対してマージンを確保することができますが、場合によっては予想外の費用が請求されてしまう可能性がありますので、不必要に大きな帯域を設定するのは避けておきましょう。

各項目について入力したら、ページ下部の「プレビュー」を選択してください。

ネットワーク項目では、ネットワークと課金、帯域の他に「セキュリティグループ」「ネットワークインターフェイス」についても設定が可能ですが、今回はSLBのテスト目的ですので、この部分については割愛します。

##ECSインスタンス構成の確認と注文
![WS000006.JPG](https://qiita-image-store.s3.amazonaws.com/0/251354/7b01f809-39ff-14d6-e0f5-c74f8310dfb8.jpeg)

「ネットワーク」の設定から「プレビュー」を選択すると、こちらの確認画面が表示されます。

確認画面ではシステムの基本構成の確認と購入サイクルの選択、利用規約への同意を行いますので、確認及び選択を行ったら「注文の作成」をクリックし、次のページで「支払い」をクリックすれば手続きは完了です。

「購入サイクル」項目では「1カ月」と「1年」を選ぶことができますが、今回はテストですので1カ月を選択し、自動更新のチェックボタンも解除しておきましょう。

もし、継続してECSインスタンスを使用したいという場合には自動更新にチェックを入れるか、毎月支払い手続きを行えば継続して使用することができます。

![WS000007.JPG](https://qiita-image-store.s3.amazonaws.com/0/251354/c480f646-0371-1939-3845-b69562d80a17.jpeg)

「支払い」が完了すれば1～2分でECSインスタンスが作成され、「ECS管理コンソール」の「概要」に作成したECSインスタンスが表示されますので、「マイリソース」内の「インスタンス2」と表示されている部分をクリックしてください。

![WS000009.JPG](https://qiita-image-store.s3.amazonaws.com/0/251354/51cee8fc-0799-4616-fe60-b226b6a3bbc1.jpeg)

すると、ページ下部にリージョン内に作成したECSインスタンスの一覧が表示されますので、今回作成したECSインスタンスの「インスタンスID/名前」部分にマウスポインタを移動させてください。

画像のように鉛筆マークが表示されますので、このアイコンをクリックして分かりやすい名前に変更しておきます。

今回は2つのECSインスタンスを作成してSLBを導入しますので、「SLBTest01」「SLBTest02」と名前を変更しました。


##SLBの動作確認に使用するApacheを導入する


ECSインスタンスを利用するためには、まず作成されたインスタンスにアプリケーションをデプロイしなければなりません。

そこで今回は、視覚的にSLBの動作を確認しやすいApacheを利用してECSインスタンスにウェブページをデプロイしておきます。

Apacheの導入については、Elastic IPをECSインスタンスにバインドしておく必要がありますので、まずはElastic IPのバインド設定を行っていきましょう。

![WS000011.JPG](https://qiita-image-store.s3.amazonaws.com/0/251354/e9cb2b21-8a8a-61b0-9090-6efee1d438b9.jpeg)

初期設定ではElastic IPがまだ発行されていない状態ですので、まずはコンソールの「アクション-詳細」から「Elastic IPアドレスのバインド」を選択し、項目に従って有効化しておきます。

この時ステータスが「実行中」のままではバインドが上手くいかない場合がありますので、「詳細」から一度ECSインスタンスを停止しておいてください。

Elastic IPのバインドが完了したら、「アクション-VNC」からバーチャルコンソールを起動し、ECSインスタンスにインストールされているOS（今回はCentOS）にログインします。

VNCへのログインでは、ECSインスタンスごとにパスワードが要求され、このパスワードは初回アクセス時のみ表示されますので、必ず安全な場所にパスワードを保管しておきましょう。

ログイン後はIDとパスワードを入力してApacheをインストールしていきます。

CentOSの場合なら、

sudo　yum install -y httpd

をコマンドラインに入力すれば自動でインストールが行われます。

Apacheのインストールが完了したら、

/var/www/html

に移動し、index.htmlの内容をSLBTest01には「SLB01」、SLBTest02は「SLB02」と変更してください。

index.htmlの変更後、コマンドラインで

systemctl start httpd

を入力し、Apacheを起動しておきます。

systemctl status httpd

を入力し、ステータスがActiveになっていればApacheが起動していますので、ブラウザにECSインスタンスのエラスティックIPを入力してそれぞれのindex.htmlが表示されているか確認しておきましょう。

#SLBインスタンスの作成手順
それでは、SLBの導入を行っていきましょう。

![WS000012.JPG](https://qiita-image-store.s3.amazonaws.com/0/251354/8e6143e3-5604-aebd-b47e-dec69b4dae80.jpeg)

まず、コンソールから「Server Load Balancer」を選択してロードバランサの設定ページに移動します。

![WS000013.JPG](https://qiita-image-store.s3.amazonaws.com/0/251354/88092b4f-e449-2fee-c239-458ec2299f1e.jpeg)

「インスタンス管理」画面が表示されたら、ページ上部からECSインスタンスを設置したリージョンを選択し、「ロードバランサの作成」をクリックしてください。

今回はECSインスタンスを日本リージョンで作成していますので、日本を選択してロードバランサの作成を行います。

![WS000014.JPG](https://qiita-image-store.s3.amazonaws.com/0/251354/b361698c-f19a-2894-4c9c-f08a4b6d3fac.jpeg)

各項目をチェックし、基本設定の「リージョン」が東京（日本）「ゾーンタイプ」がシングルゾーン、「プライマリ」が日本ゾーンAになっていることを確認しておきましょう。

また、「ネットワークとインスタンス」の部分では「インスタンス」をインターネットに変更しておきます。

後は購入数量を選択し、ページ右側の「今すぐ購入」を選択し、次ページで利用規約への同意等を行えばロードバランサの有効化は完了です。

##SLBインスタンスの設定

![WS000015.JPG](https://qiita-image-store.s3.amazonaws.com/0/251354/9f41bc82-de92-b46d-bb9b-3b5a7a079de4.jpeg)

ロードバランサの有効化後、SLBのコンソールにアクセスし、有効化したリージョンを選択するとこのように有効化されたロードバランサが表示されます。

ただ、このままでは少しわかりにくいため、表の「IDと名前」項目から作成したロードバランサにマウスポインタを移動させ、表示された鉛筆アイコンから名前を編集しておくと良いでしょう。

今回は作成したロードバランサの名称を「SLB01」にしています。

名称の変更が完了したら、「IDと名前」に表示されているロードバランサのID部分、図では青色で表示されている記号をクリックしてください。

![WS000017.JPG](https://qiita-image-store.s3.amazonaws.com/0/251354/5234c3b5-9fbc-6654-2e16-ebee50f300ec.jpeg)

この部分をクリックすると作成したロードバランサの詳細設定画面が表示されますので、左のメニューから「インスタンスリスナー」を選択し「リスナーの作成」を選択します。

![WS000018.JPG](https://qiita-image-store.s3.amazonaws.com/0/251354/4eda6810-cb05-2e58-ad9b-29fa920b9535.jpeg)

今回はチェックにApache（httpd）を使用しますので、「フロントエンドプロトコル」の項目には「TCP：80」を設定してください。

同様に「バックエンドプロトコル」についても「80」を入力しておきます。

この部分については、使用するアプリケーションによってポート設定が変わりますので、実際にシステムに導入する際には使用するポート番号を調べておきましょう。

「帯域幅」の項目については、ECSインスタンスで設定した帯域と同じ1Mbpsに設定していますが、実環境でもしロードバランサがボトルネックになった場合には、帯域を適宜調整してください。

「転送ルール」の項目はどのようにロードバランサが各サーバにトラフィックを分散させるかを決める設定です。

選択するルールによって負荷分散の方法が変わってきますので、環境に合わせて選ぶと良いでしょう。

今回は接続されているECSインスタンスへ平均的に負荷を分散させるラウンドロビンを使用します。

以上の項目を入力したら「次のステップ」を選択しヘルスチェック選択モードを設定していきます。

![WS000019.JPG](https://qiita-image-store.s3.amazonaws.com/0/251354/add0e992-e52d-dbf1-6b23-21adfc7811e4.jpeg)

ここでは、「ヘルスチェックのタイプ」を「TCP」に、「ポートの確認」については「80」にしてページ下部の「確認」を選択します。

![WS000020.JPG](https://qiita-image-store.s3.amazonaws.com/0/251354/a0846320-8d2c-f39a-ebc9-16d6e8daa207.jpeg)

続いては「バックエンドサーバー」の設定を行っていきます。

SLBのコンソール左側メニューから「バックエンドサーバー」を選択し、右ページの表の上部にある「追加されていないサーバー」をクリックしてください。

![WS000021.JPG](https://qiita-image-store.s3.amazonaws.com/0/251354/4a4b8ceb-99fe-ee2f-7c13-c0e9e5eebab7.jpeg)

すると、ECSインスタンスが表示されますので、ロードバランサに追加したいECSインスタンスを選択し、「バッチ追加」をクリックします。

![WS000022.JPG](https://qiita-image-store.s3.amazonaws.com/0/251354/501da10a-9f75-2fb2-de76-c54827c58b1a.jpeg)

バッチ追加をクリックすると、このような画面が表示されますので、そのまま「確認」を押してください。

![WS000023.JPG](https://qiita-image-store.s3.amazonaws.com/0/251354/5cc39bd8-da4a-9f43-eb29-1541c6220929.jpeg)

SLBのインスタンス管理画面に戻り、画面左上の「更新」ボタンをクリックし、ヘルスチェックが「正常」、ステータスが「実行中」になっていれば設定は完了です。

#SLBの動作を確認する
全ての設定が完了し、異常等が表示されていなければ動作確認を行います。

![WS000024.JPG](https://qiita-image-store.s3.amazonaws.com/0/251354/9e4375af-a16d-6ec0-47ff-2037de2e7149.jpeg)

まず、SLBのコンソールにログインし「インスタンスの詳細」を表示します。

詳細画面の「支払い情報」部分にSLBに設定されているIPアドレスが表示されていますので、このアドレスをコピーし、ブラウザのURL欄に入力してください。

すると、先ほどApacheインストール時にindex.htmlに設定した「SLB01」「SLB02」のどちらかの文字が表示されると思います。

文字が表示されたらリロードを繰り返し、両方の文字が表示されていることを確認してください。

アクセスの振り分けについてはランダムですので、何度繰り返せば両方の文字が表示されます。

2種類の文字列が確認できたら、Alibaba CloudにおけるECSインスタンスの導入と基本的なSLBの導入は完了です。

次回はAlibaba CloudにLAMP構成を導入する方法についてご紹介していきます。