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

我正在努力将我的应用程序扩展到多个服务器,一个要求是客户端始终与同一台服务器通信(使用太多的实时数据可以有效地在服务器之间弹跳)。

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

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

有没有办法实现更均衡的分配?显然,粘性会议禁止“完美”的平衡,但是40/60的分割将优于25/75分裂。

最佳答案
HAProxy支持修改或插入cookie以提供与cookie参数的会话持久性。

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

cookie COOKIENAME prefix

此示例将通过将服务器的名称添加到名为COOKIENAME的cookie来修改现有的cookie。你的客户端会看到像server1〜someotherdata这样的东西,但你的应用程序只会看到someotherdata的部分。所以你可以使用现有的cookies。此外,该方法允许您仅在该Cookie存在时强制执行会话中断,这意味着您仍然可以均匀地平衡站点静态部分周围的人员,并且仅在需要时强制执行粘性,但将Cookie名称添加到会话中。

也可以命名您的服务器,因此您的服务器线条如下所示:

server server1 1.2.3.4 cookie server1

更多的细节是在HAProxy config guide,它也看起来像你也可以使用appsession配置参数。

一旦你这样做,你可以从列表中选择你自己的平衡方法,我倾向于使用roundrobin,但是最低限度可能会给你一个更好的平衡一旦粘性会议被考虑。

参考文献资料更容易找到:

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

转载注明原文:负载平衡 – 负载平衡(HAProxy或其他) – 粘性会话 - 代码日志