具有三台服务器的负载平衡PHP web应用程序

具有三台服务器的负载平衡PHP web应用程序,php,nginx,load-balancing,fastcgi,haproxy,Php,Nginx,Load Balancing,Fastcgi,Haproxy,我有两台web服务器和一台服务器,打算用作反向代理或负载平衡器。2个web服务器具有真实/公共IP以及负载平衡器。负载平衡器服务器尚未配置,因为我没有决定哪个选项最适合我的web应用程序。我知道一个负载平衡器是有风险的,因为“单点故障”,但我想用它 2个web服务器包含多个具有相同域和不同子域的PHP应用程序/vhost(Apache+fastcgi)。它们都使用会话、cookie,其中一些需要SSL。我的主要目标是将传入的连接一分为二,并将它们转发到2个web节点。如果一个web节点脱机,另一

我有两台web服务器和一台服务器,打算用作反向代理或负载平衡器。2个web服务器具有真实/公共IP以及负载平衡器。负载平衡器服务器尚未配置,因为我没有决定哪个选项最适合我的web应用程序。我知道一个负载平衡器是有风险的,因为“单点故障”,但我想用它

2个web服务器包含多个具有相同域和不同子域的PHP应用程序/vhost(Apache+fastcgi)。它们都使用会话、cookie,其中一些需要SSL。我的主要目标是将传入的连接一分为二,并将它们转发到2个web节点。如果一个web节点脱机,另一个应该接受所有连接。我认为如果需要,我们可以使用memcache进行会话共享

我读过关于Nginx、HaProxy和我在网上能找到的任何其他应用程序的文章。但我不能决定,因为:

1) 我有1台服务器可以用作负载平衡器,但我在网上找到的所有配置都需要2个负载平衡器节点。 2) 我不确定在哪里安装SSL证书(在负载平衡器或web节点上)以及使用HTTPS连接时哪个解决方案是最好的


需要任何帮助/想法,非常感谢。

我在类似的设置中使用过HAProxy,我强烈推荐它。它可以在一台服务器上很好地运行,在需要高可用性的情况下,您只需要两台服务器来进行负载平衡


有很多这样的教程提供了关于如何在您寻求的配置中设置它的详细说明。

我昨天刚刚创建了一个配置,其中NGINX服务器作为负载平衡器,后面有2个PHP-FPM服务器、1个Memcache服务器和1个MySQL服务器。NGINX是使用上行功能配置的,相关配置行如下所示:

html {

    ...

    # loadbalancing        
    upstream myLoadBalancer {
        ip_hash; # makes sure same user uses the same server, not 100% effective - application
                 # should handle this; in my case 1 Memcached and 1 MySQL servers commonly used
                 # by all App-servers work just fine. I store sessions in Memcache, so Session 
                 # management isn't a problem at all. Its shared across all App-servers.
        server 192.168.1.10:9000; # location of my first php-fpm server
        server 192.168.1.11:9000; # second php-fpm server
        # server aaa.bbb.ccc.ddd:80; # let's say, an Apache server
    }

    #vhost
    server {
        listen 80;
        server_name mydomain.com;
        index index.php;

        location ~* \.php$ {
            gzip on;
            try_files $uri =404;
            include fastcgi_params;
            fastcgi_pass myLoadBalancer;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME /path/to/webdir$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_script_name;
        }
    }
}
HTTPS:如果我没有弄错的话,它们应该安装在NGINX负载平衡器上-我自己从未尝试过。一旦客户端请求被传递到App server,它将对其进行处理,获取请求并将其发送回NGINX。NGINX在将响应转发给客户端之前,将对内容进行加密。这当然是一种理论。但我100%肯定NGINX可以非常轻松地处理SSL。当与各种CLI的FASTCGI功能相结合时,它是最快、最健壮的代理/平衡器和良好的Web服务器

注意:这不是生产环境的配置,而是测试用例场景。生产环境需要非常安全的设置。下列资源可能有用:


在任何情况下,如果您希望HTTPS连接到多个web服务器,理想的解决方案是在web服务器前面安装Nginx。它也可以用于负载平衡,但是如果您需要更多复杂的配置选项,那么最好将Nginx请求转发到您的HAProxy实例。这两个服务都使用最少的资源,因此不必担心同时运行这两个服务


我熟悉只拥有3台服务器而不需要冗余负载平衡器的想法。实际上,我写了一本关于扩展架构的电子书,其中包括一些2-3-4台服务器和1台负载平衡器的例子。也许它可以提供更多信息并帮助您入门。

您只需使用一个HAProxy节点即可完成所需操作(尽管这仍然会导致单点故障)

我已经写了一个,可以适应任何Ubuntu设置。通过使用
cookie
选项,您还可以强制执行会话持久性,因此无需在多个框之间共享会话,只有当用户所在的框在会话中途关闭时,用户才会丢失会话

一旦通过HAProxy平衡了标准HTTP流量,就可以使用
模式tcp
选项发送SSL。这无法将Cookie插入请求中,因此请使用
源代码的
平衡
模式。这将基于用户的IP进行平衡,因此不会在会话中期更改,除非您添加其他节点


然后在两个web节点上安装SSL证书,因为HAProxy只是平衡TCP流量。顺便说一句,您可以将这种平衡模式用于TCP上的任何内容,包括一些真正的高可用性解决方案的MySQL连接。

还可以考虑lighty-