通常 Web 项目从小规模开始,一切都在一台服务器上。但是,如果网站变得流行,一台服务器就不够了。
所以,由于我在这方面没有任何经验,我想了解一下:
1. 什么样的负载意味着我需要将我的 MySQL DB 移动到单独的服务器以及如何测量这种负载?
2. 什么样的负载意味着我需要添加另一个Web服务器,如何衡量?
3. 一台服务器大概可以服务多少用户?
我说的是 LAMP 服务器上的简单 PHP 应用程序,如下所示:
* CPU:Athlon 3800+
* CPU 详细信息:2 x 2.0 GHz
* RAM:1 GB RAM
* 硬盘:2 x 160 GB(RAID 1 软件)
这一切都取决于......你的数据集的大小,使用模式。
衡量最终用户体验。设置可接受的页面加载时间,每 5-10 分钟测试一次,绘制图表。这一切都取决于您的企业可以容忍什么以及何时变得不可接受。
在 mysql 中启用 slow_query,可能您不希望每天有超过 5-10 个查询需要超过 10 秒。或者也许你有一些夜间报道,你可以忍受这些?
可能你想生成一些统计信息——例如munin与 cpu 使用情况、iostats、系统负载、网络流量、http 进程数、mysql 线程数、页面生成时间,并查看它在一天/一周内的变化。你可以用它来确定高峰时间,并可以看到例如添加更多内存/调整 mysql 如何改变你的页面加载时间。
在您的情况下,平均负载 > 2 或 3 意味着系统超载 [但这很值得讨论]
在这里寻找一些提示。
开始规划更多服务器和可扩展架构的时间是当您坐下来制定规范时(您希望拥有一个具有模块化功能的代码库,因此很容易将事情分开,但至少有一个“网络前端-end”和“数据库后端”是某种程度的 ov 模块化)。
一旦你准备好并在一台服务器(数据库和前端)上运行,你就可以监控不同操作需要多长时间以及机器上的负载。一旦负载开始超过“CPU 数量”,您肯定会进入“我们应该将其拆分”的领域。如果您保存了历史数据,您可以推断未来的情况并决定一次添加更多容量,其中容量将大致按需要进行。
在 unix 机器上,“平均负载”是(大约)运行队列的平均长度(即,准备运行但等待时隙的进程;通常不按物理上的 CPU 数量缩放)盒子)。如果这持续高于您拥有的 CPU 数量,则这至少表明该机器过度工作。这不是唯一的衡量标准,但作为一个硬性的指南,它并不算太糟糕,系统会为您计算它。
除了负载之外,另一件要考虑的事情是您需要100% 的正常运行时间。如果您需要您的站点在服务器重新启动期间保持正常运行,那么您需要一些冗余/集群。
我们的网络服务器作为虚拟机运行,因此我们只使用两个(大约 200 个站点)来实现冗余,并且可以在必要时增加“服务器资源”来处理负载,而无需引入第三个网络服务器(最多) .
如果您需要提高性能,最简单的方法是将您的 MySQL 分离到一个单独的盒子中。但是,这也意味着您的站点将关闭两倍(即 - 当任一服务器重新启动/失败时它们将关闭)
当您的容量规划告诉您在当前基础架构用完之前,新服务器的交付时间大约是您的 3 倍时,您就升级了。
您还应该查看 mod_proxy 和 mod_disk_cache 以考虑您的计划。放置在单独的分区上,应用程序发送正确的标头(Cache-Control 等),这是提高应用程序在 apache 上的性能的一种非常好且简单的方法,因为任何缓存(和可缓存)页面都可以像静态一样提供。
不要尝试使用 mod_mem_cache 因为缓存共享原因它的性能较差。
在我正在运行的大规模虚拟主机系统上,它降低了大约 20-30% 的负载。请注意 mod_disk_cache 参数,因为如果设置错误,它们可能会显着增加您的 iostats。