如何使haproxy向节点分配两个以下请求

How to make haproxy dispense two following requests to a node

在双节点场景中,使用 roundrobin,我希望 haproxy 在切换到下一个节点之前向每个节点分配两个请求。

我有一个消息传递应用程序,它发出一个获取消息 ID 的请求,然后发出下一个发送消息的请求。

如果我在两台后端服务器上使用标准循环算法,这会导致一台服务器只收到 messageID 请求,而另一台服务器执行所有消息发送。

这并不是真正的平衡,因为提供 messageIDs 对服务器来说很简单,而处理消息(最多可达几百兆字节)则全部由另一个节点完成。

我查看了加权循环法,但如果对两个服务器使用权重 2 时似乎无法解决问题,因为权重似乎是相对于彼此计算的。

我很高兴得到任何提示,如何在发送两个请求而不是一个请求后实现 haproxy 切换后端节点。

这是我当前的配置,它仍然导致一个更清晰的这里那里一个循环模式:

### frontend XTA Entry TLS/CA
frontend GMM_XTA_Entry_TLS_CA

  mode tcp

  bind 10.200.0.20:8444

  default_backend GMM_XTA_Entrypoint_TLS_CA

### backend XTA Entry TLS/CA

backend GMM_XTA_Entrypoint_TLS_CA

  mode tcp 

  server GMMAPPLB1-XTA-CA 10.200.0.21:8444 check port 8444 inter 1s rise 2 fall 3 weight 2

  server GMMAPPLB2-XTA-CA 10.200.0.22:8444 check port 8444 inter 1s rise 2 fall 3 weight 2

嗯,如前所述,我需要一个 "two requests here, two requests there" 循环模式,但它一直在做 "one here, one there"。

很高兴得到任何提示,干杯, 阿伦德

要在请求一次发送到服务器 2 的情况下获得所需的行为,您可以为每个后端添加一个额外的连续服务器行,如下所示:

backend GMM_XTA_Entrypoint_TLS_CA
  balance roundrobin
  mode tcp 

  server GMMAPPLB1-XTA-CA_1 10.200.0.21:8444 check port 8444 inter 1s rise 2 fall 3 
  server GMMAPPLB1-XTA-CA_2 10.200.0.21:8444 track GMMAPPLB1-XTA-CA_1 
  server GMMAPPLB2-XTA-CA_1 10.200.0.22:8444 check port 8444 inter 1s rise 2 fall 3
  server GMMAPPLB2-XTA-CA_2 10.200.0.22:8444 track GMMAPPLB2-XTA-CA_1

但是,如果您可以使用 HAProxy 1.9 或更高版本,您还可以使用 balance random 选项,该选项应该在您的服务器之间随机平均分配请求。我认为这可能更直接地解决你上面所说的平衡问题。此外,如果请求类型发生变化,使用 balance random 仍会随机平衡您的请求。

在后端使用 4 个服务器条目的建议答案完成了这项工作。 我不确定它是否是最优雅的解决方案,但它确实帮助我更多地了解后端的使用,再次感谢。