首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >负载平衡(HAProxy或其他)-粘滞会话

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

Stack Overflow用户
提问于 2011-06-28 03:40:48
回答 2查看 26.8K关注 0票数 19

我正在努力将我的应用程序向外扩展到多个服务器,其中一个要求是客户端始终与同一服务器通信(使用太多的实时数据来允许在服务器之间高效地跳转)。

我当前的设置是一个小型服务器集群(使用Linode)。我有一个运行HAProxy的前端节点,使用"balance source“,这样IP总是指向相同的节点。

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

有没有办法实现更均衡的分配?显然,粘性会话禁止“完美”平衡,但40/60拆分比25/75拆分更可取。

EN

回答 2

Stack Overflow用户

发布于 2011-06-29 19:42:10

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

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

代码语言:javascript
运行
复制
cookie COOKIENAME prefix

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

还要为您的服务器命名,这样您的服务器行看起来就像下面这样:

代码语言:javascript
运行
复制
server server1 1.2.3.4 cookie server1

更多细节在HAProxy config guide中,看起来您也可以使用appsession配置参数。

一旦你这样做了,你可以从列表中选择你自己的平衡方法,我倾向于使用roundrobin,但是如果考虑到粘性会话,leastconn可能会给你更好的平衡。

有关文档的更多信息,以便更容易地查找参考部分:

代码语言:javascript
运行
复制
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
票数 27
EN

Stack Overflow用户

发布于 2011-06-28 03:50:47

你可以在HA-Proxy中调整平衡算法,不过也有一些是可用的。例如,roundrobin或leastconn。

但是你需要根据内容所服务的用户的领域来调整你的平衡。大多数时候,你需要做实证测试,并根据你的发现重申你的决定。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6498030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档