我们已经建立了一个特殊兴趣的社交网络,现在需要为 Web 应用程序服务器设置适当的服务器设置。
我们有对于 webapp 5 个物理服务器可用(2xE5645 CPU、24 GB Ram、RAID、4x Gbit NIC),五台服务器中的一台需要为我们的移动访问者(iOS、Android)提供 API。我们的 Web 应用需要 PHP、APC、Memcached 和 MySQL。
此外,我们还有另外 4 台物理服务器(2xE5620、12 GB Ram、RAID、4x Gbit NIC):
Comet 推送服务器(聊天的自定义服务器)
队列/邮件服务器 (beanstalkd)
静态 Web 服务器(G-WAN Web 服务器),配备 2xDAS 和 12x2TB(Raid 6 中总共 40 TB)
专用于 HTTPS 的 Apache 网络服务器(如果将 SSL 安全页面放在 LB 集群上,则该服务器也可以用于 LB 集群,这样是否更好?)。
一开始我们只想在 LB/HA 中拥有 webapp 服务器,因为目前我们没有更多可用的服务器。
最后一台是低成本服务器(X3430、4 GB Ram、RAID、2x Gbit NIC),用于监控所有硬件。
我们有 2 台 HP Procurve 2900 托管 48 端口 Gbit 交换机。
所有上述设备都位于网络中心的机架中。我们在所有服务器上都使用 RHEL 6。
我有很多想法,但我不确定哪一个是最好的方法。
我的方向是在两个盒子上安装 HA Proxy 和 Apache webserver,在两个盒子上安装 MySQL DB Server,在其中一个盒子上安装 Apache 和 MySQL 作为 API/Webservice。使用其中一个交换机作为私有网络,所有服务器将连接到该网络并用于内部通信(MySQL,上传后的文件传输)。
将每个服务器的多个 NIC 端口连接到交换机有帮助吗?
HA Proxy 是否是我们的最佳选择?或者在 2 或 3 个盒子上使用 nginx 并使用它进行负载平衡和提供 PHP 服务,并在 HA 部分使用 LVS 或类似的东西会更好吗?
我对所有解决方案都持开放态度,并且5+1服务器可以灵活使用。
谢谢你的帮助。
更新: 经过更多研究,我认为很难找到一个解决方案来实现所有服务器的 HA。我对设置的实际想法是:
nginx 作为负载平衡的代理(我将使用中等规格的机器之一)
3 个私有网络上的 Apache Web 服务器
2 个私有网络上的 MySQL 服务器主/从服务器
在上述解决方案中,Apache Webserver 还将托管用于支付的 SSL 站点,我不确定 nginx 是否可以处理这些不同后端服务器的 SSL 证书。
更新2: 我做了更多的研究,Redhat 提供了基于 LVS 的负载平衡附加组件。 http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtual_Server_Administration/ch-lvs-overview-VSA.html 这个插件看起来不错,但我仍然不知道哪种方法是正确的?最好在前面使用 nginx 还是使用 LVS 或其他东西?有人告诉我我也可以使用现有的 HP Procurve 2900 交换机进行简单的负载平衡....
答案1
LVS 专为第 4 层负载平衡而设计。nginx 或 HA 代理仅用于第 7 层(我的意思是 Web 流量)负载平衡。因此,如果 Web 流量是您最大的工作负载,我建议您使用 nginx 或 HA 代理作为负载平衡器。如果最大并发连接数是您的瓶颈,那么我建议您使用 HA 代理作为负载平衡器,因为 HA 代理具有更好的性能(参考:http://affectioncode.wordpress.com/2008/06/11/comparing-nginx-and-haproxy-for-web-applications/)。
答案2
从一开始就应该为 Web 应用设计 HA。真希望我曾经亲眼目睹过这样的事情发生 :)
但认真地说:您要求的是主动/主动设置。在决定这种架构时,最重要的问题是应用程序数据需要或不需要、可以或不能在应用服务器之间保持同步。此外,它必须有多同步,是否有代码期望更改在返回之前全局分布,应用程序中是否有可以处理几秒钟状态滞后但不会更多(不要忘记 mysql 复制属于第二种类型!)的区域?这些需求和可能性将决定您的设置。扩展硬件是稍后的事情。而且,主动/主动总是很难嫁接到任何没有考虑到它设计的东西上。