データベースの負荷分散にPercona XtraDB Clusterを使用しています。
データベースに接続する通常の方法は次のとおりです。
$db = new \PDO('mysql:dbname=foo;host=127.0.0.1');
ただし、複数のマスターがあり、それぞれがいつでも停止している可能性があります。
負荷分散と安全なフェールオーバーを使用してデータベース クラスターへの接続を確立する方法は?
データベースの負荷分散にPercona XtraDB 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 ($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 を確認しました。