Соединение PHP с набором реплик MongoDB завершается неудачно после удаления основного узла.
Я построил набор реплик mongodb с пятью узлами; mongo1 является первичным, а все остальные вторичны.
Вот мой код подключения:
$dbmongo_name = "myDatabase";
$dbmongo_conn_str = "mongodb://myusername:[email protected]:27017,mongo2.mysite.net@27017,mongo3.mysite.net@27017,mongo4.mysite.net@27017,mongo5.mysite.net@27017";
$dbmongo_conn_options = array("db" => $dbmongo_name, "replicaSet" => "rs1", "readPreference" => "secondaryPreferred", "connectTimeoutMS" => 5000);
class DB_Mongo {
global $dbmongo_conn_str, $dbmongo_conn_options;
public $connection;
function __construct() {
$this->connection = new MongoClient($dbmongo_conn_str, $dbmongo_conn_options);
}
}
Я обнаружил, что всякий раз, когда я останавливаю службу первого сервера в строке соединения (в настоящее время это mongo1), драйвер php либо выдаст ошибку исключения соединения, либо не выдаст какую-либо ошибку, кроме свойства подключенного соединения объект будет ложным.
Похоже, что php драйвер не может правильно подключиться к реплике.
Я попробовал другой эксперимент, меняя положение серверов. На этот раз моя строка подключения:
$dbmongo_conn_str = "mongodb://myusername:[email protected]:27017,mongo2.mysite.net@27017,mongo1.mysite.net@27017,mongo4.mysite.net@27017,mongo5.mysite.net@27017";
В этом случае mongo1 по-прежнему является основным; ошибка повторяется, когда я останавливаю службу mongo3. Кажется, что все будет хорошо, пока я не остановлю службу первого сервера в списке.
Задача ещё не решена.
Других решений пока нет …