负载平衡 – PHP / MySQL

我有一个严重依赖于MYSQL数据库的服务器。 最近,有负载问题和最大的MySQL连接问题。

我的想法是有一个主服务器的PHP代码和文件和一个数据库,以及只有数据库重复的辅助服务器(以便两个数据库是相同的)。 用户将访问主服务器,并且在PHP代码中,一半连接将被创build到主服务器上的数据库,一半连接到辅助服务器上的数据库。

我的问题是,这是减less服务器负载的最佳方式? 或者应该复制文件以便php代码的服务器端处理也在两个服务器之间分开。

谢谢!

改善问题的第一步是分离MySQL服务器和Web处理部分。 你听起来像你需要移动到一个2层系统 。 一旦将这两层分开,您可以考虑进一步负载均衡MySQL级别,如果这确实是您负载问题的地方。

在做这些之前,我会研究像memcached这样的MySQLcaching模块。

我会说这不是最好的方法。 如果你有(或更多)服务器,我认为你可以做的最好的事情是把应用程序(php)和数据库放在不同的服务器上。 另外,你有没有考虑使用清漆来静态内容?

在性能方面,负载平衡并不总是最终的解决scheme,但是你可以尝试重构你的mysql查询。

没有具体的“正确的”答案,涵盖了负载均衡(减less负载)基于LAMP的networking应用程序的所有情况。

这就是说,有一些技巧或意见可以应用:

  • 首先,我build议对您的服务器和应用程序进行分析,以了解并确定瓶颈,确保您的案例中实际上是MySQL数据库。
  • 一旦/如果您确定它确实是mysql,请尝试使用不同的优化技术,如下所述的其中一些:如果您有足够的RAM,则在mysqlconfiguration文件中增加(大小)variables,为ex添加memcachedcaching,审查慢速查询根据需要添加索引,使用SSD磁盘等添加前端caching与清漆。
  • 如果您决定转移到使用多个服务器,您有几个有效的选项。 你可以有一个架构,你可以在你的Web服务器上接收请求,并且像你所build议的那样,把数据库查询redirect到两个或者更多的后台数据库服务器(你可以在php代码中这样做)确保它们是同步的,复制的),或者你可以有一个体系结构,在这个体系结构中,负载平衡器(例如nginx)在前端处理请求,并将它们redirect到两个或多个包含所有堆栈的服务器(php代码加数据库),还需要复制数据库和可能的文件(例如,如果用户上传文件)。 根据你的具体情况,一种select可能比另一种更好,也有更复杂的可能性。