You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by Bernd Koecke <bk...@schlund.de> on 2002/05/15 11:09:13 UTC
[PATCH] for lb_worker in jk1 with local workers
Hi,
here is the patch for lb_worker in jk1. I tested it on a testcluster and it
worked for me.
It adds two config params:
'local_worker_only' on the lb_worker
'local_worker' on the balanced workers, e.g. an ajp13 worker
Example environment:
A cluster with two nodes (TC1+TC2), running apache+tomcat tandem on each node, a
loadbalancer in front of the nodes.
Example conf of TC1:
workers.tomcat_home=<tomcat-home-dir>
workers.java_home=$(JAVA_HOME)
ps=/
worker.list=router
worker.TC1.port=8009
worker.TC1.host=node1.domain.tld
worker.TC1.type=ajp13
worker.TC1.lbfactor=1
worker.TC1.local_worker=1
worker.TC2.port=8009
worker.TC2.host=node2.domain.tld
worker.TC2.type=ajp13
worker.TC2.lbfactor=1
worker.TC2.local_worker=0
worker.router.type=lb
worker.router.balanced_workers=TC1,TC2
worker.router.local_worker_only=1
The 'local_worker' flag on TC1 and TC2 tells the lb_worker which connections are
going to the local worker. If local_worker is an int and is not 0 it is set to
JK_TRUE and marked as local worker, JK_FALSE otherwise. If in minimum one worker
is marked as local worker, lb_worker is in local worker mode. All local worker
are moved to the beginning of the internal worker list in lb_worker during
validation.
This means that if a request with a session id comes in it would be routed to
the appropriate worker. If this worker is down it will be send to the first
local worker which is not in error state.
If a request without a session comes in, it would be routed to the first local
worker. If all local worker are in error state, then the 'local_worker_only'
flag is important. If it was set to an int and this wasn't 0 it is set to
JK_TRUE, JK_FALSE otherwise. With set to JK_TRUE, this request gets an error
response. If set to JK_FALSE lb_worker tries to route the request to another
balanced worker.
If one of the worker was in error state and has recovered nothing changes. The
local worker will be check for requests without a session id (and with a session
on himself) and the other worker will only be checked if a request with a
session id of this worker comes in.
In this environment, with a load balancer in front, it is an error if the
balancer sends a request without a session to an apache without a running local
worker. And if the looad balancer determines that a node is down no other node
is allowed to send a request without a session to it. This is necessary for me,
because on a switched off node apache and tomcat can still be up and running,
but they are in an old state and should only be asked for old sessions.
Defaults:
local_worker: 0
local_worker_only:0
Internals:
The local workers are at the binning of the worker list. Additionaly I don't
change the lb_value for local workers, but because of the workers order this
should not be necessary.
I didn't changed the name of the local_worker_only flag because it suits the
name with local_worker. But the flags are defines in jk_util.c its easy to
change them.
I hope its usefull, the patch was geenrated against cvs with diff -u.
Bernd
--
Dipl.-Inform. Bernd Koecke
UNIX-Entwicklung
Schlund+Partner AG
Fon: +49-721-91374-0
E-Mail: bk@schlund.de