如何配置PHP PDO以连接到多主机群集?

时间:2013-05-03 12:20:45

标签: php mysql pdo percona database-cluster

我正在使用Percona XtraDB Cluster来加载平衡数据库。

连接数据库的常用方法是:

$db = new \PDO('mysql:dbname=foo;host=127.0.0.1');

然而,有多个主人,每个主人可能在任何时间点死亡。

如何通过负载平衡和安全故障转移建立与数据库集群的连接?

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结束了。