Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何配置PHP PDO以连接到多主机集群?_Php_Mysql_Pdo_Percona_Database Cluster - Fatal编程技术网

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

如何配置PHP PDO以连接到多主机集群?,php,mysql,pdo,percona,database-cluster,Php,Mysql,Pdo,Percona,Database Cluster,我使用的是负载平衡数据库 连接到数据库的常用方法是: $db = new \PDO('mysql:dbname=foo;host=127.0.0.1'); 但是,有多个主节点,每个主节点在任何时间点都可能已死亡 如何通过负载平衡和安全故障转移建立与数据库群集的连接?我的直觉猜测很简单: <?php $cluster = ['10.128.155.150', '10.128.155.151', '10.128.155.152']; shuffle($cluster); foreach

我使用的是负载平衡数据库

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

$db = new \PDO('mysql:dbname=foo;host=127.0.0.1');
但是,有多个主节点,每个主节点在任何时间点都可能已死亡


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

我的直觉猜测很简单:

<?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;
        }
    }
}

对于那些对此投反对票的人:解释这种方法为什么是错误的或者至少提供一个你喜欢的方法的例子是有意义的。这不是一个完美的解决方案,但会起作用,我也对一种更好的方法感兴趣。集群的重点不是让你选择连接到哪个主机。这是负载平衡器的工作。