负载平衡(HAProxy或其他) - 粘性会话

时间:2011-06-27 19:40:48

标签: load-balancing cluster-computing haproxy

我正在努力将我的应用程序扩展到多个服务器,并且一个要求是客户端始终与同一服务器进行通信(过多的实时数据用于允许服务器之间的有效弹跳)。

我当前的设置是一个小型服务器群集(使用Linode)。我有一个使用“平衡源”运行HAProxy的前端节点,因此IP始终指向同一节点。

我注意到“平衡源”不是一个非常均匀的分布。使用我当前的测试设置(2个后端服务器),当使用80-100个源IP的样本时,一个服务器的连接数通常是3-4倍。

有没有办法实现更均衡的分配?显然粘性会议禁止“完美”平衡,但40/60分割比25/75分割更受欢迎。

2 个答案:

答案 0 :(得分:25)

HAProxy支持修改或插入cookie以使用cookie参数提供会话持久性。

在后端或监听部分中,添加以下内容:

cookie COOKIENAME prefix

此示例将通过将名称服务器添加到名为COOKIENAME的cookie来修改现有Cookie。您的客户会看到server1~someotherdata之类的内容,但您的应用只会看到someotherdata部分。所以你可以在现有的cookie上使用它。此外,此方法允许您仅在该cookie存在时强制执行会话持久性,这意味着您仍然可以均匀地平衡网站静态部分周围的人员,并仅在需要时强制执行粘性,但将cookie名称添加到会话中。

同时命名您的服务器,因此您的服务器行如下所示:

server server1 1.2.3.4 cookie server1

HAProxy config guide中有更详细的信息,看起来您也可以使用appsession配置参数。

完成此操作后,您可以从列表中选择自己的余额方法,我倾向于使用roundrobin,但leastconn可能会在考虑粘性会话后为您提供更好的平衡。


更多来自文档,以便更容易找到参考部分:

cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ]
              [ postonly ] [ preserve ] [ domain <domain> ]*
              [ maxidle <idle> ] [ maxlife <life> ]
  Enable cookie-based persistence in a backend.
  May be used in sections :   defaults | frontend | listen | backend
                                 yes   |    no    |   yes  |   yes

答案 1 :(得分:0)

您可以在HA-Proxy中调整平衡算法但有一些可用。像例如roundrobin或leastconn。

但是,您需要根据为其提供内容的用户的域来调整您的平衡。大多数情况下,您需要进行实证检验,并根据您的发现重申您的决定。