エンジニアもどきが学ぶAWS:ELBを使って負荷分散させたい

Elastic Load Balancing は、アプリケーションへのトラフィックを複数のターゲット (Amazon EC2 インスタンス、コンテナ、IP アドレスなど) に自動的に分散します。Elastic Load Balancing は、変動するアプリケーショントラフィックの負荷を、1 つのアベイラビリティーゾーンまたは複数のアベイラビリティーゾーンで処理できます。Elastic Load Balancing では、3 種類のロードバランサーが用意されています。これらはすべて、アプリケーションの耐障害性を高めるのに必要な高い可用性、自動スケーリング、堅牢なセキュリティを特徴としています。
こちらのページより引用)

 

AWSの無償枠を使って任意のIndex.htmlを正常にブラウザ表示させている今日この頃。

いっそこのままHPも作ってみちゃう?そうしちゃう?など安易な考えが浮かびましたが、せっかく購入した書籍があるので寄り道せず体系的に学んでいきましょう。

今回実施するのは冒頭で書かせていただいたELB、と呼ばれる機能を使った負荷分散です。

今はテスト環境なので一気にアクセス数が増加することはありませんが、法人の公式HPやイベント告知ページなどの所謂”本番環境”では単体のWebサーバだけで運用することは稀です。

これはWebサーバに関わらずアプリケーションサーバやデータベースサーバについても同様ですね。

 

駅の改札機なんかで例えるとわかりやすいでしょうか。

2016年度駅別乗車人数第一位の新宿駅に改札機がひとつしかなかったらどうなるでしょう?

きっとオンシーズンのディズニーランドも驚く程の長蛇の列が形成され、会社に着く頃には日が傾き始めているかもしれません。

また、全ての人がひとつの改札機で乗り降りしているため、もしその改札機が故障してしまって通れなくなってしまった場合は阿鼻叫喚の事態となることが安易に予想できます。

なので新宿駅には様々な改札口が存在しており、改札機の数を多くすることによって通る人と改札機そのものに掛かる負荷を分散させているのです。

このように、システムが継続して稼働できる能力のことを可用性と言います。

負荷分散をさせることにより可用性を担保していくわけですね。

 

というわけで導入が少し長めになりましたが張り切って実装していきましょう。

 

 


 

 

 

目標

ELBを使ってWebサーバを負荷分散させる

使用したツール/サービス

  • TeraTerm
  • AWS EC2

参考書籍

Amazon Web Servicesではじめる新米プログラマのためのクラウド超入門 (CodeZine BOOKS)

 

 

 


 

 

今回は新たに二つのWebサーバを立ち上げて、クライアントからのアクセスをそれぞれに分散させていきたいと思います。

ではまた一からインスタンスを立ち上げるのか?

答えはノーです。

AWSには同構成のサーバを立ち上げる際に役立つ機能が備わっています。

まずは今稼働しているWebサーバを一度停止しましょう。

インスタンスを右クリック→[停止]を選択します。

インスタンスの状態が[stopped]に変わったことを確認し、再度右クリック→[イメージ]→[イメージの作成]を選択します。

これから作成するイメージに対して名前と説明を入力し、[イメージの作成]を選択。

たったこれだけで既存インスタンスのイメージを作ることができます。

 

 

 

早速作成されたイメージを確認しましょう。

メニュー左側の[AMI]をクリックします。

AMIイメージが正常に作成されていることを確認できました。

 

後はEC2インスタンスを新規作成する際、AMIイメージを今回作成したイメージに指定すれば出来上がり。

わざわざhttpdをインストールしてサービスを開始する必要はありません。

AWS凄い。

 

今回は[http-node1]と[http-node2]というインスタンスを立ち上げてみました。

動作検証をする関係で、それぞれのIndex.htmlにこんな文言を追加します。

上記は[http-node1]のIndex.html。

これでブラウザからアクセスをする際に”今どちらのWebサーバを見ているのか”がわかります。

 

 

さて、それでは続いてELBの新規作成に参ります。

メニューから[ロードバランサー]をクリック。

[ロードバランサーの作成]で新規作成をしていきます。

種類の選択では一番右の[Classic Load Balancer]を選択。

 

 

 

名前やタグを付けたりするところはインスタンスの作成と変わらないですね。

こちらのステップでは証明書の設定ができるようです。

httpsを想定しているのであれば別途設定が必要ですが、今回はhttpなので既存のまま次へ。

インスタンスの作成画面では先ほど作った[http-node1]および[http-node2]を選択します。

これで基本的な設定は完了です。

 

 

 

早速ELBの設定情報を見に行きましょう。

[状態]のステータスが[InService]になっていればELBが正常に動作している、ということになります。

 

さて、肝心のアクセス先はどこになるのか?ということになりますが、作成したELBの[説明]タブにある[DNS名]がURLとなります。

これをコピペしてブラウザからアクセスするとhttp-node1もしくはhttp-node2のIndex.htmlが表示されますが、アクセスするタイミング毎に表示されるページが切り替わっていれば成功です。

※僕はブラウザの更新をぽちぽち押して確認できました。

今回は動作検証のためhttp-node1とhttp-node2で違う内容のIndex.htmlにしていますが、通常は負荷分散させている対象のページ内容は同一になるのでクライアント側は何も意識せずとも勝手に負荷分散されてアクセスできている…ということになります。

いやあ…素晴らしい。AWS素晴らしいですね。

テスト環境なので規模としては本番環境に届きませんが、こうも簡単に負荷分散が出来るとは…。

お次はIPとドメインの設定をしていきます。

 

ではまた次回っ。

AWS

Posted by ふゆ