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

18

我正在将我的应用程序扩展到多个服务器,并且要求客户端始终与同一台服务器通信(使用太多实时数据会使在多个服务器之间跳转变得效率低下)。

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

我注意到“balance source”并不是一个非常均衡的分布方式。在我的当前测试环境中(2个后端服务器),当使用80-100个源IP的样本大小时,一个服务器经常拥有3-4倍于另一个服务器的连接数。

有没有办法实现更平衡的分布? 显然,粘性会话会阻碍“完美”的平衡,但40/60的比例优于25/75的比例。

2个回答

27

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

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

cookie COOKIENAME prefix

这个示例会通过向名为COOKIENAME的Cookie添加服务器名称来修改现有的Cookie。您的客户端将看到类似于server1~someotherdata的内容,但您的应用程序只能看到someotherdata部分。 因此,您可以在现有的Cookie上使用此方法。此外,此方法允许您仅在存在该Cookie时强制执行会话保留,这意味着您仍然可以平衡站点的静态部分周围的人,并且只在需要时将Cookie名称添加到会话中以实现粘性。

还要给您的服务器命名,使您的服务器行如下所示:

server server1 1.2.3.4 cookie server1

更多详细信息请参见HAProxy配置指南,看起来你也可以使用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

0

你可以在HA-Proxy中调整负载均衡算法,有一些可用的算法,例如轮询或最小连接数。

但是你需要根据用户域名调整负载均衡。大多数情况下,你需要进行实证测试,并根据你的发现反复决策。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接