0

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

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

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

但是,有多个 master,每个 master 都可能在任何时间点都死了。

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

4

1 回答 1

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。

于 2013-05-03T12:21:45.787 回答