Class JvmRouteBinderValve

java.lang.Object
All Implemented Interfaces:
MBeanRegistration, Contained, ClusterValve, JmxEnabled, Lifecycle, Valve

public class JvmRouteBinderValve extends ValveBase implements ClusterValve
Valve to handle Tomcat jvmRoute takeover using mod_jk module after node failure. After a node crashes, subsequent requests go to other cluster nodes. That incurs a drop in performance. When this Valve is enabled on a backup node and sees a request, which was intended for another (thus failed) node, it will rewrite the cookie jsessionid information to use the route to this backup cluster node, that answered the request. After the response is delivered to the client, all subsequent client requests will go directly to the backup node. The change of sessionid is also sent to all other cluster nodes. After all that, the session stickiness will work directly to the backup node and the traffic will not go back to the failed node after it is restarted!

Add this Valve to your cluster definition at conf/server.xml .

  <Cluster>
  <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve" />
  </Cluster>
 
A Trick:
You can enable this mod_jk turnover mode via JMX before you drop a node to all backup nodes! Set enable true on all JvmRouteBinderValve backups, disable worker at mod_jk and then drop node and restart it! Then enable mod_jk worker and disable JvmRouteBinderValves again. This use case means that only requested sessions are migrated.
Author:
Peter Rossbach