[mod_cluster-issues] [JBoss JIRA] (MODCLUSTER-309) mod_proxy_cluster not checking all available balancers (but only the first one) for an available route
Simone Gotti (JIRA)
jira-events at lists.jboss.org
Tue May 15 11:07:19 EDT 2012
Simone Gotti created MODCLUSTER-309:
---------------------------------------
Summary: mod_proxy_cluster not checking all available balancers (but only the first one) for an available route
Key: MODCLUSTER-309
URL: https://issues.jboss.org/browse/MODCLUSTER-309
Project: mod_cluster
Issue Type: Bug
Affects Versions: 1.2.1.Final
Environment: RedHat EL 6.2, httpd-2.2.15-15.el6
Reporter: Simone Gotti
Assignee: Jean-Frederic Clere
I have an environment with two or more balancers.
I want all the balancers to be available for all the virtualhosts (and maybe filter them using UseAlias). So I'm not configuring any ProxyPass directive but let mod_cluster create the balancers.
During a simple test I noticed that session stickiness was not working for some requests.
Enabling debug I noticed that mod_proxy_cluster:get_route_balancer failed to find a route so the worker was recalculated:
[Tue May 15 16:39:46 2012] [debug] mod_proxy_cluster.c(2617): proxy_cluster_trans for 0 (null) (null) uri: /context01/jsp01.jsp args: (null) unparsed_uri: /context01/jsp01.jsp
[Tue May 15 16:39:46 2012] [debug] mod_proxy_cluster.c(2441): cluster: balancer://balancer01 Found value 7tTdLpqWIZjDLcyBrn25tCc9.eb5376bd-c45b-38d1-97e0-c16b97f471d1 for stickysession JSESSIONID|jsessionid
[Tue May 15 16:39:46 2012] [debug] mod_proxy_cluster.c(2441): cluster: balancer://balancer01 Found value 7tTdLpqWIZjDLcyBrn25tCc9.eb5376bd-c45b-38d1-97e0-c16b97f471d1 for stickysession JSESSIONID|jsessionid
[Tue May 15 16:39:46 2012] [debug] mod_proxy_cluster.c(2675): proxy_cluster_trans using balancer02 uri: proxy:balancer://balancer02/context01/jsp01.jsp
[Tue May 15 16:39:46 2012] [debug] mod_proxy_cluster.c(2708): proxy_cluster_canon url: //balancer02/context01/jsp01.jsp
[Tue May 15 16:39:46 2012] [debug] mod_proxy_cluster.c(3140): proxy_cluster_pre_request: url balancer://balancer02/context01/jsp01.jsp
[Tue May 15 16:39:46 2012] [debug] mod_proxy_cluster.c(2880): cluster:No route found
[Tue May 15 16:39:46 2012] [debug] mod_proxy_cluster.c(1854): proxy: Entering byrequests for CLUSTER (balancer://balancer02)
[Tue May 15 16:39:46 2012] [debug] mod_proxy_cluster.c(1972): proxy: byrequests balancer DONE (ajp://192.168.122.22:8359)
[Tue May 15 16:39:46 2012] [debug] mod_proxy_cluster.c(3368): proxy_cluster_pre_request: balancer (balancer://balancer02) worker (ajp://192.168.122.22:8359) rewritten to ajp://192.168.122.22:8359/context01/jsp01.jsp
Looking at the code looks like mod_cluster checks only the first balancer and, if it does not find any valid route it will give up without retrying the other available balancers.
With this patch it's now checking all the available balancers:
Index: mod_proxy_cluster/mod_proxy_cluster.c
===================================================================
--- mod_proxy_cluster/mod_proxy_cluster.c (revision 838)
+++ mod_proxy_cluster/mod_proxy_cluster.c (working copy)
@@ -2453,7 +2453,7 @@
/* Nice we have a route, but make sure we have to serve it */
int *nodes = find_node_context_host(r, balancer, route, use_alias, vhost_table, context_table);
if (nodes == NULL)
- return NULL; /* we can't serve context/host for the request */
+ continue; /* we can't serve context/host for the request with this balancer*/
}
if (route && *route) {
char *domain = NULL;
and this is the log after this possible fix:
[Tue May 15 16:38:36 2012] [debug] mod_proxy_cluster.c(2617): proxy_cluster_trans for 0 (null) (null) uri: /context01/ args: (null) unparsed_uri: /context01/
[Tue May 15 16:38:36 2012] [debug] mod_proxy_cluster.c(2441): cluster: balancer://balancer02 Found value Frjih6gBZzDUg+RFgeUvKJfy.9cedb7e1-5c20-3da7-bd17-9d0bc99b49d3 for stickysession JSESSIONID|jsessionid
[Tue May 15 16:38:36 2012] [debug] mod_proxy_cluster.c(2441): cluster: balancer://balancer01 Found value Frjih6gBZzDUg+RFgeUvKJfy.9cedb7e1-5c20-3da7-bd17-9d0bc99b49d3 for stickysession JSESSIONID|jsessionid
[Tue May 15 16:38:36 2012] [debug] mod_proxy_cluster.c(2461): cluster: Found route 9cedb7e1-5c20-3da7-bd17-9d0bc99b49d3
[Tue May 15 16:38:36 2012] [debug] mod_proxy_cluster.c(2377): find_nodedomain: finding node for 9cedb7e1-5c20-3da7-bd17-9d0bc99b49d3: balancer01
[Tue May 15 16:38:36 2012] [debug] mod_proxy_cluster.c(2470): cluster: Found balancer balancer01 for 9cedb7e1-5c20-3da7-bd17-9d0bc99b49d3
[Tue May 15 16:38:36 2012] [debug] mod_proxy_cluster.c(2675): proxy_cluster_trans using balancer01 uri: proxy:balancer://balancer01/context01/
[Tue May 15 16:38:36 2012] [debug] mod_proxy_cluster.c(2708): proxy_cluster_canon url: //balancer01/context01/
[Tue May 15 16:38:36 2012] [debug] mod_proxy_cluster.c(3140): proxy_cluster_pre_request: url balancer://balancer01/context01/
[Tue May 15 16:38:36 2012] [debug] mod_proxy_cluster.c(2876): cluster: Using route 9cedb7e1-5c20-3da7-bd17-9d0bc99b49d3
[Tue May 15 16:38:36 2012] [debug] mod_proxy_cluster.c(3368): proxy_cluster_pre_request: balancer (balancer://balancer01) worker (ajp://192.168.122.22:8259) rewritten to ajp://192.168.122.22:8259/context01/
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the mod_cluster-issues
mailing list