1

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

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

我在这里环顾四周寻找答案,令我惊讶的是答案很少,也许我错过了一些明显的东西。朝着正确的方向轻推会很棒。

提前感谢您的帮助,

詹姆士

4

1 回答 1

1

我不会使用您的 PHP 代码来选择奴隶。在所有查询将您的请求定向到何处之前,这将花费太多检查,或者不够聪明,无法成为真正的负载均衡器。

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

如果有一些极端查询会削弱从属服务器,那么您不想在那里进行更多查询,并且如果有一个客户端偏爱从机 1 高于从机 2,则您可能需要对此进行调整,因此并非适用于所有环境:在这种情况下,将您的(全部?)流量重定向到最佳机器的专用(IP 级)负载均衡器似乎是最佳选择。


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

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

但这仅适用于本地机器。要为远程机器获取此信息,您可以通过网络服务器公开这些值:您可以回显该文件的内容,或者更好的是,创建一个返回 JSON 或 XML 或任何您喜欢的带有这些值的小型“网络服务”。

于 2013-04-03T09:17:44.350 回答