我正在努力寻找特定负载平衡要求的解决方案。看来 HAProxy、Nginx、Varnish 和 Apache 的 mod_proxy_balancer 的各种组合可以满足我们的部分需求,但不是全部。我的问题是是否有人可以建议一种合适的配置(可能包括我们可能没有考虑过的软件,但它必须是 FOSS)。
不幸的是,关键要求是粘性会话。我们有一个大型、复杂的 Tomcat 应用程序,它在某种程度上滥用了 HTTP 会话,并且它利用了执行相同操作的框架。转换为无状态设计或复制会话都已进行了调查并被否决。此外,粘性必须基于 cookie 而不是 IP 哈希,因为我们有来自企业客户的大量峰值,其中数千个用户可能同时从同一 IP 地址访问网站。
第二个最重要的要求是动态后端。此应用程序在云中运行(不是 AWS),并且应用服务器会根据自动或手动扩展不时地启动和停止。
第三,我们需要能够将服务器标记为“静止”,以便它们继续遵守现有会话,但不会接受新会话。当所有当前会话结束时,可以关闭或升级/重新启动服务器。
还有一些其他的复杂性/要求,但满足上述三个要求似乎是最困难的。
根据迄今为止的研究,我认为以下陈述是正确的:
- Nginx/Varnish 无法满足粘性会话要求(基于 cookie),但 HAProxy 和 Apache 可以
- HAProxy 无法在不重启的情况下进行动态后端修改(如果速度快的话可能没问题)。Varnish 可以通过一些 VCL 更改和 HUP 来实现,我认为 Nginx 也可以通过一些有创意的配置文件管理来实现。Apache 是否可以通过 mod_proxy_balancer 的托管接口来处理这个问题……?
- 我不确定他们是否/如何处理第三个要求
非常感谢任何指点或见解。
答案1
使用 HAProxy,您可以添加所有可能的后端服务器,然后使用管理页面/套接字调用打开和关闭它们(硬或软)。
这怎么不符合你的要求呢?