Is there a way to utilize use_backend with an ACL match, but, in the case the backend is unavailable (down,maint,etc), then use the default?

For example:

 # Define hosts acl host_bacon hdr(host) -i ilovebacon.com acl host_milkshakes hdr(host) -i bobsmilkshakes.com ## figure out which one to use use_backend bacon_cluster if host_bacon use_backend milshake_cluster if host_milkshakes default_backend web-app-cluster 

In the case above, if the bacon and milkshake backends have no available servers, to fall and use web-app-cluster?

Thanks

1 Answer

Yes, it is possible, for example, you could use something like this:

acl host_bacon hdr(host) -i ilovebacon.com acl host_milkshakes hdr(host) -i bobsmilkshakes.com # check if bacon & milk ok acl bacon_cluster_down nbsrv(bacon_cluster) lt 1 acl milks_cluster_down nbsrv(milshake_cluster) lt 1 # use default web-app if backon & milk down use_backend web-app-cluster if bacon_cluster_down use_backend web-app-cluster if milks_cluster_down use_backend bacon_cluster if host_bacon use_backend milshake_cluster if host_milkshakes default_backend web-app-cluster ... 

Notice the use of nbsrv([<backend>]) : integer

From the docs:

Returns an integer value corresponding to the number of usable servers of either the current backend or the named backend. This is mostly used with ACLs but can also be useful when added to logs. This is normally used to switch to an alternate backend when the number of servers is too low to to handle some load. It is useful to report a failure when combined with "monitor fail". 

Check for more examples in this HAproxy post: failover and worst case management with HAProxy

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.