はじめに
ELB導入時に注意すべき点があったので、紹介します。
特に注意すべき、以下の点について紹介します。
- KeepAliveの設定
- リダイレクトの設定
- ELBを配置するVPCサブネットの大きさ
- ELBを配置するVPCサブネットのACL
WebサーバにKeepAliveを設定する
ELBからWebサーバへ接続する際に、TCP KeepAlive機能を有効にすることで、TCPコネクションを維持し、接続効率を向上させることができます。
例えば、Apacheでは以下の設定項目を修正します。
Keepaliveのタイムアウト時間は、長めに取ることで効果を得ることができます。
KeepAlive On
KeepAliveTimeout [ELBのタイムアウト時間より長い時間]
検索すると120秒という文献が多く出てきますが、ちょっと古い記事がほとんどです。
もしかすると、昔はタイムアウト時間が60秒に固定されていたのかもしれませんが、現在はタイムアウト時間も設定することができるため、サービスに応じて変更すればよいと思います。
Webサーバでのリダイレクトの設定
例えば、正規のドメインへリダイレクトしたいとき、HTTP->HTTPSにリダイレクトしたいときなど、Webサーバ側でリダイレクトを行う事があると思います。
このとき、ELBのヘルスチェックでアクセスしたときに、リダイレクトレスポンスを返してしまうと、サーバが落ちていると判定されてしまいます。
そのため、ELBのヘルスチェックからのアクセスでは、リダイレクトをしないように工夫しましょう。
Apacheのmod_rewriteを使うときであれば、RewirteCondでUser-Agentを判定して、リダイレクトを行わないようにすることができます。
<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で利用するポートは非常に広いため、設定に注意が必要です。