用HAProxy分组networking会话

我想用HAProxy来平衡Web请求。 问题是,我希望特定的用户组总是去同一台服务器。 (这是一个多人游戏系统,同一组中的用户需要在同一台服务器上)。 只要具有相同组ID的用户在同一台​​服务器上,用户就可以访问任何服务器。 服务器甚至可以改变(例如,如果服务器停机),但是该组的所有用户必须切换到新的服务器。 应用服务器将用cookie标识用户的分组。

作为一个具体的例子,假设我的应用程序有一个编号为1..10000的cookie GROUP_ID。 可能有3个不同的GROUP_ID = 1的用户,3个不同的GROUP_ID = 2的用户等。假设我在服务器上设置了负载均衡:app1,app2,app3。

我想看到的是类似的东西:

  • 所有GROUP_ID = 1个用户都转到app1
  • 所有GROUP_ID = 2个用户都转到app2
  • 所有GROUP_ID = 3个用户都转到app3
  • 所有GROUP_ID = 4个用户都转到app1
  • 所有GROUP_ID = 5个用户都转到app2

等等

如果服务器app1变得没有反应,那么我想看到app1用户在app2和app3之间重新分配。 (如果所有的团体都重新洗牌,那就没问题了)。 来自特定组的所有用户仍应位于通用服务器上。

显然,网站的初始请求不会有cookie,但一旦用户authentication,他们将被分配cookie。

HAProxy是否支持这种自定义负载平衡?

1)build立一个HAPROXY前端,用:

  • 一个专门的后台为您的身份validation(login到游戏)。 当您进行身份validation时,您将设置一个名为“GROUPID”的Cookie。 (即:GROUPID = GID3)。 (注意:您也可以将“groupid”作为parameter passing给URL并/或设置到期时间等。)

  • 为您的游戏服务器提供一个专用的后端,并带有以下指令:

    cookie GROUPID插入间接nocache

2)设置您的服务器(在后端)作为( 注意:检查部分可以删除 ):

server APP01 10.0.0.5:80 cookie GID3 check inter 5000 rise 2 fall 3 maxconn 2048 server APP02 10.0.0.6:80 cookie GID4 check inter 5000 rise 2 fall 3 maxconn 2048 (...) 

为了进一步的参考,HAPROXY的文档是非常明确的( http://haproxy.1wt.eu/download/1.4/doc/configuration.txt