4

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

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

我阅读了有关 Nginx、HaProxy 和我在网上可以找到的任何其他应用程序的信息。但我无法决定,因为:

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

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

4

4 回答 4

4

我在类似的设置中使用了 HAProxy,我强烈推荐它。它可以在单台服务器上很好地运行,如果你想要高可用性,你只需要两台服务器来进行负载平衡。

有许多诸如此类的教程提供了有关如何在您寻求的配置中进行设置的详细说明。

于 2011-06-30T15:29:55.403 回答
1

我昨天刚刚创建了一个配置,其中 NGINX 服务器作为负载均衡器,后面有 2 个 PHP-FPM 服务器、1 个 Memcache 服务器和 1 个 MySQL 服务器。NGINX 是使用 Upstreaming 特性配置的,相关的配置行是这样的:

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 功能结合使用时,它是最快、最强大的代理/平衡器和良好的网络服务器。

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

于 2011-07-12T03:05:13.943 回答
0

您可以只使用一个 HAProxy 节点来完成您需要的操作(尽管这仍然会给您留下单点故障)。

我写了一个在 Rackspace Cloud 上安装 HAProxy 的教程,它可以适应任何 Ubuntu 设置。通过使用该cookie选项,您还可以强制会话持久性,因此无需在框之间共享会话,用户只会在他们所在的框在会话中途关闭时丢失他们的会话。

通过 HAProxy 平衡标准 HTTP 流量后,您也可以使用该mode tcp选项发送 SSL。这不能在请求中插入 cookie,所以使用balance. source这基于用户的 IP 进行平衡,因此除非您添加其他节点,否则不会在会话中更改。

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

于 2011-08-02T12:31:27.370 回答
0

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

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

于 2011-07-24T20:46:07.063 回答