ロードバランサーの機能のうち、セッション維持は重要な役割な一つです。セッション維持を実現するための方法としては主に4つあります。

  • ソースIPアドレス利用
  • Cookie利用
  • SSL Session ID利用
  • URL利用

一番手軽なのはソースIPアドレスを利用する方法なのですが、NAT(Network Address Translation)環境では全てのマシンが同じIPアドレスに見えてしまうのでこの方法が使えない場合も多いと思います。そんなわけで私はこれまでCookieを利用する方法をよく使っていました。しかし最近になってCookieを利用したセッション維持が失敗するケースが増えてきました。それはなぜでしょうか?

Cookieを利用する方法の問題点

Cookieを利用したロードバランスでは、セッション情報をCookieに書き込みます。ところでCookieの仕様をRFC2965で確認してみると

  • at least 300 cookies(少なくとも300個のCookieをサポートすること)
  • at least 4096 bytes per cookie(少なくとも4096バイトのCookieをサポートすること)
  • at least 20 cookies per unique host or domain name(少なくともユニークホストかドメインで20個のCookieをサポートすること)

と記されています。ということは、WEBブラウザーを使っているうちに一つのユニークホストもしくはドメインで20個以上のCookieが使われるか4KBの容量を超えてCookieが使われるとCookieを利用したロードバランスが失敗する可能性が出てきます。

解決方法はあるか?

Cookieを利用したセッション維持を行うのにWEBブラウザーのCookie領域が使えないのであればそもそもCookieを利用したセッション維持が成り立ちません。もしそれが致命的なのであれば、URLを利用したセッション維持方法に変える等根本的な解決方法を模索する必要がありそうです。

■変更履歴
Cookieを利用したセッション維持に失敗する理由として当初はタブブラウザーの問題と記しましたが、著者の誤解であることが判明しましたので、訂正させていただきます。申し訳ありませんでした。[2008/08/04 12:50]