这个问题真的很愚蠢,但我还是想问一下。
- 我有一个 Web 服务器,运行一个简单的 PHP 应用程序。
- 我有两台 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 执行此操作。
干杯