php не может запросить реплику mongodb, установленную через туннель ssh - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь подключиться с помощью 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.

Есть идеи, что я могу делать не так?

Заранее спасибо, Марко.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...