我正在努力将我的应用程序扩展到多个服务器,并且一个要求是客户端始终与同一服务器进行通信(过多的实时数据用于允许服务器之间的有效弹跳)。
我当前的设置是一个小型服务器群集(使用Linode)。我有一个使用“平衡源”运行HAProxy的前端节点,因此IP始终指向同一节点。
我注意到“平衡源”不是一个非常均匀的分布。使用我当前的测试设置(2个后端服务器),当使用80-100个源IP的样本时,一个服务器的连接数通常是3-4倍。
有没有办法实现更均衡的分配?显然粘性会议禁止“完美”平衡,但40/60分割比25/75分割更受欢迎。
答案 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。
但是,您需要根据为其提供内容的用户的域来调整您的平衡。大多数情况下,您需要进行实证检验,并根据您的发现重申您的决定。