2012年10月13日土曜日

ELBの挙動確認(Disable Stikiness)

スズキです。

こんな感じの構成を前提としています。


今回は、ELBのCookieによるセッション維持を無効にして試してみます。


まずは、ELBにふられているIPアドレスの確認です。
# nslookup test-000000000.ap-northeast-1.elb.amazonaws.com
Name: test-000000000.ap-northeast-1.elb.amazonaws.com
Address: xxx.xxx.xxx.xxx
Name: test-000000000.ap-northeast-1.elb.amazonaws.com
Address: yyy.yyy.yyy.yyy
二つふられていることがわかります。

このELB経由で、下記のPHPにアクセスして挙動を確認してみます。
<?php
header("Content-type: text/plain");
print("ELB_IPADDRESS : " . $_SERVER["REMOTE_ADDR"]          . "\n");
print("COOKIE_AWSELB : " . $_COOKIE["AWSELB"]               . "\n");
print("COOKIE_SUZLAB : " . $_COOKIE["SUZLAB"]               . "\n");
print("EC2_IPADDRESS : " . $_SERVER["SERVER_ADDR"]          . "\n");
print("X_FOWARDED_FOR: " . $_SERVER["HTTP_X_FORWARDED_FOR"] . "\n");
if(!isset($_COOKIE["SUZLAB"])) {
  setcookie("SUZLAB", "TEST", time() + 3600);
}
?>
特に、ELB_IPADDRESSとEC2_IPADDRESSの値に注目です。

まずは、二つの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.0.113
COOKIE_AWSELB : 
COOKIE_SUZLAB : 
EC2_IPADDRESS : 10.0.0.191
X_FOWARDED_FOR: zzz.zzz.zzz.zzz
# curl http://session-test.suz-lab.com/elb.php
ELB_IPADDRESS : 10.0.0.113
COOKIE_AWSELB : 
COOKIE_SUZLAB : 
EC2_IPADDRESS : 10.0.0.109
X_FOWARDED_FOR: zzz.zzz.zzz.zzz
ただしELBのIPアドレスは同じで、EC2と同じAZのものとなっています。

次に、ELBのもう一方の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のIPアドレスも、やはり同じです。ただし先ほどのIPアドレスとは変わっており、
こちらのEC2と同じAZのものとなっています。

ということで、ELBにふられているIPアドレスはAZごとに少なくても一つ用意され、
アクセスされたIPアドレスが所属するAZのEC2に優先的にふられているのでは?
と妄想できます。(ドキュメントに書いてあるかも?)

図にするとこんな感じでしょうか?


ELB間の矢印は、サーバーワークスさんの下記ブログに書かれたELBの挙動
(一方のAZのEC2障害)を考慮したものです。
ELBのローカルIPを2つ取得するケース
なので、負荷テストが難しい...
--------
http://www.suz-lab.com

0 コメント: