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台しかないので複数台に増やしたいと思います。
また作っても良いのですが、面倒なので複製することにします。
こんな感じで複製できます。
現在起動しているインスタンスと異なったAZに配置するようにしましょう!耐障害性の考慮です。
さて、ページもどっちに振られてるのかわかるようにしてみましょう。
現在はhttp://<インスタンスのパブリックIP>/phpinfo.php
でPHPのサンプルが出るようになっていますが、HTMLページを作って設定します。
/var/www/html
配下に現在phpinfo.php
が配置してあると思うので以下のファイルに置き換えてください。
<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設定画面を開きます
画面中央の「維持設定」を編集します
ロードバランサによってい生成されたCookieによる維持を有効化を選択し、有効期間を60秒に設定します。
ポート構成のところで有効化されているのがわかるかと思います。
これで指定時間内に何回更新しても同じインスタンスにしか行けないと思います。
セッションの確立ができましたね!
###3.CLIでやってみる
ではこの操作をCLIでやってみましょう。
ELB_NAME='my-sample-elb'
POLICY_NAME='my-duration-cookie-policy'
COOKIE_TIME=60
ELB_PORT=80
aws elb create-lb-cookie-stickiness-policy --load-balancer-name ${ELB_NAME} --policy-name ${POLICY_NAME} --cookie-expiration-period ${COOKIE_TIME}
ロードバランサーが生成する Cookie の維持ポリシーを作成します。
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に均等に流します。
そう、両方のインスタンスの数が同じならいいのですが、数に偏りがあると均等に負荷分散されません。
その辺を考慮して、ゾーンをまたいで全インスタンスに均等にトラフィックを振り分けるってことをしてくれるのがこの機能です。ロードバランサーのクロスゾーン負荷分散を設定する
###参考