2012年10月13日土曜日

ELBの挙動確認(Enable Load Balancer Generated Cookie Stickiness)

スズキです。

前回、下記のようにCookieによるセッション維持を無効にした場合のELBの挙動を試したので
ELBの挙動確認(Disable Stikiness)
今回は、下記のようにELBが生成したCookieをもとにセッション維持する方法を有効にして
確認してみました。(テスト環境とテスト方法は上記の記事に記載しているものと同じです)


まずは、二つのIPアドレスの一方に対して確認してみます。
# cat /etc/hosts
xxx.xxx.xxx.xxx session-test.suz-lab.com
#yyy.yyy.yyy.yyy session-test.suz-lab.com

普通にアクセスすると、前回同様に一方のAZのEC2に対して交互にアクセスされることが
わかります。
# curl http://session-test.suz-lab.com/elb.php
ELB_IPADDRESS : 10.0.1.194
COOKIE_AWSELB : 
COOKIE_SUZLAB : 
EC2_IPADDRESS : 10.0.1.135
X_FOWARDED_FOR: zzz.zzz.zzz.zzz
# curl http://session-test.suz-lab.com/elb.php
ELB_IPADDRESS : 10.0.1.194
COOKIE_AWSELB : 
COOKIE_SUZLAB : 
EC2_IPADDRESS : 10.0.1.193
X_FOWARDED_FOR: zzz.zzz.zzz.zzz
つまり、セッション維持が行われていません。

それでは、ELBが生成したCookieを利用してアクセスしてみます。

まずはELBが生成したCookieを下記のように取得します。
# curl -c cookie.txt http://session-test.suz-lab.com/elb.php
ELB_IPADDRESS : 10.0.1.194
COOKIE_AWSELB : 
COOKIE_SUZLAB : 
EC2_IPADDRESS : 10.0.1.135
X_FOWARDED_FOR: zzz.zzz.zzz.zzz

すると下記のようなCookie(AWSELB)が生成されていることがわかります。
# cat cookie.txt 
session-test.suz-lab.com  FALSE  /  FALSE  1350074674  SUZLAB  TEST
session-test.suz-lab.com  FALSE  /  FALSE  1350071373  AWSELB  55FD...
(このCookieに振り分け先EC2の情報が書かれているようです)

そして、次のようにCookieを利用してアクセスしてみます。
# curl -b cookie.txt http://session-test.suz-lab.com/elb.php
ELB_IPADDRESS : 10.0.1.194
COOKIE_AWSELB : 55FD...
COOKIE_SUZLAB : TEST
EC2_IPADDRESS : 10.0.1.135
X_FOWARDED_FOR: zzz.zzz.zzz.zzz
# curl -b cookie.txt http://session-test.suz-lab.com/elb.php
ELB_IPADDRESS : 10.0.1.194
COOKIE_AWSELB : 55FD...
COOKIE_SUZLAB : TEST
EC2_IPADDRESS : 10.0.1.135
X_FOWARDED_FOR: zzz.zzz.zzz.zzz
常に同じEC2(10.0.1.135)に振り分けられていることがわかります。

次に、ELBのもう一方のIPアドレスでも確認してみます。
# cat /etc/hosts
#xxx.xxx.xxx.xxx session-test.suz-lab.com
yyy.yyy.yyy.yyy session-test.suz-lab.com

先ほどと同じCookieでアクセスしてみます。
# curl -b cookie.txt http://session-test.suz-lab.com/elb.php
ELB_IPADDRESS : 10.0.1.194
COOKIE_AWSELB : 55FD...
COOKIE_SUZLAB : TEST
EC2_IPADDRESS : 10.0.1.135
X_FOWARDED_FOR: zzz.zzz.zzz.zzz
# curl -b cookie.txt http://session-test.suz-lab.com/elb.php
ELB_IPADDRESS : 10.0.1.194
COOKIE_AWSELB : 55FD...
COOKIE_SUZLAB : TEST
EC2_IPADDRESS : 10.0.1.135
X_FOWARDED_FOR: zzz.zzz.zzz.zzz
やはり先程と同じEC2(10.0.1.135)に振り分けられていることがわかります。
また、今度はアクセスしているELB(10.0.1.194)も同じになっています。
(ELBのDNS名に振られたIPアドレスとAZの話はどうなった?)

ちなみに、ELBが生成したCookieをもとにセッション維持する方法は下記のように
動作しています。
期間ベースのセッション維持の有効化

(1)ロードバランサーがリクエストを受け取ると、まずこの Cookie がリクエスト内に
あるかどうかを調べます。

(2)ある場合は、Cookie で指定されたアプリケーションインスタンスにリクエストが
送信されます。

(3)Cookie がない場合、ロードバランサーは、既存の負荷分散アルゴリズムに基いて
アプリケーションインスタンスを選択します。

(4)同じユーザーからの以降のリクエストをそのアプリケーションインスタンスに
バインドするため、応答に Cookie が挿入されます。
図にするとこんな感じでしょうか?


実際にTelnetを使ってアクセスしてみると、Cookieがない場合はELBがHTTPレスポンスで
Cookieをセットするように振舞っていることがわかります。
# telnet session-test.suz-lab.com 80
Trying zzz.zzz.zzz.zzz...
Connected to session-test.suz-lab.com.
Escape character is '^]'.
GET /elb.php HTTP/1.0

HTTP/1.1 200 OK
Cache-control: no-cache="set-cookie"
Content-Type: text/plain; charset=UTF-8
Date: Fri, 12 Oct 2012 20:31:53 GMT
Server: Apache/2.2.15 (CentOS)
Set-Cookie: SUZLAB=TEST; expires=Fri, 12-Oct-2012 21:31:53 GMT
Set-Cookie: AWSELB=55FD...;PATH=/;MAX-AGE=300
X-Powered-By: PHP/5.3.17
Content-Length: 118
Connection: Close

ELB_IPADDRESS : 10.0.1.194
COOKIE_AWSELB : 
COOKIE_SUZLAB : 
EC2_IPADDRESS : 10.0.1.135
X_FOWARDED_FOR: zzz.zzz.zzz.zzz
Connection closed by foreign host.

X-Forwarded-Forに複数のIPアドレスがあらわれるパターンがわからない...
--------
http://www.suz-lab.com

0 コメント: