On Παρασκευή, 28 Ιουνίου 2019 5:50:48 Μ.Μ. CEST Patrick Hemmer wrote: > I'm trying to get fullconn working, and can't seem to do so. I dunno if > it's a bug, or if it's my understanding that's wrong. > Basically my goal is to prevent the cumulative total of all connections > to all servers in a pool from exceeding a certain value. > For example I might have 10 servers, each with a maxconn of 10. But I > want to configure haproxy with a pool-wide limit of 50, so that even if > the connections are well distributed and no one server is maxed out, > after 50 connections to all servers, haproxy will still start to queue > instead. > > fullconn seems like the right way to accomplish this, however I cannot > get it to work. I've tried a simple setup of 2 servers, each with > `maxconn 3`, and then a backend `fullconn 2`, which should result in > queuing after 2 simultaneous connections, however it doesn't. If I send > 4 connections, all 4 are simultaneously sent to the backend servers. > > Here's my test config: > defaults > log 127.0.0.1:1234 daemon > mode http > option httplog > timeout queue 5s > frontend f1 > bind :8001 > default_backend b1 > backend b1 > fullconn 2 > server s1 127.0.0.1:8081 minconn 1 maxconn 3 > server s2 127.0.0.1:8081 minconn 1 maxconn 3 > > Here's how I test: > for i in {1..4}; do curl "http://localhost:8001/?sleep=2&num=$i" & done > > And here's the logs: > <30>Jun 28 11:37:47 haproxy[75322]: 127.0.0.1:55119 > [28/Jun/2019:11:37:45.658] f1 b1/s2 0/0/0/2003/2003 200 75 - - ---- > 4/4/3/2/0 0/0 "GET /?sleep=2&num=3 HTTP/1.1" > <30>Jun 28 11:37:47 haproxy[75322]: 127.0.0.1:55117 > [28/Jun/2019:11:37:45.658] f1 b1/s2 0/0/0/2003/2003 200 75 - - ---- > 4/4/2/1/0 0/0 "GET /?sleep=2&num=4 HTTP/1.1" > <30>Jun 28 11:37:47 haproxy[75322]: 127.0.0.1:55118 > [28/Jun/2019:11:37:45.658] f1 b1/s1 0/0/0/2003/2003 200 75 - - ---- > 4/4/1/2/0 0/0 "GET /?sleep=2&num=1 HTTP/1.1" > <30>Jun 28 11:37:47 haproxy[75322]: 127.0.0.1:55120 > [28/Jun/2019:11:37:45.658] f1 b1/s1 0/0/0/2003/2003 200 75 - - ---- > 4/4/0/1/0 0/0 "GET /?sleep=2&num=2 HTTP/1.1" > >
Your e-mail client mangled above log lines and as a result they are bit unreadable. The 4th field from `4/4/3/2/0` is srv_conn *2* which is below the maxconn of *3*, so haproxy did the right thing as it didn't allow more than *full_conn* connections to be concurrently opened against the server. Cheers, Pavlos