从一个 PHP 页面对两个 MySQL 数据库进行负载平衡?

从一个 PHP 页面对两个 MySQL 数据库进行负载平衡?

这个问题真的很愚蠢,但我还是想问一下。

  1. 我有一个 Web 服务器,运行一个简单的 PHP 应用程序。
  2. 我有两台 MySQL 服务器,其中一台为复制数据库,用于支持 PHP 应用程序。我使用两个 MySQL 数据库来满足需求。

我怎样才能(事实上,我可以)让 PHP 应用程序交替使用哪个 MySQL 服务器?

我连接到数据库的 PHP 行当前是这样的:

$con = mysql_connect('10.0.0.2:3306','name','password')
  or die('Could not connect to the server!');

有没有办法让我的 10.0.0.2 和我的其他服务器实现负载平衡?谢谢。

答案1

一种非常简单的方法:您可以使用随机数在两个连接字符串之间进行选择,如下所示(这是伪代码,我不会说 PHP):

  $ran = gen_random();    // assuming range from 0..1
  if (ran < 0.5) then 
     $con = database1; 
  else 
     $con = database2; 

当然,真正的负载平衡也是可能的,您必须检查数据库服务器的负载并选择负载较低的服务器。

答案2

你要非常小心地做这些事情。MySQL 复制是一个主从过程。任何写入从服务器的更新都将不是回到主人身边,你将要最终导致数据库不一致。事实上,迟早你可能会遇到复制中断的情况,然后真正的乐趣就开始了。你可以尝试设置某种循环复制,但据我所知,没有人能够在生产环境中做到这一点。

无论如何,我可以告诉你,经过正确配置和优化的单个 MySQL 数据库服务器可以轻松处理多个 Web 服务器的流量(除非 Web 服务器是真正的动物,而数据库服务器是个侏儒)。

如果您需要合适的多主数据库集群,则必须研究其他解决方案。据我所知,市场上只有一个合适的多主数据库解决方案,那就是 Oracle。

答案3

MySQL 使用 NBCLuster 组。并非所有数据库都支持 NBCluster 数据库类型。您可以尝试在测试环境中迁移数据,看看会发生什么?然后您可以使用集群环境。

答案4

查看 5.3 中的新 mysql 驱动程序 (mysqlnd)。

或者您可以使用 MySQL Proxy,而不是使用 PHP 执行此操作。

干杯

相关内容