今北産業
Cross-Zone Load Balancing は
今すぐ
設定すべき
kwsk
これまで
2013年11月まで、AmazonEC2 の ELB (Elastic Load Balancing) を使うとき、こんなことに注意する必要がありました。
AZ (Availability Zone) 配下の EC2 インスタンス台数は均等化を推奨
AWSマイスターシリーズにも出てくる、有名な注意点です。
推奨されていることを無視すると何が起こるかというと、アクセスの偏りが発生します。
ELB を立てると、ご存じの通り elbname-1234567890.ap-northeast-1.elb.amazonaws.com
といったホスト名が振られます。その中に、ap-northeast-1a のインスタンスを1台、ap-northeast-1c のインスタンスを5台ぶら下げたとします。すると、1a のインスタンスには 1c の5倍のアクセスが集中します。
なぜかというと、elbname-1234567890.ap-northeast-1.elb.amazonaws.com
にアクセスした時、1a に行く確率と 1c に行く確率が同じだからです。elb のホスト名を解決する際に、DNS ラウンドロビンで、1a のロードバランサか、1c のロードバランサかのどちらかの IP 等確率で返ってきます。どちらの AZ に何台のインスタンスがあるかに関わらず、です。なので、50% の確率でインスタンスが1台しかない 1a に、50% の確率でインスタンスが5台ある 1c にアクセスが割り振られ、結果として 1a のインスタンスには5倍のアクセスが集中することになります。
これから
しかし、11月の神アップデートにて、このような事態に悩まされることは無くなりました。Cross-Zone Load Balancing のリリースです。
ホスト名解決の際に、どちらかのロードバランサの IP が等確率で返ってくるところは、これまでと同じです。違うのはその先で、1a のロードバランサの IP が返ってきたとしても、その先の負荷分散の対象が 1a の1台と、1c の5台全てになります。
図にするとこんな感じです(AWSマイスターシリーズ
のスライドを元に改変)
設定については、AWS CLI を使ってサクッできます。
aws elb modify-load-balancer-attributes --load-balancer-name yourelbname --load-balancer-attributes '{"CrossZoneLoadBalancing":{"Enabled":true}}' --region ap-northeast-1
手持ちのロードバランサ一括設定するならこんな感じ(region設定は略)。
for lb in $(aws elb describe-load-balancers --query="LoadBalancerDescriptions[].LoadBalancerName" --output text); do
echo $lb
aws elb modify-load-balancer-attributes --load-balancer-name $lb --load-balancer-attributes '{"CrossZoneLoadBalancing":{"Enabled":true}}'
done
参考:
デメリット
RDS に対する AZ 間の通信コストなどがかかるといえばかかります。
しかし、Cross-Zone Load Balancing は、そういったデメリットを補って余りある機能だと思うので、なるべく有効にしたほうがいいと思います。
まとめ
さぁ、今すぐ Cross-Zone Load Balancing を有効にしよう!
新規で ELB を立てる時は、最初から Enable Cross-Zone Load Balancing
にチェックが入ってるので、そのまま作れば大丈夫です。