我有2个Web服务器和1个服务器,可用作反向代理或负载均衡器。 2个Web服务器具有实际/公共IP以及负载均衡器。负载均衡器服务器尚未配置,因为我没有确定哪个选项最适合我的Web应用程序。我知道有一个负载均衡器存在风险,因为“单点故障”,但我想继续使用它。
2个Web服务器包含多个具有相同域和不同子域的PHP应用程序/ vhost(Apache + fastcgi)。他们都使用会话,cookie,其中一些需要SSL。我的主要目标是将传入的连接分成两半,并将它们转发到2个Web节点。如果一个Web节点脱机,另一个Web节点应该接受所有连接。我认为如果需要,我们可以与memcache进行会话共享。
我读到了关于Nginx,HaProxy以及我在网上可以找到的任何其他应用程序。但我无法决定因为:
1)我有1台服务器可以用作负载均衡器,但我在网上找到的所有配置都需要2个负载均衡器节点。 2)我不确定在何处安装SSL证书(在负载均衡器或Web节点上)以及使用HTTPS连接时哪种解决方案最佳。
需要任何帮助/想法,非常感谢。
答案 0 :(得分:4)
我在类似的设置中使用了HAProxy,我强烈推荐它。它可以在单个服务器上运行良好,只需要两个服务器进行负载平衡,以防您需要高可用性。
有许多教程,例如this,提供了有关如何在您寻求的配置中进行设置的详细说明。
答案 1 :(得分:1)
我昨天刚创建了一个配置,其中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服务器。
注意:这不是生产环境的配置,而是测试用例场景。生产环境需要很多安全设置。以下资源可能有用:
答案 2 :(得分:0)
在任何需要HTTPS到多个Web服务器的情况下,理想的解决方案是在Web服务器前安装Nginx。它也可以用于负载平衡,但是如果您需要更复杂的配置选项,那么将Nginx请求转发到您的HAProxy实例是个好主意。这两种服务都使用最少的资源,因此不必担心同时运行它们。
我熟悉只有3台服务器且不需要冗余负载均衡器的想法。我实际上写了一本用于扩展体系结构的电子书,它包括一些2-3-4服务器和1个负载均衡器的例子。也许它可以提供更多信息并帮助您入门。
答案 3 :(得分:0)
只需一个HAProxy节点即可完成所需的操作(尽管这仍然会让您遇到单点故障)。
我写了tutorial for installing HAProxy on Rackspace Cloud,可以适应任何Ubuntu设置。通过使用cookie
选项,您还可以强制执行会话持久性,因此无需在框之间共享会话,用户只有在会话期间关闭时才会丢失会话。
通过HAProxy平衡标准HTTP流量后,您可以使用mode tcp
选项发送SSL。这不能将Cookie插入请求中,因此请使用balance
source
模式。这取决于用户的IP,因此除非您添加其他节点,否则不会在会话中更改。
然后,您的SSL证书将安装在两个Web节点上,因为HAProxy只是在平衡TCP流量。顺便提一下,您可以将此平衡模式与TCP上的任何内容一起使用,包括用于某些真正高可用性解决方案的MySQL连接。