我目前正在一组 IIS .NET 应用服务器前使用 HAProxy。出现了一个无法预料的问题:我正在使用 cookie 进行负载平衡,这显然不适用于拒绝使用 cookie 的浏览器(考虑到英国 cookie 法律的最新变化,我们在这里就不深入讨论了)。
这是我当前的 HAProxy 配置:
listen backend-servers 127.0.0.1:80
cookie bs insert
balance roundrobin
option persist
option redispatch
server appserver1 192.168.0.1:80 cookie bs1
server appserver2 192.168.0.2:80 cookie bs2
我不想重新设计应用程序所以我想在 HAProxy 中找到解决这个问题的方法。
有几个选项,例如使用源 IP 或 URL 中的字符串进行平衡,但是您可以在 HAProxy 中使用多种方法吗?您可以配置回退方法或类似方法吗?
谢谢
答案1
如果 cookie 没有保存,则 haproxybalance
仅根据您的关键字进行调度,即roundrobin
。
答案2
直接引用指南中的内容:
在下列情况下,提供有关 cookie 的信息并获得同意的要求存在例外:
(a) 仅用于通过电子通信网络传输通信;或
(b) 当此类存储或访问对于提供订户或用户请求的信息社会服务而言是绝对必要的。
如果您说的是用于让您留在正确的服务器上的 cookie...那 100% 属于 A 类。如果您将同一个 cookie 用于其他用途...那么请停止它。
答案3
这balance source
算法就是您要找的;从使用 转变过来roundrobin
。
源 IP 地址经过哈希处理后除以正在运行的服务器的总权重,以指定哪个服务器将接收请求。这可确保只要没有服务器宕机或启动,相同的客户端 IP 地址将始终到达相同的服务器。