うまいぼうぶろぐ

linuxとhttpdとperlのメモ

mod_proxy,mod_proxy_balancerのstickysessionのテストとお勉強

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の内容が表示される。


なるほどー。なんとなく理解できた。