Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
65
Help us understand the problem. What is going on with this article?
@okamu_

【超入門】負荷分散をAWSのロードバランサーを使ってやってみよう

More than 3 years have passed since last update.

AWSのロードバランサーを使って負荷分散をする(初級編)

この記事は、AWSのELBを使ったことがないけど、ロードバランサー?負荷分散!?という方向けの記事です。

ロードバランサーの役割

大きく分けて二つの機能があります。
1、複数台webサーバーを複数台用意し、負荷を分散させることができます。
2、メンテナンスや障害時には切り離しを行うことができます。

image.png

AWSのロードバランサーの種類

  • ELB (Classic Load Balancer)
    • ALBより前からあった設定が基本的にしやすいロードバランサー
  • ALB (Application Load Balancer)
    • パスベースルーティング機能など豊富になったようなもの
  • NLB (Network Load Balancer)
    • 長時間接続やリージョン内とリージョンを跨いだフェイルオーバーが可能になり、さらに進化したみたいな感じ

早速利用してみる

  • 今回は概念としてわかりやすく、設定しやすいELBを使って見ましょう!

EC2インスタンスを複数用意する

  • 同じアプリケーションサーバーを複数用意します。この時おすすめなのは、現段階で動いているインスタンスのイメージ(AMI) を作成し、そのAMIから新しいインスタンスを起動するとほぼ同じアプリケーションサーバーを立てることができます。
  • このへんの記事がわかりやすいかと思います

ロードバランサーを作成する

インスタンスを複数起動しましたら、さっそくELBを作成しましょう

  • ec2の画面からロードバランサーを選びます

スクリーンショット 2017-10-30 21.20.36.png

  • ロードバランサーの作成を押して、ELBを選びます

スクリーンショット 2017-10-30 21.28.20.png

  • ロードバランサーの名前とプロトコルを選択して次へ進みます。
    スクリーンショット 2017-10-30 21.44.35.png

  • セキュリティグループの設定を行って次へ進みます。

スクリーンショット 2017-10-30 21.44.59.png

ヘルスチェックの設定をする

  • ヘルスチェックというのは、サーバーが生きているか確認してくれる機能のことで、生きているか確認できるパスを指定します。
  • 静的サイトであれば/index.htmlでもいいと思いますが、動的サイトなどはDBに負荷がかかるかもしれないので、チェック用のパスを設定するのが良いと思います。

  • 高度な設定では、間隔や何回成功・失敗で正常とするか非正常とするかの設定ができます。

スクリーンショット 2017-10-30 21.45.17.png

ハマりポイント!!

突然サーバーが見えなくなったしエラーも返さない!!
っとなる場合がありますが、おおよそはアプリケーションエラーでヘルスチェックに失敗して自動的に非正常ステータスとなりELBがルーティングを切っている状態になります。
突然サーバーが見えなくなったしエラーも返さない場合は、再起動するのではなくELBを疑って見ましょう!!

その他設定

  • instanceの設定

    • ここで先ほど複数作成したEC2インスタンスを登録します。
  • tagの設定をする

    • nameに対して適当なLBの名前を入れておきましょう。いつか役に立つ時がきます。 スクリーンショット 2017-10-30 21.45.47.png
  • 確認して作成しましょう!!

  • ロードバランサーが1つ追加されているとおもいます!!

動作確認する

  • 作成後しばらくは、unhealthy(非正常)の状態になっていますが、ヘルスチェックが通りactive(正常)になるとELBのAレコードでサイトが閲覧できるようになります。

ロードバランシングされているか確認する

  • この作業は大事です、できていると思いきやできてない場合がありますので確認は行いましょう
  1. それぞれ全てのEC2インスタンスにSSHする、nginxのaccess.logなどをtailfするなどして待機します。
  2. 先ほどのELBのAレコードでアクセスし、アクセスからバランシングされているかを確認する

この確認作業を行ったら、EC2インスタンスは80番ポートは開ける必要がないですので、EC2のセキュリティグループで閉じておきます。また、ELBからのアクセスを許可するようにするため、ELBにつけているセキュリティグループのIDを設定すると良いでしょう。

おまけ

1台であってもEC2インスタンスの前には ELB を置きましょう

EC2 インスタンスのパブリック IP に CNAME を向けて公開するのはあまりよくないです。
ElasticIPを設定していなければ、システムリブートのメンテナンスの時に、IPが変わってしまうのでDNSも変更しないといけなくなります。
ELB を置いておけば無停止でサーバを入れ替えることができるので、ロードバランサ機能が不要でも使うことがおすすめです。

参考記事

65
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
okamu_
no plan inc. CEO 元フリーランスエンジニア/ iOS / サーバーサイド / 共同創業 / 福岡出身 https://qiita.com/organizations/noplan-inc
noplan-inc
no plan株式会社は、Webサイト、iOSアプリ、AndroidアプリなどWebサービス全般の開発から運用をワンストップで行っています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
65
Help us understand the problem. What is going on with this article?