在 Linux 上使用 Apache/Varnish/MySQL 优化服务器架构

Wer*_*reW 6 mysql linux varnish apache-2.2

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

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

现在我们在 8 个 Web 服务器前使用 Rackspace Cloud Load Balancer (Apache Zeus)。每个 Web 服务器都在 512MB 的云实例上运行 Linux,内容由 Varnish 和 Apache 2 后端提供。

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

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

性能通常很好,但是我们遇到了一些现有基础架构无法处理的负载峰值,因此我动态增加了节点的大小。这很有效,但我觉得在我们拥有的特定负载条件下,我不得不在基础设施上投入比我预期的更多的资源,以保持网站正常运行。在我的研究中,似乎我们正在使用一种非常罕见的设置来处理如此多的独立清漆实例,我可能需要探索缓存层的选项。

此处绘制了当前架构的概述(谷歌文档链接)

机架空间云的定价模型非常线性,这意味着 1024 mb 服务器实例的成本恰好是 512 mb 实例成本的两倍。因此,我希望在相同数量的资源(成本)内工作的同时最大限度地提高我的性能。

我最初的想法是移除机架空间负载平衡器,转而在 apache 后端之前使用单个清漆实例,并且可能使 apache 后端成为 4x 1gb 实例而不是 8x 512mb 实例。负载平衡器的成本非常便宜,因此为了证明用另一台专用服务器替换它的合理性,性能增益需要很大。

我也玩过 HAProxy 和 Nginx 的想法,但我不想在生产站点上盲目地开始试验。

我的目标是能够在大致相同的硬件分配上提供接近 2000 req/s 的服务。

编辑: 我让 mod_pagespeed 工作了一段时间,这让我提高了大约 100 req/s,但我似乎对它与清漆的交互方式有很多问题。

编辑: Varnish VCL,磁盘是 Rackspace Cloud 默认的(非 san,猜测是 SATA),数据库目前大约 1.5gb。正常情况下不会交换到磁盘。Apache 进程每个大约 20mb。php-cgi 进程往往会消耗更多资源。

Sil*_*Bob 1

我会选择一个高 RAM(使用 varnish-tools 检查 varnish RAM 使用情况并增加直到正常)Varnish 实例并且没有负载均衡器(或者如果您想要高可用性则使用两个 varnish 和负载均衡器)和尽可能多的 apache您需要的服务器...您的应用程序是否受 CPU 限制(更多服务器)或 RAM 限制(具有更高 MEM 的服务器)取决于您。

另外,调整缓存设置(什么可以兑现多长时间)也会有所帮助。