我正在努力将我的应用程序扩展到多台服务器,并且一个要求是客户端始终与同一台服务器通信(使用了太多实时数据以允许在服务器之间有效地反弹)。
我当前的设置是一个小型服务器集群(使用 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/