On 15/08/2011 19:09, Lataxes, Karl wrote:
> I wrote the code to generate the session id and add it as an HTTP header at 
> the recommendation of someone on the users list.  The problem now is 
> appending the jvmroute to the generated session id in order to get session 
> stickiness to work.  If there were some way for the servlet to retrieve the 
> jvmRoute from server.xml, I could append it to the session id and get it to 
> work.  I have been looking online for a solution, but have been unable to 
> find one. 

Try using JMX.

Look up the appropriate object (there are clues in the source of the
Manager app) and then retrieve the value of the appropriate attribute.

I would experiment with setting this value in the servlet.init() method.


p

> -----Original Message-----
> From: Rainer Jung [mailto:rainer.j...@kippdata.de] 
> Sent: Monday, August 15, 2011 12:52 PM
> To: users@tomcat.apache.org
> Subject: Re: Sticky Session Not Working With Apache 2.0.54 and Tomcat 7.0.8
> 
> On 15.08.2011 17:09, Lataxes, Karl wrote:
>> Yes, the space before "servlet" is a copy/paste error.
>>
>> I made the LogFormat additions to httpd.conf, set the mod_jk logging level 
>> to "debug" and ran some additional tests.
>>
>> The session id did appear in the access_log I generated:
>>
>> 2000-1-200-ap-1313413815567
> 
> So the session ID is wrong, it does not contain the trailing ".tomcat7A"
> to allow sticky routing.
> 
> Whatever generates the session id doesn't generate a correct one which 
> supports stickyness. The session id doesn't look like a normal Tomcat session 
> id, so it seems something else is setting the JSESSIONID cookie, like a 
> custom sesion manager. You need to find that piece of code and fix it (to 
> append the jvmRoute to the id).
> 
> Regards,
> 
> Rainer
> 
>> In the mod_jk.log, I also noted several references to the session id, 
>> which are included below.  Please note that the original client 
>> request went to worker tomcat7A, but subsequent requests were routed 
>> to tomcat7C
>>
>> [Mon Aug 15 09:10:15.614 2011] [3275:1] [debug] 
>> ajp_unmarshal_response::jk_ajp_common.c (723): Header[0] [Set-Cookie] 
>> = [JSESSIONID=2000-1-200-ap-1313413815567]
>> [Mon Aug 15 09:10:18.495 2011] [3275:1] [debug] service::jk_lb_worker.c 
>> (1118): service sticky_session=1 id='2000-1-200-ap-1313413815567'
>> [Mon Aug 15 09:10:18.495 2011] [3275:1] [debug] 
>> get_most_suitable_worker::jk_lb_worker.c (946): searching worker for partial 
>> sessionid 2000-1-200-ap-1313413815567 [Mon Aug 15 09:10:18.495 2011] 
>> [3275:1] [debug] get_most_suitable_worker::jk_lb_worker.c (1001): found best 
>> worker tomcat7C (tomcat7C) using method 'Request'
>>
>> You can see from the log snippets that ".<worker_name>" is not being 
>> appended to the session as expected.
>>
>> -----Original Message-----
>> From: Rainer Jung [mailto:rainer.j...@kippdata.de]
>> Sent: Saturday, August 13, 2011 8:11 AM
>> To: users@tomcat.apache.org
>> Subject: Re: Sticky Session Not Working With Apache 2.0.54 and Tomcat 
>> 7.0.8
>>
>> On 12.08.2011 15:30, Lataxes, Karl wrote:
>>> The jvmRoute's for both server.xmls are properly set to the worker names 
>>> and are not commented out.  This was the first thing I verified.
>>>
>>>     <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat7A">
>>>     <Engine name="Catalina" defaultHost="localhost" 
>>> jvmRoute="tomcat7C">
>>>
>>> Here are the settings in workers.properties (worker tomcat7A identical to 
>>> tomcat7C except for port, since both are running on the same server for 
>>> testing.  In production, we will probably install them on separate boxes):
>>>
>>> worker.list=loadbalancer,jkstatus
>>> worker.tomcat7C.type=ajp13
>>> worker.tomcat7C.host=<host_name>
>>> worker.tomcat7C.port=4931
>>> worker.tomcat7C.lbfactor=1
>>> worker.loadbalancer.type=lb
>>> worker.loadbalancer.balance_workers=tomcat7A,tomcat7C
>>> worker.loadbalancer.sticky_session=1
>>> worker.jkstatus.type=status
>>
>> OK
>>
>>> Here are the JkMount settings in mod_jk.conf:
>>>
>>> JkMount /jkmanager/* jkstatus
>>> JkMount / servlet/* loadbalancer
>>
>> I hope the space before "servlet" is a copy and paste error and not in the 
>> original config ...
>>
>>> Load balancing is working, but subsequent requests from a single client are 
>>> being routed to the other Tomcat instance despite sticky_session being set 
>>> to 1.
>>
>> OK, then maybe your cookie header is not OK. To debug:
>>
>> - Add %{Cookie}i to the LogFormat you are using in Apache. It will log all 
>> cookies. Check the values.
>>
>> - Add %{JSESSIONID}C to the same LogFormat. It will log the value of the 
>> JSESSIONID cookie found by the web server. Check the values.
>>
>> - Optional: Add %{Set-Cookie}o to the same LogFormat. It will log the 
>> setting of the cookie (sending a cookie from the server to the client).
>> Probably of no use for you, since you seem to parse that info in some other 
>> way.
>>
>> - Increase log level of mod_jk to debug or even trace (not in
>> production) and look at the log lines written when your client sends a 
>> request, which isn't handled sticky.
>>
>> Regards,
>>
>> Rainer
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to