我们的其中一个 Web 服务器集群为中等数量的繁忙电子商务应用程序提供服务。目前,每个站点都驻留在特定的 Web 服务器上,并有一个热备副本镜像到集群中的另一个 Web 服务器。如果服务器出现故障,则需要手动重新激活其故障转移服务器上的站点。我们已经到了需要一个更好的解决方案的地步,不仅是针对故障,而且是为了让我们可以在不停机的情况下将机器停机进行维护。
我们正在考虑构建一个由 2-3 个HAProxy服务器组成的集群(主要是因为它具有出色的性能记录)以放在 Web 服务器的前面。根据我的阅读,它将满足我们对会话管理和将用户保持在同一台服务器等方面的大部分需求。我们最关心的是 SSL 证书。每个站点都有自己的 SSL 证书。由于最终用户将连接到 HAProxy 服务器,我只能假设我们需要将证书移动到 HAProxy 集群中的每台机器上。由于 HAProxy 不直接处理 SSL,我读到我们可以通过反向代理类型转发安排在同一系统上使用 Apache+mod_ssl 完成此操作。
所以,我的具体问题是 HAProxy 是否真的是适合这项工作的工具?现有的 SSL 证书(目前在 Windows 2003 Server 上,一些是 EV-SSL 证书)是否可以移植到 Apache?是否有其他我们应该考虑的软件或硬件解决方案(使用带有 SSL 站点的 HAProxy 似乎比它需要的更复杂)?在设置高可用性 SSL Web 集群时还有其他我们可能没有考虑过的注意事项吗?
如果您愿意使用 Microsoft/IIS 7 解决方案,一种选择是使用 IIS7 的应用程序请求路由 (ARR)。
在 learn.iis.net 上的这篇文章中有一个介绍/教程:HTTP Load Balancing using Application Request Routing。有一个称为“SSL 卸载”的功能:
如果你想深入研究这个主题,这里是另一篇关于 ARR 的文章,它解释了如何结合硬件负载均衡器使用该机制。
在过去,我设置了类似的东西,但是我们正在运行非常消耗资源的 mod perl 应用程序。所以我们基本上最终在应用服务器前面使用了 squid,我们使用 apache+proxy 来实现 ssl 卸载,这样我们就可以通过 squid 缓存所有内容。对于集群部分,我们使用 LVS(linux 虚拟服务器)+heartbeat 进行故障转移负载平衡器对于我使用的 ssl 卸载方法,请参阅我博客上的这篇文章以获取更多信息
有一些方法可以使用 HAProxy 配置您所追求的目标,但它们要求 ssl 证书位于将要使用的所有服务器上。我遇到但从未使用过的另一个选项是一个名为pound的应用程序,它在设计时考虑了负载平衡 ssl 服务器