Apache 2.2 のロードバランスでセッション毎にワーカーのパーシステンスを図るには
mod_proxy_balancer では、単純に stickysession の値をマッピングをしてくれるわけではないことが http://www.res-system.com/weblog/item/618 をみてわかった。
そこで、 http://d.hatena.ne.jp/tagomoris/20070717/1184671767 を参考にして、とにかくルートを持つ値をクッキーにセットすることにした。
フロントエンド
バランサ側の設定を下記のようにする。
ProxyRequests Off ProxyPass / balancer://cluster/ stickysession=RWORKER ProxyPassReverse / http://worker1:8081/ ProxyPassReverse / http://worker2:8081/ <Proxy balancer://cluster/> BalancerMember http://worker1:8081/ route=worker1 BalancerMember http://worker2:8081/ route=worker2 </Proxy>
バックエンド
リクエストヘッダに RWORKER があるかどうかを判別してなければ付加するようにバックエンド側の Apache 設定を worker1 では
SetEnvIf Cookie "RWORKER=[^;]+" HAVA_RWORKER Header add Set-Cookie "RWORKER=route.worker1" env=!HAVA_RWORKER
として、worker2 では
SetEnvIf Cookie "RWORKER=[^;]+" HAVA_RWORKER Header add Set-Cookie "RWORKER=route.worker2" env=!HAVA_RWORKER
とした。
stickysession は . 以降を route 値としてみる仕様なので、route.worker としている。
ちなみにバックエンドが Tomcat だったら jvmRoute でいけたらしい・・・。