haproxy - 如何使 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
好吧,就像说的那样,我需要一个“这里两个请求,那里两个请求”循环模式,但它一直在做“一个这里,一个那里”。
很高兴有任何提示,干杯,阿伦德
解决方案
要在请求一次到达服务器 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
仍会随机平衡您的请求。
推荐阅读
- workflow-foundation - 如何在 Workflow Foundation 的自定义活动设计器上设置自定义图标?
- json - 从 Go 中的 json 文件中读取多个 json 对象
- java - Swing 布局未正确显示
- drupal - gatsby-source-drupal 不显示 graphql 查询
- r - ggplot2 - 如何将标签添加到堆叠百分比条形图
- typescript - 过滤树结构直到总项目达到其限制
- java - 如何将 WAV 文件 y 附加到现有的 WAV 文件 x, st x += y 中?
- hashicorp-vault - Kubernetes 到 Vault 身份验证失败
- c++ - 具有深度睡眠模式的低功耗 ESP32 + LoRa (TTGO LoRa32 OLED Board V1.0)
- asp.net-mvc - 如何从 XSD 和 WSDL 文件创建 web 服务?