読者です 読者をやめる 読者になる 読者になる

Apache 2.2 のロードバランスでセッション毎にワーカーのパーシステンスを図るには

Apache

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 でいけたらしい・・・。