http://d.hatena.ne.jp/kusakari/20080501/1209576904
http://d.hatena.ne.jp/tagomoris/20070717/118467176...
とあるが
http://httpd.apache.org/docs/2.2/en/mod/mod_proxy_...
が正しいというかシンプル。以下。

Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<Proxy balancer://mycluster>
BalancerMember http://192.168.1.50:80 route=1
BalancerMember http://192.168.1.51:80 route=2
ProxySet stickysession=ROUTEID
</Proxy>
ProxyPass /test balancer://mycluster

BALANCER_ROUTE_CHANGEDはstickysessionで設定された(この場合はROUTEID)クッキーがなかったり提出されたクッキーに従って振り分けできなかったときに真になる。
ので、そのタイミングでクッキーを食わせればよろしい。
ちょっと調整して、以下のようにした。

<注意事項>
apache 2.2.12以前だと、それぞれのBalancerMemberの分だけProxyPassReverseを書く必要あり。
apache2.2.12以降ならProxyPassReverse / balancer://cluster/ と一発で書けるが、まあ前方互換とかメンバが多くないときはたいした作業量でもないから、ということでProxyPassReverseは羅列にしておく。
Header add Set-Cookie のpath=/は必要。
ProxyPassReverseの各行の最後のスラッシュと、ProxyPass の balancer://cluster/ のスラッシュは必要。
<Location /balancer-manager>の設定(およびProxyPass /balancer-manager !)は本番では内部からのみのアクセスを許可するように設定すべき。あるいは消しちゃっても良いかも。
セッションをキープしてる間にどっちかが落ちたらBalancerMemberのredirect設定によってどっちかに振られる。ただしセッションは消える。(各バックエンドのローカルにセッションファイルがあるので仕方ない仕様) ← nofailover=On
%{UNIQUE_ID}eをクッキーに含めたのはどのタイミングでクッキーを食わせたかわかりやすくするため。

#----------------------------
ProxyRequests Off

<Location /balancer-manager>
SetHandler balancer-manager
Order allow,deny
Allow from all
</Location>

Header add Set-Cookie "ROUTE_SESSIONID=%{UNIQUE_ID}e.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED

<Proxy balancer://cluster>
BalancerMember http://127.0.0.1:808 route=001 redirect=002 BalancerMember http://127.0.0.1:888 route=002 redirect=001
</Proxy>

ProxyPass /balancer-manager !
ProxyPass / balancer://cluster/ stickysession=ROUTE_SESSIONID nofailover=On
ProxyPassReverse / http://127.0.0.1:808/
ProxyPassReverse / http://127.0.0.1:888/
#----------------------------

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

Menu

ここは自由に編集できるエリアです。

管理人/副管理人のみ編集できます