Hello,

Am 09.05.2017 um 00:38 schrieb redundantl y:
> I am running haproxy 1.5.18-3 on CentOS 7 and need to use the
> stick-table feature to make sure traffic for a specific user persists
> to a given server.
>
> Things work fine when connections come in slowly, however when there's
> numerous simultaneous connections and a stick-table entry doesn't
> exist yet some requests will be sent to both backend servers until
> they eventually stick to just one.
>
> For example, using Apache Bench to test:
>
> ab -c 10 -n 30 'http://example.com/index.php?email=a...@example.com'
>
> I see this in the haproxy log:
>
> May  8 14:49:10 localhost haproxy[4996]: 1.2.3.4:50812
> <http://1.2.3.4:50812> [08/May/2017:14:49:10.934] http_front
> backend/server-1 0/0/0/7/7 200 222 - - ---- 9/9/9/4/0 0/0 "GET
> /index.php?email=a...@example.com <mailto:a...@example.com> HTTP/1.0"
> May  8 14:49:10 localhost haproxy[4996]: 1.2.3.4:50811
> <http://1.2.3.4:50811> [08/May/2017:14:49:10.933] http_front
> backend/server-2 0/0/0/8/8 200 222 - - ---- 8/8/8/4/0 0/0 "GET
> /index.php?email=a...@example.com <mailto:a...@example.com> HTTP/1.0"
> May  8 14:49:10 localhost haproxy[4996]: 1.2.3.4:50816
> <http://1.2.3.4:50816> [08/May/2017:14:49:10.935] http_front
> backend/server-1 0/0/0/7/7 200 222 - - ---- 7/7/7/1/0 0/0 "GET
> /index.php?email=a...@example.com <mailto:a...@example.com> HTTP/1.0"
> May  8 14:49:10 localhost haproxy[4996]: 1.2.3.4:50819
> <http://1.2.3.4:50819> [08/May/2017:14:49:10.935] http_front
> backend/server-2 0/0/1/6/7 200 222 - - ---- 6/6/6/1/0 0/0 "GET
> /index.php?email=a...@example.com <mailto:a...@example.com> HTTP/1.0"
> May  8 14:49:10 localhost haproxy[4996]: 1.2.3.4:50814
> <http://1.2.3.4:50814> [08/May/2017:14:49:10.935] http_front
> backend/server-1 0/0/0/7/7 200 222 - - ---- 5/5/5/1/0 0/0 "GET
> /index.php?email=a...@example.com <mailto:a...@example.com> HTTP/1.0"
> May  8 14:49:10 localhost haproxy[4996]: 1.2.3.4:50810
> <http://1.2.3.4:50810> [08/May/2017:14:49:10.933] http_front
> backend/server-1 0/0/0/9/9 200 222 - - ---- 4/4/4/0/0 0/0 "GET
> /index.php?email=a...@example.com <mailto:a...@example.com> HTTP/1.0"
> May  8 14:49:10 localhost haproxy[4996]: 1.2.3.4:50813
> <http://1.2.3.4:50813> [08/May/2017:14:49:10.934] http_front
> backend/server-2 0/0/0/8/8 200 222 - - ---- 3/3/3/0/0 0/0 "GET
> /index.php?email=a...@example.com <mailto:a...@example.com> HTTP/1.0"
> May  8 14:49:10 localhost haproxy[4996]: 1.2.3.4:50815
> <http://1.2.3.4:50815> [08/May/2017:14:49:10.935] http_front
> backend/server-2 0/0/0/7/7 200 222 - - ---- 2/2/2/0/0 0/0 "GET
> /index.php?email=a...@example.com <mailto:a...@example.com> HTTP/1.0"
> May  8 14:49:10 localhost haproxy[4996]: 1.2.3.4:50817
> <http://1.2.3.4:50817> [08/May/2017:14:49:10.935] http_front
> backend/server-2 0/0/0/7/8 200 222 - - ---- 1/1/1/0/0 0/0 "GET
> /index.php?email=a...@example.com <mailto:a...@example.com> HTTP/1.0"
> May  8 14:49:10 localhost haproxy[4996]: 1.2.3.4:50818
> <http://1.2.3.4:50818> [08/May/2017:14:49:10.935] http_front
> backend/server-1 0/0/1/6/8 200 222 - - ---- 0/0/0/0/0 0/0 "GET
> /index.php?email=a...@example.com <mailto:a...@example.com> HTTP/1.0"
> May  8 14:49:10 localhost haproxy[4996]: 1.2.3.4:50820
> <http://1.2.3.4:50820> [08/May/2017:14:49:10.967] http_front
> backend/server-1 0/0/0/5/5 200 222 - - ---- 3/3/2/2/0 0/0 "GET
> /index.php?email=a...@example.com <mailto:a...@example.com> HTTP/1.0"
> May  8 14:49:10 localhost haproxy[4996]: 1.2.3.4:50821
> <http://1.2.3.4:50821> [08/May/2017:14:49:10.968] http_front
> backend/server-1 0/0/0/4/4 200 222 - - ---- 2/2/2/2/0 0/0 "GET
> /index.php?email=a...@example.com <mailto:a...@example.com> HTTP/1.0"
> May  8 14:49:10 localhost haproxy[4996]: 1.2.3.4:50823
> <http://1.2.3.4:50823> [08/May/2017:14:49:10.972] http_front
> backend/server-1 0/0/1/5/6 200 222 - - ---- 7/7/7/7/0 0/0 "GET
> /index.php?email=a...@example.com <mailto:a...@example.com> HTTP/1.0"
> May  8 14:49:10 localhost haproxy[4996]: 1.2.3.4:50822
> <http://1.2.3.4:50822> [08/May/2017:14:49:10.972] http_front
> backend/server-1 0/0/0/8/8 200 222 - - ---- 6/6/6/6/0 0/0 "GET
> /index.php?email=a...@example.com <mailto:a...@example.com> HTTP/1.0"
> [...]
>
> After this point haproxy correctly sends all traffic to server-1. When
> the stick-table entry expires the problem occurs again.
>
> I have tried persisting off a url parameter and source address, both
> exhibit the same issue.
>
> Is haproxy unable to properly handle numerous simultaneous
> (concurrent) requests like this? Is there something I can do to get
> this to work as desired?

Those 10 concurrent requests are not elaborated sequentially, haproxy is
a event-loop based application and handles those request in parallel.
Meaning in this case all of those 10 request are load-balanced without
stickiness.

Use "-c 1" and maybe "-k" to enable keepalive in ab, which will be more
inline with what happens in the real world.


Regards,
Lukas


Reply via email to