负载平衡 - PHP/Mysql

负载平衡 - PHP/Mysql

我有一台严重依赖 MYSQL 数据库的服务器。最近出现了负载问题和最大 mysql 连接问题。

我的想法是拥有一个包含 php 代码、文件和数据库的主服务器,以及一个仅复制数据库的辅助服务器(以便两个数据库相同)。用户将访问主服务器,在 PHP 代码中,一半的连接将连接到主服务器上的数据库,另一半将连接到辅助服务器上的数据库。

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

谢谢!

答案1

改善问题的第一步是将 MySQL 服务器和 Web 处理部分分开。听起来你需要转向两层体系。一旦两层分离,你就可以进一步研究MySQL 级别的负载平衡如果这确实是您遇到的负载问题。

不过,在这么做之前,我会研究一下MySQL 缓存类似memcached的模块。

答案2

我想说这不是最好的方法。如果您有两台(或更多)服务器,我认为最好的办法是将应用程序(php)和数据库放在不同的服务器上。另外,您是否考虑过将 varnish 用于静态内容?

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

答案3

对于基于 LAMP 的 Web 应用程序的负载平衡(以减少负载)的所有场景,没有特定的“正确”答案。

话虽如此,还是有一些建议或意见可以借鉴:

  • 首先,我建议分析您的服务器和应用程序以了解和找出瓶颈,确保在您的情况下它实际上是 MySQL 数据库。
  • 一旦/如果您确定它确实是 mysql,请尝试不同的优化技术,这里提到的几种技术例如:如果您有足够的 RAM,则在 mysql 配置文件中增加(大小)变量,使用 memcached 添加缓存,检查慢查询并根据需要添加索引,使用 Varnish 添加前端缓存,使用 SSD 磁盘等。
  • 如果您决定使用多台服务器,则有几种有效的选择。您可以采用 a) 一种架构,在这种架构中,您在 Web 服务器上接收请求,并将数据库查询(您可以在 php 代码中直接执行此操作)重定向到后端的两个或多个数据库服务器(如您所建议的那样)(您必须确保它们同步、复制)或者您可以采用 b) 一种架构,在这种架构中,请求由负载平衡器(例如使用 nginx)在前端处理,然后重定向到包含所有堆栈(php 代码加数据库)的两个或多个服务器,您还需要复制数据库和可能的文件(例如,如果用户上传文件)。根据您的具体情况,一种选择可能比另一种“更好”,并且还有更复杂的可能性。

相关内容