ELBの挙動を確認するにあたり、以下構成を前提として進めます。
今回は、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にアクセスして挙動を確認してみます。
この際、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障害)を考慮したものです。