0

データベースの負荷分散にPercona XtraDB Clusterを使用しています。

データベースに接続する通常の方法は次のとおりです。

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

ただし、複数のマスターがあり、それぞれがいつでも停止している可能性があります。

負荷分散と安全なフェールオーバーを使用してデータベース クラスターへの接続を確立する方法は?

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 に答える