我正在尝试通过ssh隧道将php连接到mongodb副本集,但是在执行查询时失败。
这是我的联系方式:
$MongoDBHosts = ['127.0.0.1:27018','127.0.0.1:27019','127.0.0.1:27020',];
$MongoDBUri = 'mongodb://'.implode(',', $MongoDBHosts).'/';
$MongoDBUriOptions = ['username' => 'USERNAME','password' => 'PASSWORD','replicaSet' => 'REPLICASET_NAME','authSource' => 'MYAUTHSOURCE',];
$MongoDBName = 'MyDB';
$mongoConnection = new MongoDB\Client($MongoDBUri,$MongoDBUriOptions);
$mongoDBLink = $mongoConnection->selectDatabase($MongoDBName);
我也有3条ssh隧道以这种方式到达每个节点:
ssh -p 1989 node01 -L 27018:127.0.0.1:27017 -N
ssh -p 1989 node02 -L 27019:127.0.0.1:27017 -N
ssh -p 1989 node03 -L 27020:127.0.0.1:27017 -N
这是执行查询的最终代码:
$documentId = new \MongoDB\BSON\ObjectId($documentId);
$document = $mongoDBLink->selectCollection('MYCOLLECTION')->findOne(['_id' => $documentId]);
print_r($document);
这是错误输出:
PHP致命错误:未捕获 MongoDB \ Driver \ Exception \ ConnectionTimeoutException:不适合 找到服务器(已设置
serverSelectionTryOnce
):[连接超时 在'172.191.49.187:27017'上调用ismaster 在'172.191.49.194:27017'上调用ismaster [连接超时 在'172.191.49.206:27017'上调用ismaster /XXXX/vendor/mongodb/mongodb/src/Collection.php:546堆栈跟踪:0 /XXXX/vendor/mongodb/mongodb/src/Collection.php(546):MongoDB \ Driver \ Manager-> selectServer(Object(MongoDB \ Driver \ ReadPreference))
1 /XXXX/code.php(8):MongoDB \ Collection-> findOne(Array)
2 {main}在第546行的/XXXX/vendor/mongodb/mongodb/src/Collection.php中抛出
最终数据,到副本集的连接对于同一专用网络内的节点都工作良好(不是127.0.0.1:PORT,而是使用副本集中每个节点的专用ip)。
如果我删除MongoDBUriOption“ repliatSet”选项,并且仅在MongoDBHosts数组中保留一个节点,则此代码可通过ssh隧道完美运行。
任何想法我会做错什么吗?
预先感谢, 马可。