代码之家  ›  专栏  ›  技术社区  ›  James Scott

PHP检查最不繁忙的MySQL服务器

  •  1
  • James Scott  · 技术社区  · 13 年前

    我正在使用PHP编写一个BI工具,它由一台Linux+Apache+PHP机器组成,提供报告和仪表板,其中包含从我们的MySQL数据库中获取的数据。数据库结构由一个主数据库(我无法访问它)和两个从数据库组成,我可以对它们运行查询。这里的想法是,如果一个从设备出现故障,平台可以继续从另一个从系统读取数据。我计划使用try/catch从一台机器故障切换到另一台机器。

    我的问题是,如果两个从属服务器都启动了,那么有没有任何方法可以使用PHP来检查哪一个最不繁忙,然后将查询指向这台机器,以最佳地平衡两个服务器之间的负载?

    我四处寻找答案,我惊讶于答案如此之少,也许我错过了一些显而易见的东西。朝着正确的方向轻推会很好。

    提前感谢您的帮助,

    詹姆斯

    1 回复  |  直到 13 年前
        1
  •  1
  •   Nanne    13 年前

    我不会用你的PHP代码来选择一个奴隶。它要么在所有查询之前都要花费太多的检查费用,要么不够聪明,无法成为真正的负载均衡器。

    首先,随机选择一个奴隶可能是件好事。这可能是在奴隶之间实现最佳分工的好方法,但也有一些收获。

    如果有一些极端的查询会削弱slave,那么你就不想在那里为abit做更多的查询,如果有一个客户端更喜欢slave1而不是slave2,那么你可能需要为此进行调整,所以它并不适用于所有环境:在这种情况下,一个专用的(IP级)负载均衡器将你的(所有?)流量重定向到最好的机器似乎是最好的选择。


    正如您所说,您可以使用PHP来查找机器的当前负载。

    if(file_exists("/proc/loadavg")) {
        $load = file_get_contents("/proc/loadavg");
        $load = explode(' ', $load);
    }
    

    但这只适用于本地机器。为了在远程机器上实现这一点,您可以通过Web服务器公开这些值:您可以回显该文件的内容,或者做一个小的“Web服务”,用这些值返回JSON或XML或任何您喜欢的东西。