Humble Freak
Humble Freak

Reputation: 459

Custom load balance logic in HAProxy

I am working on a video-conferencing application. We have a pool of servers where rooms are created, a room can have n number of users. I was exploring HAProxy and several other load balancers, but couldn't find any solution for what I was looking for.

My requirements are as follows

  1. A room should be created on the server with the lowest load at the time of creation.
  2. All users of that room should join on the same server.

I have tried url_param balance logic with consistent hashing, but it is distributing load randomly. Is it even possible with modern L7 load balancers or do I need to write some custom logic (in some load balancer) or a separate application for this scenario?

Is there any way of balancing load based on connections or CPU usage while maintaining the session stickiness?

Upvotes: 0

Views: 1194

Answers (1)

tbielaszewski
tbielaszewski

Reputation: 1084

balance documentation says you can choose algorithm like leastconn and that this only applies when no persistence information is available, or when a connection is redispatched to another server. So the second part of the answer are stick tables. Read docs about stick match and other stick keywords

So with stick table it looks like this:

backend foo
    mode http
    balance leastconn
    stick store-request src
    stick-table type ip size 200k expire 30m
    server s1 192.168.1.1:8080
    server s2 192.168.1.2:8080

There are more examples in the docs.
What you need to figure out (or tell us) is how can we know the room client wants based on the request and make such stick table and rules. If it's in URL or http header then it is perfectly doable in haproxy.
If leastconn is not good enough, then there is an option of dynamically adjusting servers' weights with haproxy's unix socket CLI and use roundrobin algorithm. Also agent options can be configured for servers to dynamically set servers' weights.

Upvotes: 1

Related Questions