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

标签 php mysql database-performance slave

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

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

我在这里四处寻找答案,令我惊讶的是答案如此之少,也许我遗漏了一些明显的东西。向正确的方向插入会很棒。

在此先感谢您的帮助,

詹姆斯

最佳答案

我不会使用您的 PHP 代码来选择从站。要么在所有查询之前将您的请求定向到哪里,要么不够智能,无法成为真正的负载均衡器。

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

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


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

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

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

关于PHP 检查最不繁忙的 MySQL 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15783107/

相关文章:

php - 这是处理信用卡付款的正确方法吗?

php - 服务帐户的 Google Analytics API oauth 异常 "invalid_grant"。两台服务器上的相同代码。只有一个有效

sql - 为什么这个 MySQL 函数返回 null?

mysql - 如何解决不正确的字符串值错误 (MySQL)

Mysql:索引计数查询与维护汇总表

php - Paypal 集成中的未知错误

php - 一个查询中的许多事情。是否可以?

mysql - 从子查询中选择列

使用文件排序的 MYSQL 性能变慢

mysql - 提高特定 MySQL 查询的性能