如何计算 HAProxy 循环权重

如何计算 HAProxy 循环权重

假设我有两个 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 是一个更人性化的解决方案。

相关内容