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

Reply via email to