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障害)を考慮したものです。

ELBのローカルIPを2つ取得するケース

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら