我目前有一个网站在 Nginx 平台上运行,使用 PHP-FPM 和 APC。经过我的测试,它表现非常好。
我现在想添加故障转移功能,但又买不起硬件负载均衡器,所以考虑使用 HAProxy。
然而,这更多的是一个理论问题,两个 Nginx 服务器是否能够比 HAProxy 提供更多的页面,这意味着 HAProxy 会成为一个潜在的瓶颈。
答案1
开箱即用的 haproxy 使用双向路由,如果您的堆栈中有它,它传递的任何请求的响应都会通过它返回。有一种方法(我从未尝试过,因此无法提供任何见解)可以使其透明,其中原始 IP 在其转发的请求中传递。但是,这涉及重新编译内核,可能不是您想要走的路线。如果您想探索这一点,请谷歌搜索“tproxy”。
我使用 haproxy 来平衡 nginx-squid-haproxy-zope_clients 堆栈中的 Plone 客户端后端,并且没有遇到任何归因于 haproxy 的瓶颈。正如 vesterday 所说,haproxy 只使用内存规则集来路由流量。只要您的服务器有足够的资源,并且您没有使用交换,haproxy 将是您最不用担心的问题 - 即使那样,我也会首先查看其他罪魁祸首。
答案2
HAProxy 不太可能成为您的瓶颈,因为它只是路由连接,并不执行 Web 服务器通常必须执行的所有操作。
但是,您可能希望确保单个 HAProxy 实例不会成为单点故障。
答案3
HAProxy 是你最不需要担心的——它只是路由请求。虽然有时你会看到它发出的错误消息,但仔细检查后,问题通常源于后端服务器(容量问题、可用性、应用程序错误等)。
根据我的经验,我为 HAProxy 设置了故障转移,但 5 年(而且还在继续)以来,它都没有使用过!有趣的是,如果你像我一样偏执,你可以在所有层上设置故障转移!(我使用保持活跃为了那个原因。)