У меня есть веб-страница, которая работает на 1 сервере. Мы в процессе перехода на новую платформу с 3 серверами.
На первом этапе плана миграции нам нужно передать процент, скажем, 10% новому кластеру и 90% старому серверу. У новой платформы не обязательно должны быть закрепленные сеансы (общие сеансы с memcached).
Есть ли способ сделать это с помощью haproxy?
Этого можно достичь, подключив haproxy к самому себе, что даст вам два уровня балансировки нагрузки.
Первый listen
использует balance source
параметр и веса сервера, чтобы разделить трафик между существующим сервером и кластером. Второй уровень использует balance roundrobin
без необходимости чередовать входящие соединения между членами кластера.
Listen 10.0.1.1:80
Balance source
Server oldserver 10.0.1.10 weight 90
Server newcluster 10.0.1.20 weight 10
Listen 10.0.1.20:80
Balance roundrobin
Server cluster1 10.0.1.31
Server cluster2 10.0.1.32
Server cluster3 10.0.1.33
Вы определяете веса в haproxy, чтобы распределить нагрузку в соответствии с вашими потребностями.
Из официальной документации haproxy 1.4:
weight <weight>
The "weight" parameter is used to adjust the server's weight relative to
other servers. All servers will receive a load proportional to their weight
relative to the sum of all weights, so the higher the weight, the higher the
load. The default weight is 1, and the maximal value is 256. A value of 0
means the server will not participate in load-balancing but will still accept
persistent connections. If this parameter is used to distribute the load
according to server's capacity, it is recommended to start with values which
can both grow and shrink, for instance between 10 and 100 to leave enough
room above and below for later adjustments.
Используйте вес в разделе haproxy server. «Вес 1 представляет самую низкую частоту, а 256 - самую высокую»
server newserver1 192.168.1.1:80 weight 3
server newserver2 192.168.1.2:80 weight 3
server newserver3 192.168.1.3:80 weight 3
server oldserver1 192.168.2.1:80 weight 90