HAProxy - balance uri whole

HAProxy supports URL hash based load balancing. This is usefull if you want to create a Squid caching cluster and ensure each object is cached only once, thus increasing the cache hit ratio and the number of objects stored in the cluster. To enable the URL hash based load balancing choose HAProxy's 'balance uri' algorith.

By default HAProxy hashes the left part of the URI (the part before the question mark). If you want to hash the whole URI you need to add the 'whole' keyword.

The 'whole' keywork was introduced in HAProxy 1.5, but 1.4.21 can be pached to get this feature.

UPDATE 1.4.22 backported the 'whole' keyword and EPEL updated HAProxy to 1.4.22, so there is no need to patch HAProxy anymore. Happy days...

UPDATE Redhat included keepalived and haproxy in RHEL6.4, there is no need to install it from EPEL anymore. Hurray!!!

Here is how to do it.

  • Then download the 1.4.21 source code, patch it, compile it, and replace the EPEL binary
yum install gcc patch

wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.21.tar.gz
tar xzvf haproxy-1.4.21.tar.gz
cd haproxy-1.4.21

zcat /tmp/balance-uri-whole.patch.gz |patch -p 1
make TARGET=linux26
cp haproxy /usr/sbin/haproxy    # this replaces the binary from EPEL package
  • Now you can add the "whole" parameter after "balance uri"
backend cache
    balance     uri whole
    server      cache01 check
    server      cache02 check
    server      cache03 check
    server      cache04 check
    server      cache05 check
    server      cache06 check
  • The patch is available here.