domain: you don't need the domain attribute. Domai has the following
purpose: Once you start replicating sessions between tomcats and you
build up a huge group of tomcat instances and break it up into smaller
groups which replicate, then you can use domain to tell lb, between
which tomcat instances you replicate the sessions.
workers with the same domain are assumed to replicate all sessions
between each other. So when lb detects a worker as being in error state,
it tries to send the request to another worker having the same domain
name as the erroneous one.
Cookies: How do you detect, if the cookie is set? You could log the
ingoing "Cookie" header to detect cookies sent by the browser and the
outgoing "Set-Cookie" header to watch which Cookies your server tries to
sent. For Apache you can include
\"%{Cookie}i\" \"%{Set-Cookie}o\"
in your LogFormat, for tomcat standalone use
http://tomcat.apache.org/tomcat-5.5-doc/catalina/docs/api/org/apache/catalina/valves/ExtendedAccessLogValve.html
Any JSP called which does not use the page directive setting the session
atribute to false will use a session. On its first access tomcat should
send the cookie except you disable the cookie usage in your tomcat
configuration.
Allistair Crossley wrote:
Edgar, Reinhard and Rainer and Tim,
I forgot to set jvmRoute in my server.xml ;)
But seriously .. many many thanks for your time. I have set the domain
property for each worker, and matched them to jvmRoute on the Engine
element.
This has resolved the issue where Tomcat 1 generates new session ids per
request when Tomcat 2 is also running. For example, Tomcat 1 now
generates session Ids like this
3A65ADAA09137DB460CB3FD8D393BF20.jvm1
I've been able to get requests into Tomcat 1 that stick with Tomcat 1
perfectly alright which is an improvement.
_However_ :) requests that get to Tomcat 2 still do not have session ids
returned in the headers at all. I appreciate this is Tomcat that is not
generating the session id, but I replicated Tomcat 2 from Tomcat 1,
changing server.xml's ports to be unique and I don't see another reason
(relative to my knowledge of course) why Tomcat 2 would continue to be
blank for Tomcat 2. We are on an intranet, so we use cookies
exclusively.
Best regards, Allistair
== tomcat 1 server.xml Engine ==
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
== tomcat 2 server.xml Engine ==
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">
== latest workers config ==
worker.list=loadbalancer
worker.tomcat1.domain=jvm1
worker.tomcat1.port=8009
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1
worker.tomcat1.cachesize=10
worker.tomcat2.domain=jvm2
worker.tomcat2.port=8109
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
worker.tomcat2.cachesize=10
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=tomcat1,tomcat2
worker.loadbalancer.sticky_session=1
-----Original Message-----
From: Edgar Alves [mailto:[EMAIL PROTECTED]
Sent: 18 April 2006 14:36
To: Tomcat Users List
Subject: Re: JK Sticky Session Handling with Load Balancing
Hi again,
When using two workers like that you must set the domain property for
each of them for having mod_jk send the requests to the appropriate
Tomcat instance.
Add the following two lines to your workers properties file:
worker.tomcat1.domain=tomcat1
worker.tomcat2.domain=tomcat2
And for each Tomcat instance, set the "jvmRoute" attribute of the
Engine element in the respective server.xml configuration to the value
that you used in the respective worker "domain" property above for each
instance ("tomcat1" and "tomcat2" above).
-- Edgar Alves
Allistair Crossley wrote:
Hi Edgar,
Yep I just noticed that too :)) However, correcting this configuration
(to the below) does nothing to resolve the issue, because the lb
worker type by default has sticky_session=1. I set it explicitly
anyway as below.
However, I have noticed that in fact Tomcat 2 is not returning
JSESSIONID headers as Tomcat 1 does when both Tomcats are in.
To recap then, when only Tomcat 1 is in the loop, JSESSIONIDs are
returned and remains consistent across requests. When Tomcat 2 is
brought in, Tomcat 1 starts generating a different JSESSIONID per
request, whilst Tomcat 2 returns no JSESSIONID at all.
Thanks, Allistair
=== new config ===
worker.list=loadbalancer
worker.tomcat1.port=8009
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1
worker.tomcat1.cachesize=10
worker.tomcat2.port=8109
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
worker.tomcat2.cachesize=10
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=tomcat1,tomcat2
worker.loadbalancer.sticky_session=1
-----Original Message-----
From: Edgar Alves [mailto:[EMAIL PROTECTED]
Sent: 18 April 2006 12:32
To: Tomcat Users List
Subject: Re: JK Sticky Session Handling with Load Balancing
Hi there,
You're setting the sticky_session property for each worker. That's
not how it works.
That property is valid only for the loadbalancer and it takes a
boolean value. Set it to 'True' or '1' to get the desired effect.
Read http://tomcat.apache.org/connectors-doc/config/workers.html for
more info.
-- Edgar Alves
Allistair Crossley wrote:
Hi,
I have setup 2 Tomcats on the same machine fronted by IIS, and used a
sticky_session=1 JK (1.2.15) load-balanced setup (as printed at the
foot of this email)
I setup a JSP on both Tomcats that outputs the session ID.
With only 1 Tomcat started, making requests to the JSP results in the
same session ID being output on each request.
When I start up the 2nd Tomcat and continue making requests to the
JSP, I am switched between both Tomcats rather than staying on the
same Tomcat and therefore acquire a new session ID.
However, with the 2 Tomcat's "in the loop" the session Ids become
different *per request* no matter which Tomcat is used.
I would have expected at most 2 unique session Ids (one per Tomcat)
since with 1 Tomcat running only, the 1 unique session ID is
maintained.
I would appreciate any help or guidance as to why this may be
happening.
Cookies are enabled, and jsessionid is not being used on URLs.
Cheers, Allistair.
== config ==
worker.list=loadbalancer
worker.tomcat1.port=8009
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1
worker.tomcat1.cachesize=10
worker.tomcat1.sticky_session=1
worker.tomcat2.port=8109
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
worker.tomcat2.cachesize=10
worker.tomcat1.sticky_session=2
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=tomcat1,tomcat2
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]