Предположим, у меня есть две базы данных Redis, и я хочу распределять 70% запросов в DB1, а остальные 30% - в DB2. Как я могу рассчитать параметр веса?
global
maxconn 20000
log 127.0.0.1 local0
user haproxy
chroot /usr/share/haproxy
pidfile /run/haproxy.pid
daemon
defaults REDIS
mode tcp
timeout connect 4s
timeout server 30s
timeout client 30s
listen stats
bind :9000 # Listen on localhost:9000
mode http
stats enable # Enable stats page
stats hide-version # Hide HAProxy version
stats realm Haproxy\ Statistics # Title text for popup window
stats uri /haproxy_stats # Stats URI
stats auth admin:123 # Authentication credentials
frontend ft_redis
bind 127.0.0.1:5000 name redis
default_backend bk_redis
backend bk_redis
balance roundrobin
option tcp-check
tcp-check connect
tcp-check send PING\r\n
tcp-check expect string +PONG
tcp-check send info\ replication\r\n
tcp-check expect string role:master
tcp-check send QUIT\r\n
tcp-check expect string +OK
server redis_6379 localhost:7000 check inter 1s weight 179
server redis_6380 localhost:7001 check inter 1s weight 77
weight
имеет допустимый диапазон от 1 до 256 для каждого сервера, но вам не обязательно использовать 256 в качестве основы для расчета.
Вес каждого сервера - это отношение заявленного веса этого сервера к сумме всех заявленных весов, поэтому с двумя серверами вы можете просто использовать значения 30 и 70, и распределение будет таким, как вы ожидаете: 30 ÷ (30 + 70 ) = 0,3 и 70 ÷ (30 + 70) = 0,7. Сервер, который «весит больше», получает пропорционально больше запросов. Вы также можете использовать 3 и 7, 33 и 77 или комбинацию из диапазона 1–256.
Используемые вами значения, 77 и 179, должны дать аналогичные результаты, поскольку 77 ÷ (77 + 179) ≈ 0,3 и 179 ÷ (77 + 179) ≈ 0,7 ... просто сложнее произвести мысленный расчет. Сохранение вашей конфигурации таким образом, чтобы все веса складывались в общую сумму 100, - это более удобное для человека решение.