connection と persistence

これも微妙にややこしい話なんだよなあ。

SOL7964: Persistence may fail for subsequent requests on Keep-Alive connections

HTTP Keep-Alive が On だと、Cookie persistence とかがうまく動かない問題。

BIG-IP では TCP の(UDPとかも)コネクションテーブルってのを管理してて、それに沿ってトラフィックを流します。
コネクションが生きてるうちは、それが最優先されて宛先が決定されます。
iRule とかで意図的に「こっち行け!」って指定すればそっちに行きますけど、何もしなければ TCP コネクションがある方向に必ず行きます。
もちろん設定でコネクションを作らないようにすることは可能ですが、コネクションテーブルを参照させたほうが負荷的には軽いので通常は使います。

コネクションテーブルの紹介はこの SOL なのかなあ。
今度また詳しく書きます。(多分)

SOL7606: Overview of BIG-IP idle session timeouts

ここで問題なのがブラウザが同時に二本コネクションを張った場合(よくある)は Cookie persistence がまともに動かないです。

BIG-IP で Cookie persistence の設定をしていることが前提です。
Cookie を持たない別のコネクションがほぼ二本同時に出ると、それぞれが別の pool member に進んじゃって、それぞれコネクションテーブルができます。
その後クライアントは貰った Cookie をリクエストに入れてきますけど、すでにコネクションテーブルができてるのでそれに沿って宛先に到達します。
これはコネクションが切れるまで(Web サーバの Keep-Alive timeout か BIG-IP の idle timeout が切れるまで)Cookie の中身とは関係ないところに行ってしまい、意図した動きと違ってしまいます。
上の SOL は Cookie がある場合にコネクションをぶった切るという雑な回答なので、実際に使うには考慮の余地がありますね。

わかりづらいのでこの記事は改訂するかも……

シェアする

  • このエントリーをはてなブックマークに追加