Edited at

AWS ELB(Elastic Load Balancer)を使うときの注意点

More than 3 years have passed since last update.


はじめに

ELB導入時に注意すべき点があったので、紹介します。

特に注意すべき、以下の点について紹介します。


  • KeepAliveの設定

  • リダイレクトの設定

  • ELBを配置するVPCサブネットの大きさ

  • ELBを配置するVPCサブネットのACL


WebサーバにKeepAliveを設定する

ELBからWebサーバへ接続する際に、TCP KeepAlive機能を有効にすることで、TCPコネクションを維持し、接続効率を向上させることができます。

例えば、Apacheでは以下の設定項目を修正します。

Keepaliveのタイムアウト時間は、長めに取ることで効果を得ることができます。


httpd.conf

KeepAlive On

KeepAliveTimeout [ELBのタイムアウト時間より長い時間]

検索すると120秒という文献が多く出てきますが、ちょっと古い記事がほとんどです。

もしかすると、昔はタイムアウト時間が60秒に固定されていたのかもしれませんが、現在はタイムアウト時間も設定することができるため、サービスに応じて変更すればよいと思います。

http://kunihikokido.tumblr.com/post/55651256550/amazon-elb-%E3%82%92%E4%BD%BF%E3%81%86%E3%81%A8%E3%81%8D%E3%81%AFkeepalive-on-timeout-120


Webサーバでのリダイレクトの設定

例えば、正規のドメインへリダイレクトしたいとき、HTTP->HTTPSにリダイレクトしたいときなど、Webサーバ側でリダイレクトを行う事があると思います。

このとき、ELBのヘルスチェックでアクセスしたときに、リダイレクトレスポンスを返してしまうと、サーバが落ちていると判定されてしまいます。

そのため、ELBのヘルスチェックからのアクセスでは、リダイレクトをしないように工夫しましょう。

Apacheのmod_rewriteを使うときであれば、RewirteCondでUser-Agentを判定して、リダイレクトを行わないようにすることができます。


httpd.conf

  <IfModule mod_rewrite.c>

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Port} !^443$
RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker # User-Agentで判定する
RewriteRule ^(.*)?$ https://example.net$1 [R=301,L]
</IfModule>


ELBを配置するVPCサブネットの大きさ

ELBはアクセス数に応じてオートスケールアウトをします。

このとき、ロードバランサの台数が増加するので、ELBで利用するVPCのプライベートIPアドレスも増加します。

ELBを配置するサブネットが小さすぎるとスケールアウトできなくなるので、サービスの規模に応じて、サブネットは少し大きめに設計する方がよさそうです。


ELBを配置するVPCサブネットのACL

ELBを配置するサブネットのACLでは、WebサーバからTCP1024-65535のインバウンドを許可しなければなりません。

Linuxの標準的なエフェメラルポートは32768-65535ですが、ELBで利用するポートは非常に広いため、設定に注意が必要です。

http://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/VPC_ACLs.html#VPC_ACLs_Ephemeral_Ports