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

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

我是一家小型初创企业的服务器管理员(这意味着我绝不是该主题的经验丰富的专家),最近我帮助将网站从单个 Windows 机器迁移到 Rackspace Cloud 上的机器集群。

目前该网站的基准速度约为每秒 600 个请求,但考虑到我们为其分配的资源量,我认为它可能会更高。

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

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

至于数据库后端,我有两个 4gb 服务器实例,它们在主主复制设置中为 MySQL 提供服务,一半的 Web 服务器指向每台服务器。该应用程序非常依赖数据库,因此有如此多的资源专用于数据库。

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

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

Rackspace Cloud 的定价模型非常线性,这意味着 1024mb 服务器实例的成本恰好是 512mb 实例的两倍。因此,我希望在资源量(成本)相同的情况下最大限度地提高性能。

我最初的想法是删除 rackspace 负载平衡器,转而使用 apache 后端前面的单个 varnish 实例,并可能将 apache 后端设为 4x 1gb 实例,而不是 8x 512mb 实例。负载平衡器的成本非常低廉,因此为了证明用另一台专用服务器替换它是合理的,性能增益必须很大。

我也曾经考虑过 HAProxy 和 Nginx,但我不想在生产站点上盲目地进行实验。

我的目标是在大致相同的硬件配置上提供接近 2000 个请求/秒的服务。

编辑: 我让 mod_pagespeed 运行了一段时间,它使我的速度提高了大约 100 req/s,但我似乎在它与 varnish 的交互方面遇到了很多问题。

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

答案1

我会选择一台高 RAM(使用 varnish-tools 检查 varnish RAM 使用情况并增加直到合适)的 Varnish 实例并且不使用负载均衡器(或者两台 varnish 和负载均衡器,您想要高可用性)和尽可能多的 apache 服务器...如果您的应用程序是 CPU 密集型(更多服务器)或 RAM 密集型(具有更高 MEM 的服务器),则由您决定。

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

答案2

OP,你可以使用http://blitz.io了解一些免费的基准测试。此外,查看“ab”和“httperf”了解一些命令行基准测试工具。

Varnish 只需极少的配置即可成功使用。另外,如果您使用 PHP 密集型应用程序,我建议您安装 APC。

相关内容