mod_cluster sticky session cookie name configuration?
jmpetersen Mar 25, 2015 2:54 PMHi,
I'm using mod_cluster(1.2.0.Final) to dynamically add Tomcat instances to our httpd(2.2.26) load balancer. I am running standalone instances (no session replication) but they keep session state so the load balancer must be sticky. I followed the mod_proxy_balancer and mod_cluster docs for setting up httpd and Tomcat. Running with the default session cookie name works great. New clients are sent to a Tomcat box and are stuck there for the duration of their session.
The problem is I need to use a custom session cookie name. When configured following as shown below the load balancer no longer knows where to route the requests and sessions are lost.
Tomcat server.xml:
<Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener"
advertise="true"
balancer="brokerb"
advertiseGroupAddress="239.5.0.17"
advertisePort="23364"
stickySession="true"
stickySessionForce="false"
stickySessionRemove="false" />
Tomcat context.xml:
<Context antiJARLocking="true" swallowOutput="true" unpackWAR="true" sessionCookieName="SIDBP">
/etc/httpd/mods-enabled/manager.conf:
<IfModule manager_module>
Listen 10.98.10.40:6666
MemManagerFile /opt/mod_cluster-current/manager
CreateBalancers 1
ProxyPassMatch /server-status !
ProxyPassMatch /server-info !
ProxyPass / balancer://brokerb/ stickysession=SIDBP|sidbp
Maxcontext 300
Maxnode 150
Maxhost 300
<Location /mod_cluster_manager>
SetHandler mod_cluster-manager
Order deny,allow
Deny from all
Allow from 10
AllowDisplay On
AllowCmd off
</Location>
<VirtualHost 10.98.10.40:6666>
<Location />
Order deny,allow
Deny from all
Allow from all
</Location>
EnableMCPMReceive
KeepAliveTimeout 300
MaxKeepAliveRequests 0
AdvertiseGroup 239.5.0.17:23364
</VirtualHost>
</IfModule>
Tomcat is configured to use the custom session cookie name correctly because the session is maintained when bypassing the load balancer and hitting a single node directly.
Logging was turned up on Apache to see the stickiness related values. When using the default JSESSIONID it is reported correctly in BALANCER_SESSION_STICKY. However when using the custom cookie SIDBP nothing is reported for BALANCER_SESSION_STICKY and BALANCER_ROUTE_CHANGED is always 1.
Mod Cluster Manager Dumps this info. It does not seem to be picking up the cookie name.
balancer: [1] Name: brokerb Sticky: 1 [JSESSIONID]/[jsessionid] remove: 0 force: 0 Timeout: 0 maxAttempts: 1
node: [1:1],Balancer: brokerb,JVMRoute: ea-tc0102,LBGroup: [],Host: 10.98.9.16,Port: 8009,Type: ajp,flushpackets: 0,flushwait: 10,ping: 10,smax: 65,ttl: 60,timeout: 0
node: [2:2],Balancer: brokerb,JVMRoute: ea-tc0103,LBGroup: [],Host: 10.98.10.25,Port: 8009,Type: ajp,flushpackets: 0,flushwait: 10,ping: 10,smax: 65,ttl: 60,timeout: 0
host: 1 [localhost] vhost: 1 node: 1
host: 2 [localhost] vhost: 1 node: 2
context: 1 [/] vhost: 1 node: 1 status: 1
context: 2 [/] vhost: 1 node: 2 status: 1
What am I missing? How is the session cookie name configured when using mod_cluster versus mod_proxy_balancer?
Thanks!