假设我有两个 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
答案1
weight
对于每个服务器,有效范围是 1 到 256,但不必使用 256 作为计算的基础。
每台服务器的权重是该服务器声明的权重与所有声明权重之和的比率,因此对于 2 台服务器,您只需使用值 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 是一个更人性化的解决方案。