Hi Amit.
*Please keep the mailing list in loop, thanks.*
In case you haven't received my last mail here is the web link to the
maillinglist archive.
https://www.mail-archive.com/[email protected]/msg29252.html
Am 09.03.2018 um 07:43 schrieb amit raj:
Hello Alex,
Two things we have to achieve with the HAPROXY to be very clear.
1.The most important thing we want to achieve is uniform Load Balancing
(with sessions and bytes in and bytes out parameter should be uniform
across all the backend).
Let me describe what I have understood.
You want to use more the one balancing decision base.
* session (cookie, url, ...)
* bytes in. I assume from the client
* bytes out. I assume from the client
I this right? # <= Please answer this question, thanks.
Please can you describe in a ASCII flow how the decision flow should
work.
What I have seen in the doc are this acl samples
https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#7.3.1-table_bytes_in_rate
https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#7.3.1-table_bytes_out_rate
But I'm not sure if this is what you need.
2.When we have tried using keep-alive mode for achieving uniform load
balancing , the HAPROXY is sending RST for closing the connection with
the backend , this is what we really do not want .As per our use case
HAPROXY should use FIN to close the backend connection.
Currently we are using "option-http-tunnel" in the frontend of the
application and "no-http-tunnel" and "keep-alive" in the backend this
solves our RST issue and HAPROXY is closing the connection properly
with
FIN.But the uniform Load Balancing as I mentioned in point one got
screwed up.
Following are my basic HAPROXY config we are using for testing and
fixing the issue.
Thank you for the full haproxy config.
global
log /dev/log local0
log /dev/log local1 notice
# lua-load /etc/haproxy/parseJsonValue.lua
stats socket /var/run/haproxy/haproxy.sock mode 777 level admin
expose-fd listeners
chroot /var/lib/haproxy
#lua-load /etc/haproxy/lua
stats timeout 30s
user haproxy
group haproxy
# daemon
maxconn 2000
defaults
log global
mode http
retries 3
option httplog
#option http-server-close
option dontlognull
option forwardfor
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
#------------------
# internal statistics
#------------------
listen stats
bind ipv4@:8999
mode http
stats enable
stats uri /stats
#------------------
# frontend instances
#------------------
frontend test_ha
bind ipv4@:8080
option http-tunnel
# http-request add-header X-Internal-Value %[lua.parseJsonValue]
default_backend test_back
#------------------
# backend instances
#------------------
backend test_back
# http-request set-header X-LB
%[req.hdr(Host),lower]%[req.uri,lower]
balance roundrobin
no option http-tunnel
option http-keep-alive> # option http-server-close
#option http-buffer-request
# stick-table type string size 30k expire 30m
# stick on "lua.parseElement" table test_back
server test2 test02.xyz.abc.com:80 <http://test02.xyz.abc.com:80>
server test3 test03.xy.abc.com:80 <http://test03.xy.abc.com:80>
Please let me know if you need any other info.
Ah I think I understand now what you mean.
https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#4-stick-table
I haven't used stick-table very extensive so I hope a more experienced
Person will correct my suggestion.
--------------
frontend test_ha
bind ipv4@:8080
option http-tunnel
# http-request add-header X-Internal-Value %[lua.parseJsonValue]
stick-table type integer size 30k expire 30m store bytes_in_cnt
default_backend counter_out
backend counter_out
bind ipv4@:8081
option http-tunnel
stick-table type integer size 30k expire 30m store bytes_out_cnt
default_backend test_ha
backend be_test_ha
bind ipv4@:8082
option http-tunnel
# http-request add-header X-Internal-Value %[lua.parseJsonValue]
default_backend test_back
backend test_back
# http-request set-header X-LB %[req.hdr(Host),lower]%[req.uri,lower]
balance roundrobin>
no option http-tunnel
option http-keep-alive
# option http-server-close
#option http-buffer-request
# stick-table type string size 30k expire 30m
# stick on "lua.parseElement" table test_back
server test2 test02.xyz.abc.com:80 <http://test02.xyz.abc.com:80>
server test3 test03.xy.abc.com:80 <http://test03.xy.abc.com:80>
-----------------
Finally the question is, afaiu, how to balance based on test_ha AND
counter_out AND lua.parseElement
Best regards
Aleks