Hi James. Am 06.02.2019 um 16:16 schrieb James Root: > Hi All, > > I am doing some research and have not really found a great way to configure > HAProxy to get the desired results. The problem I face is that I a service > backed by two separate collections of servers. I would like to split traffic > between these two clusters (either using percentages or weights). Normally, I > would configure a single backend and calculate my weights to get the desired > effect. However, for my use case, the list of servers can be update > dynamically > through the API. To maintain correct weighting, I would then have to > re-calculate the weights of every entry to maintain a correct balance. > > An alternative I found was to do the following in my configuration file: > > backend haproxy-test > balance roundrobin > server cluster1 u...@cluster1.sock weight 90 > server cluster2 u...@cluster2.sock weight 10 > > listen cluster1 > bind u...@cluster1.sock > balance roundrobin > server s1 127.0.0.1:8081 <http://127.0.0.1:8081> > > listen cluster2 > bind u...@cluster2.sock > balance roundrobin > server s1 127.0.0.1:8082 <http://127.0.0.1:8082> > server s2 127.0.0.1:8083 <http://127.0.0.1:8083> > > This works, but is a bit nasty because it has to take another round trip > through > the kernel. Ideally, there would be a way to accomplish this without having to > open unix sockets, but I couldn't find any examples or any leads in the > haproxy > docs. > > I was wondering if anyone on this list had any ideas to accomplish this > without > using extra unix sockets? Or an entirely different way to get the same effect?
Well as we don't know which version of HAProxy do you use I will suggest you a solution based on 1.9. I would try to use the set-priority-* feature https://cbonte.github.io/haproxy-dconv/1.9/configuration.html#4.2-http-request%20set-priority-class https://cbonte.github.io/haproxy-dconv/1.9/configuration.html#4.2-http-request%20set-priority-offset https://cbonte.github.io/haproxy-dconv/1.9/configuration.html#7.3.2-prio_class https://cbonte.github.io/haproxy-dconv/1.9/configuration.html#7.3.2-prio_offset https://cbonte.github.io/haproxy-dconv/1.9/configuration.html#7.3.3-src I would try the following, untested but I think you get the idea. frontend clusters bind u...@cluster1.sock bind u...@cluster2.sock balance roundrobin # I'm not sure if src works with unix sockets like this # maybe you need to remove the unix@ part. acl src-cl1 src u...@cluster1.sock acl src-cl2 src u...@cluster2.sock http-request set-priority-class -10s if src-cl1 http-request set-priority-class +10s if src-cl2 # http-request set-priority-offset 5s if LOGO # http-request set-priority-offset 5s if LOGO use_backend cluster1 if priority-class < 5 use_backend cluster2 if priority-class > 5 backend cluster1 server s1 127.0.0.1:8081 backend cluster2 server s1 127.0.0.1:8082 server s2 127.0.0.1:8083 There are a lot of fetching functions so maybe you find a better solution with another fetch function as I don't know your application. https://cbonte.github.io/haproxy-dconv/1.9/configuration.html#7 In case you haven't seen it there is also a management interface for haproxy. https://cbonte.github.io/haproxy-dconv/1.9/management.html#9.3 https://www.haproxy.com/blog/dynamic-configuration-haproxy-runtime-api/ > Thanks, > James Root Regards Aleks