Hi folks, I've been sidetracked for a while but have everything
up and running now. We use load balancing so the critical part
of our resulting configuration became this:
workers.properties:
worker.serverB-lb.type=lb
worker.serverB-lb.sticky_session=1
worker.serverB-lb.session_cookie=JSESSIONID2
worker.serverB-lb.session_path=;jsessionid2
worker.serverB-lb.balance_workers=serverB-1, serverB-2, serverB-3
serverB-1 server.xml:
<Engine ... jvmRoute="serverB-1">
[serverB-2 and serverB-3 accordingly]
uriworkermap.properties:
/* = serverA-lb
/path2|/* = serverB-lb
/path3|/* = serverB-lb
/path3/xyz|/* = serverA-lb
For future reference I answer your replies below. Thanks for all
input!
Best regards
Mike
Rainer Jung wrote 28 april 2012 17:16:
> On 28.04.2012 16:52, Mike Wilson wrote:
> > I need to set up a configuration where a site's path space
> > gets distributed over two servers and I'm looking at using
> > mod_jk like this:
> >
> > Apache httpd
> > mod_jk
> > workers.properties
> > workerA -> serverA
> > workerB -> serverB
> > uriworkermap.properties
> > /* = serverA
> > /path2/* = serverB
> > /path3/* = serverB
> > /path3/xyz/* = serverA
> >
> > F ex "/" and "/path1/" would be directed to serverA and
> > "/path2/" would be directed to serverB. This is all fine.
> >
> > But how do I best solve the issue with each server setting
> > its own JSESSIONID? The browser client will see one site
> > with one domain and one JSESSIONID cookie, so this will
> > cause interference between the two servers when switching
> > between pages.
> >
> > Does mod_jk offer any feature to solve this, or is my best
> > bet to change the name of the JSESSIONID cookie on one of
> > the servers?
>
> No, there's no builtin feature for that in mod_jk. You could try to
> fiddle around with the Set-Cookie and Cookie headers using
> mod_headers.
> I suggest using a backend feature to switch cookie name there.
>
> Note that the client should also respect the path when choosing the
> correct cookie in case multiple cookies match the server. I'd
> hope the
> longest path wins in case there are multuple matching paths. Did you
> test, whether there's actually a problem with those cookies?
>
> Just in case: you can log the cookies in the server access log for
> debugging purposes by adding %{Set-Cookie}o and %{Cookie}i to your
> LogFormat in Apache.
>
> Regards,
>
> Rainer
Hi Rainer,
Based on your comments I chose a backend feature to switch cookie name.
ServerA and ServerB both believe they are serving the root directory
(contextPath=/) so their cookies both have path=/, so I couldn't use
client-side path resolution for two cookies with same name.
Thanks!
André Warnier wrote 29 april 2012 00:04:
> Mike Wilson wrote:
> > I need to set up a configuration where a site's path space
> > gets distributed over two servers and I'm looking at using
> > mod_jk like this:
> >
> > Apache httpd
> > mod_jk
> > workers.properties
> > workerA -> serverA
> > workerB -> serverB
> > uriworkermap.properties
> > /* = serverA
> > /path2/* = serverB
> > /path3/* = serverB
> > /path3/xyz/* = serverA
> >
>
> You may have a problem with the above mappings, since
> /* overlaps everything, and /path3/* overlaps /path3/xyz/*.
> I am not sure that mod_jk mappings follow the principle of
> "longest match wins".
Hi Andre,
Mod_jk has a principle of longest match wins so this is a supported
configuration:
http://tomcat.apache.org/connectors-doc/reference/uriworkermap.html
"the URI patterns are sorted by the number of '/' characters in
the pattern (highest number first), and rules with equal numbers
are sorted by their string length (longest first)."
Christopher Schultz wrote 30 april 2012 17:01:
> On 4/28/12 10:52 AM, Mike Wilson wrote:
> > uriworkermap.properties /* = serverA /path2/* = serverB
> > /path3/* = serverB /path3/xyz/* = serverA
>
> Like André, I'm curious about this, too. I would have expected some of
> these things to interfere with each other. Are you just using
> shorthand when you say /path2/* or is that similar to your
> real JkMount?
As you can see in the config summary at the top this is pretty much
exactly what I declare to mod_jk.
> > But how do I best solve the issue with each server setting its own
> > JSESSIONID?
>
> The first thing to determine is if you actually have a problem: Tomcat
> can tolerate having multiple JSESSIONID cookies coming-in from a
> request. It will try the JSESSIONID cookies sequentially until it
> finds a valid one. So, there's no reason two webapps cannot share the
> same URL space (though you're in for some surprises, occasionally).
Ok, that's interesting to know. I did some tests on my cluster setup
and was loosing sessions so I went with the cookie name renaming
scheme instead.
> > The browser client will see one site with one domain and one
> > JSESSIONID cookie, so this will cause interference between the two
> > servers when switching between pages.
>
> Remember that a cookie also has a "path" associated with it. What are
> the webapp context paths for your various webapps? If they are both
> "/" (i.e. the ROOT webapp) then you are kind of screwed: the webapps
> will fight each other for the JSESSIONID cookie and your client will
> probably always send the wrong cookie. :(
>
> If you have disjoint paths (/foo versus /bar) then everything will be
> fine. If you have nested paths (/ versus /foo -- which is looks like
> you probably do), then things will *mostly* work, except when they
> don't. I had the experience of using nested paths in the past and
> things became very confused under certain circumstances.
>
> (IIRC, we were also using proxied-JSESSIONIDs through the nested URL
> space to communicate back to the top-level URL space so we couldn't
> have Tomcat tell us if a session id was valid or not... we had to
> blindly choose one of the JSESSIONID cookies and send *that* to the
> Tomcat back-end. I can see that this isn't making any sense and it was
> kind of a cluster#$@*%& so forget it.)
We have contextPath=/ on both server clusters so, yeah, problems :-)
> > Does mod_jk offer any feature to solve this, or is my best bet to
> > change the name of the JSESSIONID cookie on one of the servers?
>
> I would go back to my first question: is there actually a problem? Or,
> are you simply forecasting one?
Both it seems :-)
Thanks for your input!
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]