HAProxy和“分片”

我交叉发布这从堆栈溢出,因为它被build议我可能会得到一个更好的答案在这里…

我想知道是否有人使用HAProxy进行分片。 具体来说,我希望能够使用我定义的w / a标识符的cookie,并有任何客户端提出该cookie /标识符组合被定向到同一个服务器。 这似乎是可能的,我的初步testing似乎工作,但我不是一个确定的。

我的听configuration如下所示:

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很陌生,所以任何帮助/指导都会很棒!

首先,删除你的cookie名后的等号,否则永远不会匹配。 其次,请确保您的服务器正确设置“mysession”cookie,因为cookie前缀模式依赖于服务器来设置cookie。 如果不是,请改用插入模式。 第三,请在你的configuration文件中添加“选项httpclose”,因为如果存在任何forms的存活,haproxy将不会看到cookie(或者不能破坏它)。

希望这有助于,
威利

你的configuration是好的。 您可以检查客户提供的cookie被识别和使用的日志。 它将把字母“V”放在四字符状态标志的第一个位置(例如:VN–)。 没有有效的cookie的第一个请求将会有一个“N”。 请查看文档了解更多信息,您将在第8.5节中获​​得所有信息。 您还可以启用统计信息页面,并在浏览时检查它们。 您应该看到,“LbTot”列每增加一个客户端只会增加一次,并且不会为同一个客户端增加。

您可以在listen部分尝试捕获cookiefunction(全部取决于所提供的应用程序),请参阅: http : //haproxy.1wt.eu/download/1.3/doc/configuration.txt :

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

示例:捕获cookie ASPSESSION len 32

顺便说一句,似乎你的configuration是好的。

 listen corporate_web_live bind 1.2.3.4:80 # site1.com bind 1.2.3.5:80 # site2.com option httpchk HEAD /server.txt HTTP/1.0 cookie HAPSRV insert postonly indirect server webapp-corp-1 10.0.0.1:80 weight 50 maxconn 150 slowstart 30s cookie WAC1 check server webapp-corp-2 10.0.0.2:80 weight 50 maxconn 150 slowstart 30s cookie WAC2 check server webapp-corp-3 10.0.0.3:80 weight 50 maxconn 150 slowstart 30s cookie WAC3 check server webapp-corp-4 10.0.0.4:80 weight 50 maxconn 150 slowstart 30s cookie WAC4 check server webapp-corp-5 10.0.0.5:80 weight 50 maxconn 150 slowstart 30s cookie WAC5 check server webapp-corp-6 10.0.0.6:80 weight 50 maxconn 150 slowstart 30s cookie WAC6 check 

在上面的例子中,注意使用“insert”,“postonly”和“indirect” – 这会导致HAproxy根据需要在cookie中查找遍历它的stream。

我试图cookie捕获,并没有显示任何差异从什么生活的HTTP标题显示了我…当我做了更改configuration,使haproxy将插入自己的cookie,我可以看到它在http头…我开始相信我原来的testing可能是错误的。