php无法查询通过ssh隧道设置的mongodb副本

时间:2019-02-04 15:58:36

标签: php mongodb ssh

我正在尝试通过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隧道完美运行。

任何想法我会做错什么吗?

预先感谢, 马可。

0 个答案:

没有答案