删除主节点后,与 MongoDB 副本集的 PHP 连接失败。
我已经建立了一个有五个节点的 mongodb 副本集;mongo1 是主要的,其他都是次要的。
这是我的连接代码:
$dbmongo_name = "myDatabase";
$dbmongo_conn_str = "mongodb://myusername:mypassword@mongo1.mysite.net: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:mypassword@mongo3.mysite.net:27017,mongo2.mysite.net@27017,mongo1.mysite.net@27017,mongo4.mysite.net@27017,mongo5.mysite.net@27017";
在这种情况下 mongo1 仍然是主要的;当我停止 mongo3 服务时,错误再次发生。只要我不停止列表中第一台服务器的服务,似乎一切都会好起来的。