Я пытаюсь подключиться с помощью php к реплике mongodb, установленной через ssh-туннель, но не удается выполнить запрос.
Вот как я подключаюсь:
$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: Uncaught MongoDB \ Driver \ Exception \ ConnectionTimeoutException: не найдено подходящих серверов (serverSelectionTryOnce
установлено): [тайм-аут соединения с вызовом ismaster на '172.191.49.187:27017'] [соединениетайм-аут вызова ismaster на '172.191.49.194:27017'] [тайм-аут вызова ismaster на '172.191.49.206:27017'] в /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}, брошенный в / XXXX / vendor / mongodb / mongodb / src / Collection.php в строке 546
Окончательные данные, соединение с набором реплик хорошо работает для узлов в одной частной сети (вместо 127.0.0.1:ПОРТ, я использую частный ip от каждого узла в наборе реплик).
Этот код прекрасно работает через туннель ssh, если я удаляю опцию MongoDBUriOption "repliatSet" и оставляю только один узел в массиве MongoDBHosts.
Есть идеи, что я могу делать не так?
Заранее спасибо, Марко.