我正在使用Percona XtraDB Cluster来加载平衡数据库。
连接数据库的常用方法是:
$db = new \PDO('mysql:dbname=foo;host=127.0.0.1');
然而,有多个主人,每个主人可能在任何时间点死亡。
如何通过负载平衡和安全故障转移建立与数据库集群的连接?
答案 0 :(得分:0)
我的直观猜测很简单:
<?php
$cluster = ['10.128.155.150', '10.128.155.151', '10.128.155.152'];
shuffle($cluster);
foreach ($cluster as $i => $ip) {
try {
$db = new \PDO('mysql:dbname=foo;host=' . $ip . ';charset=utf8');
break;
} catch (\PDOException $e) {
if ($i === count($cluster)) {
throw $e;
}
}
}
尽管如此,我想知道是否还有更多的防弹解决方案。
编辑2013年5月3日14:42。我被解释说这种方法很糟糕,因为用户需要等到连接超时。适合工作的工具是http://us1.php.net/manual/en/intro.mysqlnd-mux.php。
请注意:
概念验证不支持准备好的无缓冲查询 语句和异步查询。
编辑2013年5月3日20:38。看着心跳和HAProxy结束了。