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