tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From LiuYan 刘研 <lovet...@21cn.com>
Subject mod_jk: The worker pick order/scope when sticky_session=false and clusters are grouped by worker.domain
Date Tue, 05 Jan 2010 08:44:47 GMT

I'm currently learning Tomcat clustering these days.

I setup 4 Tomcat-6.0.22 instances in Windows XP: server1, server2, server3,
server4
cluster1: server1 & server2 (228.0.0.4:45564)
cluster2: server3 & server4 (228.0.0.4:45566)

Apache/2.2.14(win32) is the frontend. mod_jk-1.2.28 is the connector between
Apache and Tomcats.

Start tomcats, start apache, then I visit
http://localhost/tomcatClusterTest/session-test.jsp 4 times, then I saw each
tomcat server got a request.

What I expected is: server1 should get request #1,#3. server2 should get
request #2,#4. server3 and server4 should get no request because they are
another cluster and so they do not have the session which is created at
server1.

I read the comments of "Bug 32317 - Making mod_jk replication aware
(Clustering Support)" from here
https://issues.apache.org/bugzilla/show_bug.cgi?id=32317
I saw the following comment in bug description:
-------------------------------------------------------------------------------
   - without stickyness to decide to which workers an existing session is
allowed to be balanced (all workers with the same domain as the worker given
in
the session id)
-------------------------------------------------------------------------------
The comment is what I expected, but the test result is unexpected: server3 &
server4 which belongs another domain/cluster are picked.

Is it a bug or I misunderand the meaning of the comment above?


workers.properties:
#-------------------------------------------------------------------------------
worker.list=LoadBalancer

worker.LoadBalancer.type=lb
worker.LoadBalancer.balance_workers=server1,server2,server3,server4
worker.LoadBalancer.sticky_session=false

worker.server1.host=localhost
worker.server1.port=8109
worker.server1.type=ajp13
worker.server1.lbfactor=1
worker.server1.domain=cluster1

worker.server2.host=localhost
worker.server2.port=8209
worker.server2.type=ajp13
worker.server2.lbfactor=1
worker.server2.domain=cluster1

worker.server3.host=localhost
worker.server3.port=8309
worker.server3.type=ajp13
worker.server3.lbfactor=1
worker.server3.domain=cluster2

worker.server4.host=localhost
worker.server4.port=8409
worker.server4.type=ajp13
worker.server4.lbfactor=1
worker.server4.domain=cluster2
#-------------------------------------------------------------------------------

httpd.conf
#-------------------------------------------------------------------------------
JkMount /tomcatClusterTest/* LoadBalancer
#...
#-------------------------------------------------------------------------------

session-test.jsp
-------------------------------------------------------------------------------
<%@ page contentType='text/html' pageEncoding='GBK' %>
<pre style='font-size: 12px;'>
<%
String sUserName=(String)session.getAttribute ("username");
Integer oRequestCounter=(Integer)session.getAttribute ("request counter");
int iRequestCounter = oRequestCounter!=null ? oRequestCounter.intValue() :
0;
iRequestCounter ++;
session.setAttribute ("request counter", Integer.valueOf(iRequestCounter));

java.sql.Timestamp oSessionCreatedTime = new
java.sql.Timestamp(session.getCreationTime());
java.sql.Timestamp oSessionLastAccessedTime = new
java.sql.Timestamp(session.getLastAccessedTime());
String sSessionID = session.getId ();

java.sql.Timestamp currentTimestamp=new
java.sql.Timestamp(System.currentTimeMillis());
String sInfo =
	"-------------------------------------------\n" +
	"Request:     # " +iRequestCounter + "\n" +
	"  Time:      " + currentTimestamp + "\n" +
	"Session:\n" +
	"  ID         " + sSessionID + "\n" +
	"  Created    " + oSessionCreatedTime + "\n" +
	"  Accessed   " + oSessionLastAccessedTime + "\n" +
	"  Attribute: username = " + sUserName + "\n"  +
	"  Attribute: request counter = " + session.getAttribute ("request
counter") + "\n"  +
	""
	;
System.out.println (sInfo);
out.println (sInfo);

if (sUserName==null)
{
	session.setAttribute ("username", "MyName "+new
java.sql.Time(System.currentTimeMillis()));
}
%>
</pre>
-------------------------------------------------------------------------------


My test result:
server1:
-------------------------------------------
Request:     # 1
  Time:      2010-01-05 16:01:10.687
Session:
  ID         7E5BAD3313EF518C189B1237E7475D74.server1
  Created    2010-01-05 16:01:10.687
  Accessed   2010-01-05 16:01:10.687
  Attribute: username = null
  Attribute: request counter = 1

server2:
-------------------------------------------
Request:     # 2
  Time:      2010-01-05 16:01:12.828
Session:
  ID         7E5BAD3313EF518C189B1237E7475D74.server2
  Created    2010-01-05 16:01:10.687
  Accessed   2010-01-05 16:01:10.687
  Attribute: username = MyName 16:01:10
  Attribute: request counter = 2

server3:
-------------------------------------------
Request:     # 1
  Time:      2010-01-05 16:01:14.343
Session:
  ID         46F2C9DA30599FF835358D50682E7583.server
  Created    2010-01-05 16:01:14.343
  Accessed   2010-01-05 16:01:14.343
  Attribute: username = null
  Attribute: request counter = 1

server4:
-------------------------------------------
Request:     # 2
  Time:      2010-01-05 16:01:15.0
Session:
  ID         46F2C9DA30599FF835358D50682E7583.server4
  Created    2010-01-05 16:01:14.343
  Accessed   2010-01-05 16:01:14.359
  Attribute: username = MyName 16:01:14
  Attribute: request counter = 2

-- 
View this message in context: http://old.nabble.com/mod_jk%3A-The-worker-pick-order-scope-when-sticky_session%3Dfalse-and-clusters-are-grouped-by-worker.domain-tp27025276p27025276.html
Sent from the Tomcat - User mailing list archive at Nabble.com.


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


Mime
View raw message