HAProxy 和“分片”

HAProxy 和“分片”

我从 stack overflow 交叉发布了此内容,因为有人建议我可能会在这里得到更好的答案...

我想知道是否有人使用过 HAProxy 进行分片。具体来说,我希望能够使用我定义的带有标识符的 cookie,并让任何提供该 cookie/标识符组合的客户端都定向到同一台服务器。这似乎是可能的,我的初步测试似乎有效,但我不确定。

我的监听配置如下:

listen  appli1-rewrite 0.0.0.0:80
cookie  mysession= prefix
balance roundrobin
server  app1_1 192.168.0.1:80 cookie server01
server  app1_2 192.168.0.2:80 cookie server02
option  httpclose

但是,当我使用 Live Http Headers 查看请求标头时,我没有看到指示它将转到哪个服务器的 mysession cookie,而这正是我根据前缀操作所期望的。我对 HAProxy 还很陌生,所以任何帮助/指导都很好!

答案1

首先,删除 cookie 名称后面的等号,否则它永远不会匹配。其次,请确保您的服务器正确设置了“mysession”cookie,因为 cookie 前缀模式依赖于服务器来设置 cookie。如果没有,请改用插入模式。第三,请在您的配置中添加“option httpclose”,因为如果有任何类型的 keepalive,haproxy 将看不到 cookie(或无法破坏它)。

希望这能有所帮助,
威利

答案2

您的配置没问题。您可以在日志中检查客户端提供的 cookie 是否被识别和使用。它会将字母“V”放在 4 个字符状态标志的第一个位置(例如:VN--)。没有有效 cookie 的第一个请求将改为“N”。请查看文档以获取更多信息,您将在 8.5 节中找到所有这些信息。您还可以启用统计页面并在浏览时查看它们。您应该看到“LbTot”列只会在每个新客户端上增加一次,并且对于同一个客户端不再增加。

答案3

您可以在监听部分尝试捕获 cookie 功能(完全取决于所服务的应用程序),参见:http://haproxy.1wt.eu/download/1.3/doc/configuration.txt

只捕获第一个 cookie。“cookie”请求标头和“set-cookie”响应标头均受监控。这对于检查导致用户之间会话交叉或窃取的应用程序错误特别有用,因为通常用户的 cookie 只能在登录页面上更改。

示例:捕获 cookie ASPSESSION len 32


顺便说一句,看起来你的配置没问题。

答案4

我尝试了 cookie 捕获,但它并没有显示出与实时 http 标头显示的任何区别...当我更改配置使得 haproxy 插入其自己的 cookie 时,我可以在 http 标头中看到它...我开始相信我最初的测试可能有问题。

相关内容