在Linux上使用Apache / Varnish / MySQL优化服务器体系结构

我是小型初创公司的服务器pipe理员(这意味着我绝不是一个经验丰富的专家),最近我帮助将站点从一台Windows机器迁移到Rackspace上的一组机器上云。

目前该网站的基准testing约为600个请求/秒,但考虑到我们分配给它的资源量,我觉得它可能要高得多。

现在我们在8台Web服务器前使用Rackspace云负载均衡器(Apache Zeus)。 每个Web服务器都在一个512MB云实例上运行Linux,内容由具有Apache 2后端的Varnish服务。

Web应用程序本身就是PHP。 Apache运行在mpm-worker中,php运行在fcgi中。 PHP APC也被启用。

至于数据库后端,我有两个4GB的服务器实例在Master-Master复制设置中为MySQL服务,其中一半的Web服务器指向每个服务器。 该应用程序是相当密集的数据库,因此有这么多的资源专用于数据库。

性能通常很好,但是我们有一些负载尖峰,现有的基础设施无法处理,所以我dynamic地增加了节点的大小。 这个结果很好,但是我觉得在特定的负载条件下,我不得不在基础设施上投入更多的资源,比我预期的要快得多。 在我的研究中,似乎我们正在使用非常罕见的设置,因为有很多单独的清漆实例,我可能需要探索caching层的选项。

这里画出了当前体系结构的概述(谷歌文档链接)

rackspace云的定价模式非常线性,这意味着一个1024mb的服务器实例是一个512mb实例成本的两倍。 因此,我期待在相同数量的资源(成本)下工作时最大化我的performance。

我最初的想法是删除rackspace负载平衡器,而不是在apache后端前面使用一个单独的varnish实例,也许使得apache后端是4x 1gb的实例,而不是8x 512mb的实例。 负载平衡器的成本非常低廉,所以为了用另一台专用服务器来替代它,性能增益将会很大。

我也玩弄了HAProxy和Nginx的想法,但是我不想盲目地在一个生产网站上做实验。

我的目标是能够在大致相同的硬件configuration下接近2000 req / s。

编辑:我有mod_pagespeed工作了一阵子,使我了约100 req / s,但我似乎有很多关于如何与清漆交互的问题。

编辑: Varnish VCL ,Disk是Rackspace Cloud的默认(非SAN,猜测SATA),数据库目前大约是1.5GB。 在正常情况下不能交换到磁盘。 每个Apache的进程大约是20MB。 php-cgi进程倾向于咀嚼更多的资源。

我会去一个高内存(使用清漆工具检查清漆内存使用情况,并增加到罚款)清漆实例和没有负载平衡器(或两个清漆和负载平衡器,你想高可用性)和许多Apache服务器,你需要…如果你的应用程序是CPU绑定(更多的服务器)或内存绑定(具有较高的MEM服务器)是由你决定的。

也玩caching设置(什么可以兑现多久)将有所帮助。

OP,你可以使用http://blitz.io做一些免费的基准testing。 此外,请查看“ab”和“httperf”以查找某些命令行工具标记工具。

清漆可以用最less的configuration取得巨大的成功。 此外,如果您使用PHP重型应用程序,我build议安装APC。