load-balancing - 负载平衡(HAProxy 或其他) - 粘性 session

标签 load-balancing cluster-computing haproxy

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

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

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

有什么方法可以实现更均衡的分布?显然,粘性 session 禁止“完美”平衡,但 40/60 拆分比 25/75 拆分更可取。

最佳答案

HAProxy 支持修改或插入 cookie 以提供 session 持久性与 cookie范围。

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

cookie COOKIENAME prefix

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

还要命名您的服务器,因此您的服务器行如下所示:
server server1 1.2.3.4 cookie server1

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

完成此操作后,您可以从列表中选择自己的余额方法,我倾向于使用 roundrobin但是 leastconn一旦考虑到粘性 session ,可能会给您带来更好的平衡。

更多来自文档,以便更容易找到引用部分:
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

关于load-balancing - 负载平衡(HAProxy 或其他) - 粘性 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6498030/

相关文章:

linux - 在 Linux 上安装 F5 负载均衡器

hadoop - 在 yarn 集群上设置 spark 时需要哪些守护进程?

logging - 记录 HAProxy 自定义 header

cassandra - 从同一台机器上运行多个 cassandra 节点(一个集群)?

macos - mac osx 上的 haproxy 登录

docker - 如何使用ansible docker_container模块重新加载配置?

asp.net - 在 ASP.NET 中,有没有办法编写自定义负载均衡器?

node.js - Express Session 可以使用负载均衡器创建相同的 session ID

java - 将负载均衡器绕过不同 Web 应用程序的特定服务器

c# - 我怎样才能像在终端上一样获取集群信息,但在我的 c# 客户端 (stackexchange) 上?