Scott McClanahan wrote:
Thanks, so much! I'd like to continue this thread a bit more because of
helpful I think it will be for everyone using mod_jk.

That one, reply_timeout, is not really meant for high speed detection. Usually you've got an ap, that every now and then needs 10 or 20 seconds for an answer and you don't like to disable a worker automatically because of those rare events. So normally one sets reply_timeout to 1, 2 or 3 minutes.

I don't understand what besides a timed out CPING/CPONG message would
render a backend tomcat disabled, especially in a default config since
reply_timeout is 0.

Default config: no CPing/CPong. But: after some time the TCP stack will give up, when there is a network problem, or the backend is no longer listening. So this case will even be handled in a default config, but depending on the exact network situation, the error detection might take a long time.

n case your backend simply eats your requests, but doesn't produce answers, you will very fast eat up all connections and threads and the whole system will hang - without configured timeouts.

BTW: there is also a non-default config to make a worker fail on several received HTTP status codes, "fail_on_status".

We have to strongly make a difference between retries of a non-lb worker and of a load balancer worker. A normal worker has a simple retry procedure, independant of the fact, if it is used directly or as part of an lb. If it detects an error it uses another pool connection and by default tries once more.

If that happens does the real worker officially change to an error state
which would subsequently kick off the retry logic of the load balancer
worker?

Without an lb a worker does not have an error state. It will be continuously reused. Only an lb uses error states and temporarily disables a failed worker. Even an lb will continuously reuse a worker, if there is no other worker to failover.

The maintenance uses a real request and handles it as if the backend wouldn't have failed. If you enabled CPing/CPong this means, that it would detect a still broken backend early and transparently send the request to another member. Because no part of the request (the CPing doesn't count) already has been send, the failover to another member happens independently of recovery_options (i.e. even with recovery_options 3).

Is the request used to test the health of the backend tomcat whichever
one comes first after a global maintenance run even if it has been
previously serviced by another healthy tomcat?  Is this request attempt
to a once errant worker only to test its healthiness and not to actually
have it fulfill the request?  I would hope it is only to test the health
of the backend tomcat and even if it is now willing to accept
connections, the request goes to whatever tomcat has been previously and
successfully responding to the session.

No, the first new request accepted by the web server and mapped to the lb will be used (at least if it is free to be routed to any worker. If the request belongs to a session located on another backend and the default config with sticky sessions is active, it will of course be send to its correct backend). It is a real user request. If the backend works, OK. If it doesn't accept the request, we can still send it to some other worker. If the backend accepts the requests, but processing fails, depending on recovery_options the user gets an error.

If you like to improve the page about load balancing or the timeouts page, or you want to add some parts about retries and recovery: contributions are welcome.

After, we are done discussing I might have some recommendations.  Again,
you've been great.

Thanks. At least we improve the knowledge inside the mailing list archive.

Regards,

Rainer

---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to