sticky session
アプリケーションを作ったこともなくて、セッション・Cookieの意味をあまり理解してないので、
mod_proxyの次の説明を読んでも実際の動作のイメージが掴めないので実際にテストしてみた。
stickysession - バランサーのスティッキーセッション名です。通常はこの値は JSESSIONID や PHPSESSIONID といったものになりますが、この値は バックエンドアプリケーションのサポートするセッションに依存します。
サーバの設定
簡単にするために、1台のサーバに同じセグメントのIP3つ持たせてIPベースのVirtualHostでテスト。
- IP
- 172.16.0.1 (frontのwebサーバ)
- 172.16.0.2 (backendのサーバ1)
- 172.16.0.3 (backendのサーバ2)
- セッション変数
- ss
httpd.conf
<VirtualHost 172.16.0.1> DocumentRoot /path/to/doc ProxyPass /app/ balancer://cluster/ stickysession=ss ProxyPassReverse /app/ http://172.16.0.2/ ProxyPassReverse /app/ http://172.16.0.3/ <Proxy balancer://cluster/ > BalancerMember http://172.16.0.2/ route=app1 loadfactor=10 BalancerMember http://172.16.0.3/ route=app2 loadfactor=10 </Proxy> </Virtualhost> <VirtualHost 172.16.0.2> DocumentRoot /path/to/app1 </VirtualHost> <VirtualHost 172.16.0.3> DocumentRoot /path/to/app2 </VirtualHost>
テスト
○ セッション持たせないでアクセス
http://172.16.0.1/app/にブラウザでアクセス。
app1とapp2の内容が交互に出る。
○ セッション持たせてアクセス
HTTPのセッションをいじるのはFirefox + Modify Headersが激しく便利。
- "Cookie: ss=app1"をHeaderに加える
http://172.16.0.1/app/にアクセスすると常にapp1の内容が表示される。
- "Cookie: ss=app2"をHeaderに加える
http://172.16.0.1/app/にアクセスすると常にapp2の内容が表示される。
なるほどー。なんとなく理解できた。