首页 > 解决方案 > 如何使 haproxy 向节点分配以下两个请求

问题描述

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

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

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

这并不是真正的平衡,因为提供 messageID 对服务器来说是一件轻而易举的事情,并且处理可能高达几百 MB 的消息都是由另一个节点完成的。

我查看了加权循环法,但如果对两台服务器都使用权重 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

好吧,就像说的那样,我需要一个“这里两个请求,那里两个请求”循环模式,但它一直在做“一个这里,一个那里”。

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

标签: haproxy

解决方案


要在请求一次到达服务器 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应该在您的服务器上随机平均分配请求的选项。我认为这可以更直接地解决您上面所说的平衡问题。此外,如果请求类型发生变化, usingbalance random仍会随机平衡您的请求。


推荐阅读