Cross-Zone Load Balancing を有効にしない理由がない件

  • 40
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

今北産業

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マイスターシリーズ
のスライドを元に改変)

CrossZoneLoadBalancing.jpg

設定については、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 にチェックが入ってるので、そのまま作れば大丈夫です。