Help us understand the problem. What is going on with this article?

ELB入門 ELBのスティッキーセッションを試してみる

More than 3 years have passed since last update.

ELBネタを少し追加でやってみます。
ELBのスティッキーセッションを有効にしてみましょう。

0.スティッキーセッション

ELBはデフォルトでは配下のinstanceに均等に負荷分散するため、一定のinstanceにずっと繋ぎに行くといったことはできません。
しかし、Cookie情報を保持させ、一定のinstanceと通信を続けさせることができます。
スティッキーセッションを確立させる方法は2種類あります。

- 時間ベースのセッション維持(ELBデフォルトのセッション維持機能)

- アプリケーション制御によるセッション維持

今回はELBの標準機能を使った時間ベースのスティッキーセッションの設定方法を見ていきましょう。

1.準備

ELBの準備をします。
ELBの設定方法はAWS入門 ELB〜マネジメントコンソールとCLI〜[2015年10月版]を参考にしてください。

使用するWEBサーバはAWS入門 EC2〜マネジメントコンソールとUserData〜[2015年10月版]で作ったものを流用します。

ただし、その構成だとWEBサーバが1台しかないので複数台に増やしたいと思います。
また作っても良いのですが、面倒なので複製することにします。

スクリーンショット_2015-10-12_0_01_12.jpg
こんな感じで複製できます。
現在起動しているインスタンスと異なったAZに配置するようにしましょう!耐障害性の考慮です。
さて、ページもどっちに振られてるのかわかるようにしてみましょう。
現在はhttp://<インスタンスのパブリックIP>/phpinfo.phpでPHPのサンプルが出るようになっていますが、HTMLページを作って設定します。

/var/www/html配下に現在phpinfo.phpが配置してあると思うので以下のファイルに置き換えてください。

index.html
<html>
    <head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <title>ELBのステッキーセッションを試す</title>


    </head>
    <body>
        <p>
            instance-001
        </p>
    </body>
</html>

インスタンスを2台使うので<body>内の記述をどっちのインスタンスかわかるようにしておきましょう。
さて、設定が終わったら複製したインスタンスをELBに追加してみてください。
2台のインスタンスのヘルスチェックがOKならELBのエンドポイントにブラウザからつなぎに行ってください。
何回かF5を押すと両方のインスタンスに通信が振り分けられていることがわかるかと思います。

2.スティッキーセッションの有効化

ELB設定画面を開きます

スクリーンショット_2015-10-12_0_14_25.jpg
画面中央の「維持設定」を編集します
スクリーンショット_2015-10-12_0_14_43.jpg
ロードバランサによってい生成されたCookieによる維持を有効化を選択し、有効期間を60秒に設定します。

スクリーンショット_2015-10-12_0_15_04.jpg
ポート構成のところで有効化されているのがわかるかと思います。
これで指定時間内に何回更新しても同じインスタンスにしか行けないと思います。
セッションの確立ができましたね!

3.CLIでやってみる

ではこの操作をCLIでやってみましょう。

変数
ELB_NAME='my-sample-elb'
POLICY_NAME='my-duration-cookie-policy'
COOKIE_TIME=60
ELB_PORT=80
create-lb-cookie-stickiness-policy
aws elb create-lb-cookie-stickiness-policy --load-balancer-name ${ELB_NAME} --policy-name ${POLICY_NAME} --cookie-expiration-period ${COOKIE_TIME}

ロードバランサーが生成する Cookie の維持ポリシーを作成します。

set-load-balancer-policies-of-listener
aws elb set-load-balancer-policies-of-listener --load-balancer-name ${ELB_NAME} --load-balancer-port ${ELB_PORT} --policy-names ${POLICY_NAME}

ロードバランサーのセッション維持を有効にします。


以上でELBによるセッション維持の方法を終わります。
実際に使う際にはアプリケーションからセッションを設定する方が使うかとは思いますが、ELB単体の機能を使っても可能だということを見てい行きました。


番外(クロスゾーン負荷分散)

SSの中にクロスゾーン負荷分散という項目があったと思います。
なんだかわかりますか?

ELBははデフォルトで複数のAZにまたいで作ると両方の中に存在するインスタンスの数は気にせず、トラフィックを2つのAZに均等に流します。
そう、両方のインスタンスの数が同じならいいのですが、数に偏りがあると均等に負荷分散されません。
その辺を考慮して、ゾーンをまたいで全インスタンスに均等にトラフィックを振り分けるってことをしてくれるのがこの機能です。ロードバランサーのクロスゾーン負荷分散を設定する


参考

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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした