我正在努力将我的应用程序向外扩展到多个服务器,其中一个要求是客户端始终与同一服务器通信(使用太多的实时数据来允许在服务器之间高效地跳转)。
我当前的设置是一个小型服务器集群(使用Linode)。我有一个运行HAProxy的前端节点,使用"balance source“,这样IP总是指向相同的节点。
我注意到“平衡源”并不是一个非常均匀的分布。使用我当前的测试设置(2个后端服务器),当使用80-100个源IP的样本大小时,一台服务器的连接数通常是3-4倍。
有没有办法实现更均衡的分配?显然,粘性会话禁止“完美”平衡,但40/60拆分比25/75拆分更可取。
发布于 2011-06-29 19:42:10
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
发布于 2011-06-28 03:50:47
你可以在HA-Proxy中调整平衡算法,不过也有一些是可用的。例如,roundrobin或leastconn。
但是你需要根据内容所服务的用户的领域来调整你的平衡。大多数时候,你需要做实证测试,并根据你的发现重申你的决定。
https://stackoverflow.com/questions/6498030
复制相似问题