AWSのロードバランサーを使って負荷分散をする(初級編)
この記事は、AWSのELBを使ったことがないけど、ロードバランサー?負荷分散!?という方向けの記事です。
ロードバランサーの役割
大きく分けて二つの機能があります。
1、複数台webサーバーを複数台用意し、負荷を分散させることができます。
2、メンテナンスや障害時には切り離しを行うことができます。
AWSのロードバランサーの種類
- ELB (Classic Load Balancer)
- ALBより前からあった設定が基本的にしやすいロードバランサー
- ALB (Application Load Balancer)
- パスベースルーティング機能など豊富になったようなもの
- NLB (Network Load Balancer)
- 長時間接続やリージョン内とリージョンを跨いだフェイルオーバーが可能になり、さらに進化したみたいな感じ
早速利用してみる
- 今回は概念としてわかりやすく、設定しやすいELBを使って見ましょう!
EC2インスタンスを複数用意する
- 同じアプリケーションサーバーを複数用意します。この時おすすめなのは、現段階で動いているインスタンスのイメージ(AMI)
を作成し、そのAMIから新しいインスタンスを起動するとほぼ同じアプリケーションサーバーを立てることができます。 - このへんの記事がわかりやすいかと思います
ロードバランサーを作成する
インスタンスを複数起動しましたら、さっそくELBを作成しましょう
- ec2の画面からロードバランサーを選びます
- ロードバランサーの作成を押して、ELBを選びます
- ロードバランサーの名前とプロトコルを選択して次へ進みます。
- セキュリティグループの設定を行って次へ進みます。
ヘルスチェックの設定をする
-
ヘルスチェックというのは、サーバーが生きているか確認してくれる機能のことで、生きているか確認できるパスを指定します。
-
静的サイトであれば/index.htmlでもいいと思いますが、動的サイトなどはDBに負荷がかかるかもしれないので、チェック用のパスを設定するのが良いと思います。
-
高度な設定では、間隔や何回成功・失敗で正常とするか非正常とするかの設定ができます。
ハマりポイント!!
突然サーバーが見えなくなったしエラーも返さない!!
っとなる場合がありますが、おおよそはアプリケーションエラーでヘルスチェックに失敗して自動的に非正常ステータスとなりELBがルーティングを切っている状態になります。
突然サーバーが見えなくなったしエラーも返さない場合は、再起動するのではなくELBを疑って見ましょう!!
その他設定
-
instanceの設定
- ここで先ほど複数作成したEC2インスタンスを登録します。
-
tagの設定をする
- nameに対して適当なLBの名前を入れておきましょう。いつか役に立つ時がきます。
- 確認して作成しましょう!!
- ロードバランサーが1つ追加されているとおもいます!!
動作確認する
- 作成後しばらくは、
unhealthy
(非正常)の状態になっていますが、ヘルスチェックが通りactive
(正常)になるとELBのAレコードでサイトが閲覧できるようになります。
ロードバランシングされているか確認する
- この作業は大事です、できていると思いきやできてない場合がありますので確認は行いましょう
- それぞれ全てのEC2インスタンスにSSHする、nginxのaccess.logなどを
tailf
するなどして待機します。 - 先ほどのELBのAレコードでアクセスし、アクセスからバランシングされているかを確認する
この確認作業を行ったら、EC2インスタンスは80番ポートは開ける必要がないですので、EC2のセキュリティグループで閉じておきます。また、ELBからのアクセスを許可するようにするため、ELBにつけているセキュリティグループのIDを設定すると良いでしょう。
おまけ
1台であってもEC2インスタンスの前には ELB を置きましょう
EC2 インスタンスのパブリック IP に CNAME を向けて公開するのはあまりよくないです。
ElasticIPを設定していなければ、システムリブートのメンテナンスの時に、IPが変わってしまうのでDNSも変更しないといけなくなります。
ELB を置いておけば無停止でサーバを入れ替えることができるので、ロードバランサ機能が不要でも使うことがおすすめです。