【问题标题】:Load Balancing (HAProxy or other) - Sticky Sessions负载平衡(HAProxy 或其他) - 粘性会话
【发布时间】:2011-09-23 18:59:21
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: load-balancing cluster-computing haproxy


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

      您可以在 HA-Proxy 中调整平衡算法,但有一些可用。就像例如循环或最小连接。

      但您需要根据为其提供内容的用户的域来调整您的平衡。大多数时候,您需要进行实证测试并根据您的发现重申您的决定。

      【讨论】:

        猜你喜欢
        • 2019-01-21
        • 2012-03-12
        • 2018-04-05
        • 2021-09-06
        • 1970-01-01
        • 1970-01-01
        • 2016-02-17
        • 2016-10-27
        • 1970-01-01
        相关资源
        最近更新 更多