我正在使用Percona XtraDB Cluster来平衡数据库。
连接数据库的常用方法是:
$db = new \PDO('mysql:dbname=foo;host=127.0.0.1');
但是,有多个 master,每个 master 都可能在任何时间点都死了。
如何通过负载平衡和安全故障转移建立与数据库集群的连接?
我正在使用Percona XtraDB Cluster来平衡数据库。
连接数据库的常用方法是:
$db = new \PDO('mysql:dbname=foo;host=127.0.0.1');
但是,有多个 master,每个 master 都可能在任何时间点都死了。
如何通过负载平衡和安全故障转移建立与数据库集群的连接?
我的直觉猜测很简单:
<?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。