首页 > 解决方案 > 如何在 HAProxy 中进行内部重定向?

问题描述

我们的有状态服务在操作记忆中保持会话。保存会话或从内存中获取会话大约需要一分钟,因此我们使用 Redis 来检测会话当前加载在哪个节点上以锁定对其他节点的请求。但 HAProxy 有时会在节点之间切换会话。发生这种情况时,例如,如果会话在第一个节点的可操作内存上,而我们正在切换到第二个节点,则请求等待,第一个节点需要保存其状态,第二个节点需要恢复它。当它发生时,HAProxy 可能认为该节点已关闭,因此 HAProxy 开始切换其他请求,其他请求也会发生相同的过程。我们增加了 HAProxy 等待超时,但它没有帮助。我们如何让 HAProxy 将此请求以及所有即将到来的请求从特定会话切换到特定节点?

就像是

303
Location: 192.168.1.2

标签: redirecthaproxy

解决方案


好的,所以您的应用程序需要会话粘性。
如果您已经为会话处理准备了 cookie,那么我建议您在 HAProxy 中也使用 cookie 粘性。

简而言之,此博客文章中的配置片段https://www.haproxy.com/blog/load-balancing-affinity-persistence-sticky-sessions-what-you-need-to-know/

backend bk_web
  balance roundrobin
  cookie SERVERID insert indirect nocache
  server s1 192.168.10.11:80 check cookie s1
  server s2 192.168.10.21:80 check cookie s2

@Baptiste 对设置 HAproxy 1.5.8 有相当详细的解释如何配置基于 Cookie 的粘性?

当您使用多个 HAProxy 服务器时,您可以通过本博客文章中描述的对等协议同步状态。
https://www.haproxy.com/blog/introduction-to-haproxy-stick-tables/


推荐阅读